c# 到 PHP SQL 注入预防

Posted

技术标签:

【中文标题】c# 到 PHP SQL 注入预防【英文标题】:c# to PHP SQL Injection Prevention 【发布时间】: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);

【问题讨论】:

相关:***.com/questions/60174/… 这取决于您的查询是由您不信任的来源生成的吗?如果它只是关于由不受信任的来源生成的变量,您可以使用 Ronald 的答案。 【参考方案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

【讨论】:

以上是关于c# 到 PHP SQL 注入预防的主要内容,如果未能解决你的问题,请参考以下文章

PHP 预防SQL注入 - básico

sql注入的原理是什么,怎么预防sql注入

PHP POST, GET 参数过滤,预防sql注入函数

PHP POST, GET 参数过滤,预防sql注入函数

什么是 SQL注入?怎么预防?

什么是 SQL注入?怎么预防?