【问题标题】:Automatic SQL injection prevention php libraries [duplicate]自动SQL注入预防php库[重复]
【发布时间】:2016-11-08 01:59:49
【问题描述】:

是否有任何自动 SQL 注入预防 PHP 库。例如,在继续执行站点代码之前检查传入的参数(如 GET、POST)并检查可能的 SQL 攻击签名。

例如: http://www.example.com/index.php?page_id=')//UnON//aLL//SELECt//nULL,nULL,nULL,nULL,nULL,nULL,nULL,nULL,nULL,nULL- -/**/uHkS

在上面的URL中我已经在GET参数中传递了sql语法,PHP库会在项目代码开始执行之前检查GET、POST参数,如果包含任何SQL攻击,将立即存在请求。抛出异常消息。

【问题讨论】:

  • 你可以通过使用prepared statements来防止SQL注入
  • 也强烈建议存储过程反对 SQL 注入。

标签: php mysql wordpress mysqli


【解决方案1】:

正如在其他 cmets 中所写:没有库可以通过请求自动检测对您的数据库的攻击。

如果有可能对数据库操作造成威胁的数据传入,立即取消请求将是非常糟糕的。

只需使用输入名称的普通格式即可。他的名字是布赖恩奥康纳......好吧,看来他将无法使用你的程序。

如果用户想弄乱您的数据库,库需要进行语义检查。为了进行这种语义检查,库还需要知道实际需要什么样的数据。在上面提到的示例中,当需要一个名称时,您可能会确定“drop table”不是想要的输入,但是为每个输入定义想要的规则会产生很多开销。

如果您始终正确处理用户数据(通过使用准备好的语句或数据库 api 的转义/引用功能),您的表中将有一些奇怪的数据(如果有人真的试图向您注入 sql)但是我猜不会伤害你的。

【讨论】:

    【解决方案2】:

    您可以使用PDOPrepared Statements 在数据库端执行一些操作,或者您可以在服务器端脚本端清理POSTGET 数据。

    $safe_data=filter_input(INPUT_GET, 'comment', FILTER_SANITIZE_SPECIAL_CHARS);
    

    因为这个函数一次只能处理一个GET参数,你可能想写一个函数来创建一个新数组(例如$SAFE_GET),它遍历GET参数并将它们全部清理一口气。

    或者,您可以在php.ini 文件中设置一个指令以默认清理所有输入以确保 HTML 安全:

    filter.default="special_chars"
    

    我认为没有 php 库可以清理它;您必须小心处理数据的方式。

    对于POSTGET,清理用户输入。通过所有类型的Fuzz Testing 并执行问答,您的应用程序应该是安全的。

    【讨论】:

    • 曾经有过吗?如果恶意使用表单怎么办?
    • 如果恶意不使用表单怎么办?
    • 不仅在url上做,还从表单触发;双向。脚本还能怎么执行?
    • Bingo,也可以通过 cURL 请求从命令行执行。
    猜你喜欢
    • 2013-04-13
    • 2016-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-22
    • 2011-03-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多