我想创建一个重写条件来验证 QUERY_STRING 以防止 XSS。
我的项目看起来像:
/ItemPage.jsp?itemId=item_12345_12
其中 item_12345 是必需的,“_{VERSIONNUMBER} 在查询字符串中是可选的。
过去,我为许多可能很关键的 javascript 部分创建了 RewriteCond。
例子:
RewriteCond %{QUERY_STRING} base64_encode.*\(.*\) [OR]
RewriteCond %{QUERY_STRING} script [NC,OR]
RewriteCond %{QUERY_STRING} img [NC,OR]
RewriteCond %{QUERY_STRING} svg [NC,OR]
...
RewriteRule ^/ItemPage\.jsp?$ /StartPage.jsp [L,R=301]
在我发现使用许多新的可能的字符串进行过滤后,列表越来越多。现在我想重定向所有不使用此模式的请求来最小化规则。
RewriteCond %{QUERY_STRING} base64_encode.*\(.*\) [OR]
RewriteCond %{QUERY_STRING} ^((?!itemId=[\w]).)* [NC,OR]
RewriteRule ^/ItemPage\.jsp?$ /StartPage.jsp [L,R=301]
但是如果我使用这个条件,我会一直被重定向。ItemPage.jsp 不需要 ItemId,但如果在查询字符串中设置了 ItemId,则需要 ItemId=item_12345 + 可选 ItemId=item_12345_12。
该规则在 Apache2.4 中是否可以过滤 XSS 代码?