2

MYSQL我有一个非常老的客户,他现在因为注射而遇到安全问题。这个客户没有足够的钱将他的 PHP 数据库函数更改为PDOMYSQLI. 尽管如此,他建议他想要一个防止 mysql 注入的功能。他深知功能并不完善。但是,他现在没有其他临时的办法。我为他写的函数叫做safe();. 我的问题来了。如何将该功能应用于他网站中的所有POSTs 和s。REQUEST他的网站有很多文件,需要几个小时才能更改。我可以在每个文件的标题中添加什么东西,将我的函数应用于所有POSTs 和REQUESTs 变量?

可能看起来像这样的东西:

$_POST[*] = safe($_POST[*]);

当然,上面的代码是行不通的。但我希望你明白。

4

4 回答 4

3

你可以使用array_map,但我怀疑它会是完美的解决方案:

$final = array_map( "mysql_real_escape_string", $_POST );
于 2013-04-04T14:32:45.910 回答
3

最后 $_POST 和 $_GET 只是数组。你可以做一个像

foreach ($_POST as $key => $value) {
  safe($value);
} 

如果他们有旧的 php 服务器等。因此,如果您有一个包含在整个网站上的通用文件并且“正常”功能不是一个选项,那么这可能是备份计划。

于 2013-04-04T14:33:16.667 回答
3

您正在描述臭名昭著的Magic Quotes,如果服务器早于 PHP/5.4.0(我认为是这种情况),它们仍然可用。

请注意,它们会影响所有 POST 数据,包括不会注入 SQL 查询的数据。

如果您更喜欢您的safe()函数,您可以简单地编写一个简单的脚本来进行更改并通过auto_prepend_file调用它。

于 2013-04-04T14:34:40.530 回答
2

https://stackoverflow.com/questions/15664021/php-escaping-vars-posted-through-var-and-got-by-postvari-with-a-meth的可能副本

有人告诉我,没有通用的方法,但是您可以通过 foreaching $_POST 数组来尝试一下

于 2013-04-04T14:30:27.667 回答