【问题标题】:Sanitize GET query with Apache使用 Apache 清理 GET 查询
【发布时间】:2011-01-02 17:45:08
【问题描述】:

我看到这里有很多关于如何清理数据的讨论。可以吗 就像将这个重写规则添加到 .htaccess 一样简单?

RewriteRule ^([\w\-]+)$ index.php?page=$1

据我了解,这将只允许在 $1 中使用字母、数字、_ 和 -,对吗?

如果您将准备好的语句添加到 SQL 查询的这种用法中,那应该是很好的证明, 是这样吗?

不知何故感觉太容易令人难以置信,我是否遗漏了什么,有什么方法可以巩固它吗?

【问题讨论】:

    标签: apache .htaccess get sanitize


    【解决方案1】:

    如果您将准备好的语句添加到 SQL 查询的这种用法中,那应该是很好的证明,对吗?

    并非如此,因为您的规则对于大多数用例来说过于严格。以字符串输入中的元音变音为例。您需要为某些输入允许一些非 ASCII 字符。此类数据在 URL 中是 percent encoded,因此您必须开始过滤掉某些字符,即使这样也对安全性毫无用处。除了数据库注入之外,还有很多很多的攻击媒介。

    对于所有这些危险,没有“一刀切”的卫生方法。对于每种情况(在文件名中使用;在 HTML 输出中;在 Javascript 输出中;在电子邮件中......),都有一种正确的方法。在 Web 服务器级别过滤掉“无效”字符实际上并不实用——为了获得完美的安全性,您必须在 Apache 语法中重新创建所有这些特定的清理功能,这几乎是不可能的。

    另见:PHP: the ultimate clean/secure function

    【讨论】:

    • 那么,如果我们谈论 SQL 查询的用法,您会建议进一步的安全步骤 - url_decode 有什么好处吗?还有关于通过 HTML 输出的 XSS,不剥离 >
    • @Freelancer PDO 或 mysqli 的预处理语句被认为是对注入的充分保护。没有必要做任何其他事情。 Re XSS,让我挖一个链接
    • @Freelancer Re XSS,必须在任何用户数据上运行htmlspecialchars(),然后再以 HTML 格式输出。这里有一个答案声称strip_tags() 也是必要的,以防止一种相当奇特的攻击:stackoverflow.com/questions/3623236/… 但我不确定该怎么想 - 我个人认为htmlspecialchars() 会做。
    【解决方案2】:

    如果您想要在 Web 服务器级别进行操作,您可能需要使用 mod_security 之类的东西进行调查。这将有助于减轻一些攻击——但最终级别的防御必须在 PHP 本身内完成。总会有一种攻击被 Web 服务器认为“很好”,但会导致您的应用程序混乱。无论您如何锁定查询参数以防止注入漏洞,都会遗漏一些东西。

    既然您可以在 PHP 中执行一个简单的mysql_real_escape_string() 并在其中捕获所有内容,为什么还要浪费数小时/数天的时间来提出完美的 RewriteRule?

    【讨论】:

      猜你喜欢
      • 2023-04-07
      • 1970-01-01
      • 1970-01-01
      • 2011-05-27
      • 1970-01-01
      • 2019-03-07
      • 2021-09-30
      • 1970-01-01
      • 2020-03-19
      相关资源
      最近更新 更多