2

我有一个RewriteRulefor.htaccess并且我想允许 URL 中的所有字符。

我通过 PHP 过滤掉任何坏字符

我目前拥有的代码是

RewriteRule ^([a-zA-Z0-9\-]+)\.php$ file.php?key=$1 [L]

我尝试将其更改为

RewriteRule ^(.*)\.php$ file.php?key=$1 [L]

让一切都通过,但它不起作用。我不想在 .htaccess 中仅过滤 PHP 中的任何内容。即使我在 PHP 中过滤掉所有字符,是否存在安全风险?

4

2 回答 2

1

您可能想在重定向文件之前检查文件是否存在,以免陷入无限循环:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)\.php$ file.php?key=$1 [L]

第一行验证文件是否存在,如果不存在则重定向。

您已经拥有的第二行将重定向,anything.php否则file.php?key=anythingfile.php例如file.php一遍又一遍地重定向自己。

是的,只要您在使用 PHP 代码之前正确地清理信息,就可以允许 URL 上的任何内容。

于 2013-08-21T10:47:52.083 回答
0

即使我在 PHP 中过滤掉所有字符,是否存在安全风险?

是的,有看到这个问题: https ://security.stackexchange.com/questions/11234/how-does-hacking-work

这取决于您的应用程序,但 .htaccess 可以用作安全机制。

于 2013-08-21T10:42:53.987 回答