Php 如何使GET参数不容易重写?

Php 如何使GET参数不容易重写?,php,Php,假设我有一个地址。现在,mod_rewrite将其转换为 现在,大多数用户只阅读第一部分,忽略了问号后面的内容。这样做应该是安全的。但如果有人使用我的应用程序链接到我,当点击reader时看到$type==“成人”,他相信自己去了儿童区 有没有安全可靠的方法来防止这样的虐待?众所周知的CMS系统尤其存在问题,在这些系统中,攻击者知道获取变量名并可以使用它来攻击站点的声誉。确定每个页面的规范URI。请求页面时,检查URI是否与规范URI匹配。如果没有,则发出301重定向。(例如,(虽然这不是PHP

假设我有一个地址。现在,mod_rewrite将其转换为

现在,大多数用户只阅读第一部分,忽略了问号后面的内容。这样做应该是安全的。但如果有人使用我的应用程序链接到我,当点击reader时看到
$type==“成人”
,他相信自己去了儿童区


有没有安全可靠的方法来防止这样的虐待?众所周知的CMS系统尤其存在问题,在这些系统中,攻击者知道获取变量名并可以使用它来攻击站点的声誉。

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

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

http://example.org?type[]=文章和类别[]=儿童和id[]=标题

这将产生如下的$\u GET-Array:

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

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

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

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

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

)
如果有人向查询字符串追加更多的type[]-条目,如
http://example.org?type[]=文章和类别[]=儿童和类型[]=成人
,它将如下所示:

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

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

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

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

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

)
所以你仍然可以得到第一个条目



如果您不想将
[]
附加到您的密钥中,您必须解析查询字符串,您可以通过
$\u服务器['Query\u String']
自己获取该字符串。

实际上,这会将读者导向成人部分,对吗?我只想给他他想要的(在这个例子中是分类儿童)并放弃所有其他的。你可以使用任何规则来做出决定,所以它不一定会重定向到成人部分。所以你想把你的访问者发送到儿童部分,只有当他们的查询字符串中有type=maintal,并且用户可以清楚地看到该查询字符串部分时,才应该将它们发送到成人部分?@Geier我希望解释URL中的第一个变量,而不是最后一个变量,因为这通常是用户认为要解释的。例如,只向用户显示他认为自己清楚看到的类别,是的,但这只是一个示例。