我的问题是,如何使用脚本或其他自动方法,更改每个
$_POST['*'] 变量,在所有 PHP 文件中,
等价物抗 MySQL 注入。
在这个话题上,我在谷歌上一无所获。
本主题可能有用:如何防止 PHP 中的 SQL 注入?
提前致谢!
我的问题是,如何使用脚本或其他自动方法,更改每个
$_POST['*'] 变量,在所有 PHP 文件中,
等价物抗 MySQL 注入。
在这个话题上,我在谷歌上一无所获。
本主题可能有用:如何防止 PHP 中的 SQL 注入?
提前致谢!
你不能可靠地做到这一点。这正是 PHP 开发人员打算使用命运多舛的魔术引号功能做的事情,但它根本无法适用于任何地方的每个人。
安全性不是您在编写应用程序后就可以固定的东西。你必须为它设计。在这种情况下,这意味着您需要重新访问每个 SQL 查询并以安全的方式重写它。
正如 Jon 已经说过的,每个 SQL 查询都应该在您的应用程序中进行审查。
但是,如果您使用的是 Apache,则可以尝试使用可能的(糟糕的)解决方案来回答您的问题。
php.ini
允许auto_prepend_file
通过.htaccess
文件进行设置php_value auto_prepend_file mysql_magic_quote.inc.php
你.htaccess
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);
请注意:
magic_quotes_gpc
,该设置已被弃用是有原因的!mysql_real_escape_string()
在这里使用,因为那需要一个开放的数据库连接。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() 可能会派上用场来检查这一点。