1

在写入 MYSQL dB 之前,我使用此函数从字段中删除所有非数字:

function remove_non_numeric($inputtext) {return preg_replace("/[^0-9]/","",$inputtext);

这是否有效地转义输入数据以防止 SQL 注入?我可以将此函数包装在 中mysql_real_escape_string,但认为这可能是多余的。

4

2 回答 2

3

当涉及到 sql 注入时,假设是所有问题的根源。无论如何将它包装在 mysql_real_escape_string 中。

于 2011-08-05T18:55:35.143 回答
0

它不会转义数据,但它确实是OWASP推荐方法的一个示例。

通过从输入中删除除数字之外的所有数字,您可以通过实施White list有效地防止 SQL 注入。没有多少偏执可以使生成的字符串(在这种特定情况下)成为有效的 SQL 注入有效负载。

但是,代码会老化和更改,并且会被新开发人员继承而被误解。因此,最重要的是,正确的建议,结束一切 - 是通过以下 3 个步骤中的一个或多个来积极防止 SQL 注入。按照这个顺序。曾经。单身的。时间。

  1. 使用安全的数据库 API。(例如准备好的语句或参数化查询)
  2. 使用 db 特定的转义或转义例程(mysql_real_escape_string属于此类)。
  3. 白名单可接受输入值的域。(您提出的数字解决方案属于此类)

mysql_real_escape_string不是所有反sql注入的答案。它甚至不是最强大的方法,但它确实有效。剥离除数字之外的所有值都是将安全值列入白名单,这也是一个不错的想法 - 但是,它们都不如使用安全 API 好。

于 2012-10-15T22:32:51.607 回答