2010-04-26 67 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文档之前,而不是以预防性方式输入每个输入,无论数据如何处理。