删除所有非数字字符有效地逃避数据?

时间:2011-08-05 18:49:58

标签: sql sql-injection mysql-real-escape-string

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

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

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

2 个答案:

答案 0 :(得分:3)

当涉及sql注入时,假设是所有 bleep 的母亲。无论如何将它包装在mysql_real_escape_string中。

答案 1 :(得分:0)

它不会逃避数据,但它确实是推荐OWASP方法的一个例子。

通过从输入中删除除数字之外的所有内容,您可以通过实现White list来有效地防止SQL注入。没有任何偏执可以使得到的字符串(在特定情况下)成为有效的SQL注入有效负载。

然而,代码老化和变化被误解为新开发人员继承的。因此,底线,正确的建议,结束所有和全部 - 是通过以下一个或多个步骤主动防止SQL注入。按此顺序。永远。单。时间。

  1. 使用安全的数据库API。 (例如,准备好的陈述或参数化查询)
  2. 使用特定于数据库的转义或转义例程(mysql_real_escape_string属于此类别。)
  3. White list可接受输入值的域。 (您提出的数字解决方案属于此类别)
  4. mysql_real_escape_string不是所有反sql注入的答案。它甚至不是最强大的方法,但它的工作原理。除了数字之外的所有数据都是白色的,列出了安全值并且也是一个合理的想法 - 然而,它们都不如使用安全API。