2010-04-26 64 views
1

我試圖編寫一些.htaccess規則來替換REQUEST_URI參數中的某些字符。具體而言,我想替換以下:Apache mod_rewrite替換REQUEST_URI中的字符

  • 「<」= &lt;
  • 「>」= &gt;
  • 「」「= &apos;
  • '」'= &#x22;
  • 「)」 = &#x29;
  • 「(」=「&#x28;

示例URL可能爲http://www.example.com/?<script>alert(1)</script>&q=")("<script')

我試過了一大堆方法沒有成功。有人能指引我朝着正確的方向嗎?謝謝。

+0

這應該由您的應用程序完成,而不是由Web服務器完成。你用什麼語言? – Gumbo 2010-04-29 09:08:02

回答

1

您可以使用mod_rewrite做到這一點的更換,請這個例子<

RewriteCond %{QUERY_STRING} ^([^<]*)<([^<]*)<(.*) 
RewriteRule^%{REQUEST_URI}?%1&lt;%2&lt; [N] 
RewriteCond %{QUERY_STRING} ^([^<]*)<([^<]*)$ 
RewriteRule^%{REQUEST_URI}?%1&lt;%2 [L] 

的第一條規則將同時替代兩個<人物和第二將結束遞歸。其他字符可以用相同的方式替換(只需將<&lt;替換爲其他對)。

但使用mod_rewrite對於這樣的工作,因爲

  1. 的mod_rewrite允許一次僅更換固定出現的次數和
  2. 更換的次數僅限於內部重定向計數器是不是適合用於避免無限遞歸。

雖然第二個語句沒有在這種情況下,由於N flag的使用申請,我不會推薦的mod_rewrite的使用這種工作的。

我寧願建議在Web應用程序中這樣做,可能就在將數據輸出到HTML文檔之前,而不是以預防性方式輸入每個輸入,無論數據如何處理。