修复旧的PHP网站快速解决SQL注入漏洞的方法?

时间:2014-04-03 18:03:25

标签: php sql sql-injection

我刚刚接手了一个充斥着SQL注入漏洞的旧PHP网站。作者将$_GET变量直接包含在SQL语句中。

我不是PHP程序员,时间很短,所以我无法使用预备/参数化语句。

我可能有时间做的最好的事情就是这样:

$unsafe_variable = $_POST["user-input"];
$safe_variable = mysql_real_escape_string($unsafe_variable);

mysql_query("INSERT INTO table (column) VALUES ('" . $safe_variable . "')");

有没有办法快速对网站上的所有页面执行此操作?例如,我是否可以include迭代$_GET数组并清理或转义变量,然后使用$_GET数组中的安全版本覆盖其不安全版本。这意味着我可以一次性修复所有页面:)

修改

我应该注意到我不是一个php程序员,我没有选择使用准备好的语句所以我不能及时了解哪个php函数可以安全地进行消毒输入。在进一步阅读时,我相信如果我将mysql字符集设置为utf8,那么real-escape函数是安全的

<?php

$conn = mysql_connect("localhost", "my_user", "my_pass");
$db   = mysql_select_db("world");

if (!mysql_set_charset('utf8', $conn)) {
    echo "Error: Unable to set the character set.\n";
    exit;
}

我也相信代码根本不会处理GET变量,而只是将它们添加到sql查询中。

3 个答案:

答案 0 :(得分:2)

是的,你可以做一个包含或只是一个像“

”这样的衬里
foreach($_REQUEST as $key => $val) { $_REQUEST[$key] = mysql_real_escape_string($val); }

这假设没有发布数组式表单字段。

但是,你必须明白

它不会减少注射

但只是降低风险

答案 1 :(得分:0)

最安全的方法是下载所有源代码,打开notepad ++中的所有.php文件,并在所有打开的文件中搜索mysql_,然后验证是否必须替换它。

如果您的项目不是那么大,它不会花费太长时间,如果在一个文件中调用不完全相同,它将避免破坏您的代码。

答案 2 :(得分:0)

  

这意味着我可以一次性修复所有页面:)

不幸的是,它无济于事。

因为显然没有快速的方法。

仅仅因为mysql_real_escape_string决不会使变量“安全”。

如果确定您查询的每个变量不仅可以转义,而且还可以引用,那么您可以实现的唯一大致相当的安全性。

相关问题