2011-08-05 22 views
1

我使用此功能写入MySQL数据库之前,剥去现场所有非数字:是否会清除所有非数字字符以有效地转义数据?

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

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

回答

3

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

+1

+1保持警惕,而且所有的业务。 –

0

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

通过从输入中删除除数字以外的所有数字,可以通过实施White list有效防止SQL注入。没有多少偏执可以使得到的字符串(在这个特定情况下)变为有效的SQL注入有效载荷。

但是,代码年龄和变化,并被误解,因为它由新开发人员继承。所以底线,正确的建议,最终的结果都是 - 通过以下3个步骤中的一个或多个主动防止SQL注入。按此顺序。永远。单。时间。

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

mysql_real_escape_string不是所有反SQL注入的答案。它甚至不是最健壮的方法,但它的工作原理。剥离除数字外的所有东西都是白色的,列出了安全值,也是一个好主意 - 然而,它们都不如使用安全的API。

相关问题