我有这些自定义.htaccess重定向
# Add a trailing slash to folders that don't have one
RewriteCond %{REQUEST_URI} !(/$|\.)
RewriteRule (.*) %{REQUEST_URI}/ [R=301,L]
# Exclude these folders from rewrite process
RewriteRule ^(admin|ajax|cache|classes|css|img|webassist|js)($|/) - [L]
# Redirect root requests to /home/ folder
RewriteRule ^(/home/)?$ /home/index.php?nLang=it [NC,L]
# Start rewriting rules
RewriteRule ^risultati.htm$ /home/results.php [NC,L,QSA]
RewriteRule ^sfogliabile/(.*).htm$ /flip/browser.php?iCat=$1 [NC,L]
RewriteRule ^depliant/(.*).htm$ /flip/flyer.php?iSpecial=$1 [NC,L]
RewriteRule ^(.*)/ricerca/$ /ricerca/index.php?nLang=$1 [NC,L,QSA]
RewriteRule ^(.*)/professional/$ /home/pro.php?nLang=$1 [NC,L]
RewriteRule ^(.*)/3/(.*)/$ /products/index.php?nLang=$1&iModule=3 [NC,L]
RewriteRule ^(.*)/3/(.*)/(.*)/(.*).htm$ /products/details.php?nLang=$1&iData=$3&iModule=3 [NC,L]
RewriteRule ^(.*)/4/(.*)/$ /foreground/index.php?nLang=$1&iModule=4 [NC,L]
RewriteRule ^(.*)/4/(.*)/(.*)/(.*).htm$ /foreground/details.php?nLang=$1&iData=$3&iModule=4 [NC,L]
RewriteRule ^(.*)/5/(.*)/$ /specials/index.php?nLang=$1&iModule=5 [NC,L]
RewriteRule ^(.*)/5/(.*)/(.*)/(.*).htm$ /specials/details.php?nLang=$1&iData=$3&iModule=5 [NC,L]
RewriteRule ^(.*)/6/(.*)/$ /gallery/index.php?nLang=$1&iModule=6 [NC,L]
RewriteRule ^(.*)/6/(.*)/(.*)/(.*).htm$ /gallery/details.php?nLang=$1&iData=$3&iModule=6 [NC,L]
RewriteRule ^(.*)/(.*)/(.*)/(.*).htm$ /home/page.php?nLang=$1&iData=$3 [NC,L,QSA]
RewriteRule ^(.*)/$ /home/index.php?nLang=$1 [NC,L]
除非我输入一些不存在的路径,例如:
,否则它对所有页面都很有效/it/dummy/
/it/dummy/dummy/
/it/dummy/dummy/dummy/
etc...
而不是404错误页面,我得到一个页面,公开PHP警告和关于缺少变量和包含文件的通知,这可能导致安全问题和恶意攻击
我尝试了几个方法来获得一个可以使用这些路径的RegExp(所以我可以将用户重定向到404页面),但没有运气:拜托,拜托,你能帮助我吗?提前致谢
答案 0 :(得分:1)
将您的上一条规则更改为此
# If the request is not for a valid directory
RewriteCond %{REQUEST_FILENAME} !-d
# If the request is not for a valid file
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([a-z]+)/$ home/index.php?nLang=$1 [L,QSA,NC]
这样它只会处理语言参数,例如/it/
或/en/
,但会允许其他网址,例如/it/dummy/
转到404处理程序。
答案 1 :(得分:0)
至少你的最后一条规则
RewriteRule ^(.*)/$ /home/index.php?nLang=$1
将所有请求发送到/home/index.php
,我想这个脚本是您收到警告的来源。
由于您拥有这样的规则,大概您可能希望不存在的文件转到此脚本。因为Apache无法知道哪些网址可以使用而哪些网址不起作用,因此无法阻止调用脚本。
因此,您需要检查缺少的参数或在PHP脚本中包含文件。这是特别合理的,因为您永远不知道攻击者可能会调用哪些参数,正如您已经提到的那样。一般的经验法则是在使用之前检查所有参数的有效性。
添加所有这些检查后,最好关闭错误显示(有一个php.ini条目,display_errors
),但只记录文件中的错误(另一个条目,{{1在生产系统中。