在我的.htaccess
文件中,我有以下一行阻止文件注入:
RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=http:// [OR]
我想添加一个例外来接受以image=
开头并以.jpg
或.png
结尾的请求。
我想过这样做:
RewriteCond %{QUERY_STRING} ^(?!(image)$)=http:// [OR]
它不起作用
我也尝试过:
RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=http://[^.jpg|.png]
没有工作
我想要实现的是阻止查询字符串及其值除image=http://some_url.jpg(or .png)
之外的任何内容
我是否知道如何在不承担额外风险的情况下实现这一目标?
答案 0 :(得分:2)
我想要实现的是阻止查询字符串及其值除
image=http://some_url.jpg(or .png)
之外的任何内容
所以,你需要匹配它才能继续。这实际上取决于您希望匹配<some_url>
的严格程度。
尝试以下方法:
RewriteCond %{QUERY_STRING} ^image=http://[a-z0-9.-]+/[\w/.-]\.(jpg|png)$
这不允许任何&#34;特殊&#34; URL中的字符,只是常规的a-z,A-Z,0-9,斜杠,点和超广。
更新要阻止(403 Forbidden)任何包含查询字符串中的URL但不符合上述模式的请求,请尝试以下操作:
RewriteCond %{QUERY_STRING} https?://. [NC]
RewriteCond %{QUERY_STRING} !^image=http://[a-z0-9.-]+/[\w/.-]\.(jpg|png)$
RewriteRule ^ - [F]
在这个例子中,&#34;看起来像一个URL&#34;只是它包含http://
或https://
。
从
image=
开始,以.jpg
或.png
结尾。
如果你想更自由,那就试试吧:
RewriteCond %{QUERY_STRING} ^image=.+\.(jpg|png)$
RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=http:// [OR]
不太确定这个用意图,但[a-zA-Z0-9_]
只匹配一个字符。