0

假设我有一个地址http://example.org/articles/children/title。现在,mod_rewrite 将其翻译成http://example.org?type=article&category=children&id=title

现在,大多数用户只阅读第一部分,而忽略了问号之后的任何内容。他们应该安全地这样做。但是,如果有人使用http://example.org/articles/title?something=long_meaningless_string&type=adult&title=othertitle链接到我,我的应用程序在点击时看到$type == "adult"的读者认为他去了儿童部分。

有什么安全可靠的方法来防止这样的滥用吗?众所周知的 CMS 系统尤其成问题,攻击者知道获取变量名并可以使用它来打击站点的声誉。

4

2 回答 2

1

一种方法是重命名您的密钥,以便它们在末尾有一个 [],如下所示:

http://example.org?type[]=article&category[]=children&id[]=title

这将产生一个像这样的 $_GET-Array:

Array
(
    [type] => Array
        (
            [0] => article
        )

    [category] => Array
        (
            [0] => children
        )

    [id] => Array
        (
            [0] => title
        )

)

如果有人将更多的 type[]-Entries 附加到查询字符串中http://example.org?type[]=article&category[]=children&type[]=adult,如下所示:

Array
(
    [type] => Array
        (
            [0] => article
            [1] => adult
        )

    [category] => Array
        (
            [0] => children
        )

)

所以你仍然可以获得第一个条目。


如果您不想将 附加[]到您的密钥,则必须自己解析 Query-String,您可以通过 获取$_SERVER['QUERY_STRING']

于 2013-06-07T09:57:41.967 回答
0

确定每个页面的规范 URI。请求页面时,检查 URI 是否与规范匹配。如果没有,请发出 301 重定向。(例如像这样(虽然那不是 PHP))。

于 2013-06-07T07:05:40.283 回答