PHP阻止通过查询字符串传递的变量,但允许通过apache mod_rewrite传递相同的变量

时间:2011-09-05 07:54:41

标签: php .htaccess mod-rewrite

我正在使用.htaccess mod_rewrite转换一个不错的网址,并使用php变量page将网址部分发送到index.php,其余的处理完成。< / p>

RewriteRule ^([a-zA-Z0-9-_/]+)$ index.php?page=$1 [QSA,L]

现在,如果某个恶意用户通过查询字符串传递page变量,它就会被接受。例如,如果用户调用http://mysite.com/login?page=registration而不是加载login页面,则会加载用户指定的registration页面。

知道如何在htaccess文件中修复它吗?

2 个答案:

答案 0 :(得分:4)

我自己也在寻找相同的答案,我很确定没有解决方法。我提出的唯一解决方案是将page替换为一些任意“密钥”,例如98198bs129387b13。因此,他们必须知道关键。但不要搞错,这是通过默默无闻的安全......并且在index.php中进行适当的检查仍然是必要的(而且无论如何)。

答案 1 :(得分:0)

  

如果用户调用http://mysite.com/login?page=registration而不是加载登录页面,则会加载用户指定的注册页面。

你无法使用mod_rewrite解决这个问题 - 毕竟,什么阻止攻击者进入

domain.com/registration

代替?

您需要确保未经授权的用户永远不会访问他们不应访问的网页。