【问题标题】:c# to PHP SQL Injection Preventionc# 到 PHP SQL 注入预防
【发布时间】:2016-12-11 16:06:51
【问题描述】:

我有一个简单的脚本可以将 SQL 查询发送到 PHP 脚本,但我不知道如何保护它免受 SQL 注入。

你有什么想法吗?谢谢!

C# 脚本

private void SQLConnect()
{
string urlAddress = "XXX";

查询 PHP 脚本

string query = "INSERT INTO user (name) VALUES ('Test-Name')";

通过 POST 将查询发送到 PHP 脚本

using (WebClient client = new WebClient())
{
    NameValueCollection postData = new NameValueCollection()
{
{ "newQuery", query },
};
string pagesource = Encoding.UTF8.GetString(client.UploadValues(urlAddress, postData));
}
}

PHP 脚本

$db_server = xxx;
$db_benutzer = 'xxx';
$db_passwort = 'xxx';
$db_name = 'xxx';

连接到数据库

$mysqli = new mysqli($db_server, $db_benutzer, $db_passwort, $db_name);

if ($mysqli->connect_errno) 
{
printf("Connect failed: %s\n", $mysqli->connect_error);
exit();
} 
else
{
echo "Connected...\n";
}

从 C# 接收并执行查询

$newQuery = $_POST["newQuery"];;

if ($mysqli->query($newQuery) === TRUE) 
{
echo("Success...\n");
}

mysqli_close($mysqli);

【问题讨论】:

  • 这取决于您的查询是由您不信任的来源生成的吗?如果它只是关于由不受信任的来源生成的变量,您可以使用 Ronald 的答案。

标签: c# php security mysqli sql-injection


【解决方案1】:

您可以拆分变量。因此,在您的帖子中,您有一个带有占位符的查询:INSERT INTO user (name) VALUES @p1

using (WebClient client = new WebClient())
{
    NameValueCollection postData = new NameValueCollection()
    {
        { "newQuery", query },
        { "P1", username }
    };
}

那你用PHP安全替换参数:http://php.net/manual/en/security.database.sql-injection.php

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-22
    • 2011-03-15
    • 2016-11-08
    • 2017-12-17
    • 2012-12-21
    • 2018-03-23
    • 2019-02-03
    • 1970-01-01
    相关资源
    最近更新 更多