-2

我的问题是,如何使用脚本或其他自动方法,更改每个

$_POST['*'] 变量,在所有 PHP 文件中,

等价物抗 MySQL 注入。

在这个话题上,我在谷歌上一无所获。

本主题可能有用:如何防止 PHP 中的 SQL 注入?

提前致谢!

4

2 回答 2

3

你不能可靠地做到这一点。这正是 PHP 开发人员打算使用命运多舛的魔术引号功能做的事情,但它根本无法适用于任何地方的每个人。

安全性不是您在编写应用程序后就可以固定的东西。你必须为它设计。在这种情况下,这意味着您需要重新访问每个 SQL 查询并以安全的方式重写它。

于 2012-04-26T12:49:41.467 回答
1

正如 Jon 已经说过的,每个 SQL 查询都应该在您的应用程序中进行审查。

但是,如果您使用的是 Apache,则可以尝试使用可能的(糟糕的)解决方案来回答您的问题。

  1. 设置 apache 并php.ini允许auto_prepend_file通过.htaccess文件进行设置
  2. 写进php_value auto_prepend_file mysql_magic_quote.inc.php.htaccess
  3. 放一些这样的代码mysql_magic_quote.inc.php

例子:

foreach($_POST as &$var)
    $var = addquotes($var);
foreach($_GET as &$var)
    $var = addquotes($var);
foreach($_COOKIE as &$var)
    $var = addquotes($var);
foreach($_REQUEST as &$var)
    $var = addquotes($var);

请注意:

  1. 这基本上模拟了不推荐使用的设置magic_quotes_gpc,该设置已被弃用是有原因的!
  2. 这只是一个愚蠢的例子——它肯定会引起副作用
  3. 不要这样做,而是检查您的代码!
  4. 我没有mysql_real_escape_string()在这里使用,因为那需要一个开放的数据库连接。
  5. 我没有mysql_escape_string()在这里使用,因为它也被弃用了。

addlashes() 的一个示例使用是当您将数据输入数据库时​​。例如,要将名称 O'reilly 插入数据库,您需要对其进行转义。强烈建议使用 DBMS 特定的转义函数(例如 MySQL 的 mysqli_real_escape_string() 或 PostgreSQL 的 pg_escape_string()),但如果您使用的 DBMS 没有转义函数并且 DBMS 使用 \ 来转义特殊字符,您可以使用这个功能。这只是将数据放入数据库,不会插入额外的\。将 PHP 指令 magic_quotes_sybase 设置为 on 将意味着 ' 被另一个 ' 转义。

PHP 指令 magic_quotes_gpc 在 PHP 5.4 之前默认启用,它本质上是对所有 GET、POST 和 COOKIE 数据运行 addlashes()。不要在已经用 magic_quotes_gpc 转义的字符串上使用addslashes(),因为你会做双重转义。函数 get_magic_quotes_gpc() 可能会派上用场来检查这一点。

于 2012-04-26T13:05:18.843 回答