Apache-2.4
在 RewriteCond 上驗證 QUERY_STRING 以獲得 XSS 保護
我想創建一個重寫條件來驗證 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 程式碼?
我想你想要的是:
RewriteCond %{QUERY_STRING} !^(ItemId=[[:alpha:]]+_\d+(_\d+)?)?$ [NC] RewriteRule ^/ItemPage\.jsp$ /StartPage.jsp [L,R=301]
請注意,不要
?
在 RewriteRule 的條件中包含 a ,就像您在問題中所做的那樣。?
這與請求中的文字不匹配。相反,它使“p”成為/ItemPage.jsp
可選的,因此您也可以匹配/ItemPage.js
.