PHP函数:mysql_real_escape_string&将图层设置为$ _POST

时间:2013-10-29 17:26:12

标签: mysql

我希望保护我对数据库的所有输入。我写了以下函数:

function mysql_real_escape_array($t){
    return array_map("mysql_real_escape_string",$t);
} 

在我写的所有php数据加载的文件中:

$_POST=mysql_real_escape_array($_POST);

我认为通过这个脏代码我没有任何缺点,并且没有可能的恶意查询。或者有人认为,这个代码有什么缺点吗?

很高兴听到一些反馈。我知道这可能不是最好的解决方案,但通过这种方式我永远不会忘记逃避一些事情。

谢谢!

2 个答案:

答案 0 :(得分:2)

通过Prepared StatementsPDO使用MySQLi。这是唯一真正安全且不会影响性能的方法。

答案 1 :(得分:2)

确保防止注入的唯一方法是使用正确的参数化查询。查询的所有参数都有漏洞,必须正确转义。这不仅是为了防止恶意注入,而是为了防止意外注入。例如,您可以:

SELECT value FROM t1
$value = $result; //$value is now "o'connel"
// SQL error caused by apostrophe in string
SELECT col FROM t2 WHERE value = '$value'

您可能认为此数据是安全的,因为它是内部数据,但仍然可能因未正确转义而导致问题。

关于覆盖$_POST,请注意您仍然可以从$_POST获取原始帖子正文以及$_REQUEST值,因此无法确保您的数据已正确转义。更重要的是,mysql_real_escape_string在您需要使用它时可能没有有效的mysql连接。这可能会导致问题和漏洞。 $_POST值也可以是数组,因此您的函数也需要重复使用。

很多更容易忘记所有这些注意事项,并使用PDOmysqli的参数化查询。请注意,使用预准备语句本身是不够的。您必须正确地参数化查询。