【问题标题】:Filter URL Query Strings For SQL Injections - PHP过滤用于 SQL 注入的 URL 查询字符串 - PHP
【发布时间】:2011-06-04 00:28:57
【问题描述】:

我得到了一个网站来修复最近被使用 SQL 注入攻击的网站。据我所知,Havij 自动 SQL 注入器用于将代码插入到 url 的查询字符串参数中。

该网站是一个定制的 CMS 版本,有点过时了。我认为不太可能进行全面重建。

防止这种情况再次发生的最佳方法是什么?我是一名 PHP 开发人员,但通常只是对表单进行验证,或者使用已经内置此功能的系统 - wordpress、codeigniter、drupal 等。

感谢任何想法或想法。

谢谢

【问题讨论】:

    标签: php sql-injection xss


    【解决方案1】:

    只有一个简单的规则:每一个变量(不管它来自哪里——来自用户还是已经从数据库中获取)被放入 sql 查询应该是之前用mysql_real_escape_string() 进行过消毒。

    或者你可以使用准备好的查询(准备好的语句/占位符),没关系。

    【讨论】:

    • 好吧,任何引用的变量(字符串)。不要在整数和浮点数上运行 MRES,只需在将其添加到查询之前将它们转换为:' AND id = ' . (int) $id
    • @ircmaxell:确实,只是不想让 OP 变得复杂。
    • 是的,简单的答案就是我的那杯茶。同样感谢@ircmaxell
    【解决方案2】:

    您可能无法更改所有代码,但也许您可以更改数据库代码。如果是这样,请尝试使用 PDO 和准备好的语句。我推荐 pdo 因为您没有指定数据库类型。如果你用的是mysql,我觉得mysqli也提供prepared statements。

    【讨论】:

    • 是的,我只是在变量进入数据库之前对变量使用了 mysql_real_escape_string() 函数。没有我想象的那么紧张/工作。感谢您的回答。
    • @Robimp 没问题,很高兴我能帮上忙。
    【解决方案3】:

    $url = filter_var($url, FILTER_SANITIZE_URL);

    【讨论】:

      猜你喜欢
      • 2022-10-13
      • 2021-04-13
      • 1970-01-01
      • 1970-01-01
      • 2011-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多