PHP简单的反sql注入机制?

时间:2011-11-27 01:13:59

标签: php sql-injection

  

可能重复:
  Best way to stop SQL Injection in PHP

我想要一种简单的方法来验证在通过PHP使用MySQL数据库时SQL注入的可能性(即确保$ _POST中的用户提供的名称不包含sql子查询)。

我正在寻找的并不一定是工业实力或坚不可摧(尽管不可否认) - 它或多或少是个人项目自学的东西。

那么,有没有一种标准的,有点简单的方法在PHP中执行此操作? (我假设必须有)。我知道我可以运行一堆手工制作的正则表达式来检查PHP提供的字符串中的SQL,但我不相信这是最好的方法!

4 个答案:

答案 0 :(得分:4)

使用准备好的查询与PDO。阅读关于它们的php.net文档。

http://php.net/manual/en/book.pdo.php

http://www.php.net/manual/en/pdo.prepared-statements.php

答案 1 :(得分:0)

几项测试规则:

  1. 检查is_numeric()是否需要数字(或is_string()is_array()is_object()等等。)
  2. 在输入和textareas上使用mysql_real_escape_string()
  3. 另外使用Sanitize filters

答案 2 :(得分:-1)

答案 3 :(得分:-1)

  

确保$ _POST中的用户提供的名称不包含sql子查询

这是绝对错误的做法。

  1. 它没有任何帮助,因为注射不受子查询的限制
  2. 它可以对诚实数据进行虚假警报。
  3. 它是无用的,因为还有其他机制,常规机制,使注射不可能。
  4. 更不用说第二层注射
  5. 验证的整个想法几乎没有意义。

    用于保存任何数据的数据库,没有任何限制。为什么限制自己?

      

    那么,在PHP中是否有一种标准的,有点简单的方法呢?

    当然。

    但仅限于创建查询,而不是在验证输入方面 所以,这里有一套非常简单的规则

    只要所有可变部分都通过

    进入查询
    • 一些占位符 - 一个代理,一个表示实际数据的变量(并假设占位符正确处理)。
    • 或从某些白名单中选择,代码中的一组可能值硬编码 -

    可以确定无法注射。