Apache-2.4

在 RewriteCond 上驗證 QUERY_STRING 以獲得 XSS 保護

  • October 31, 2020

我想創建一個重寫條件來驗證 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.

引用自:https://serverfault.com/questions/1040528