Apache mod_rewrite替换REQUEST_URI中的字符

时间:2010-04-26 17:49:32

标签: apache mod-rewrite

我正在尝试编写一些替换REQUEST_URI参数中某些字符的.htaccess规则。具体来说,我想替换以下内容:

  • “<” = <
  • “>” 中= >
  • “'”= '
  • '“'= "
  • “)”= )
  • “(”= (

示例网址可以是http://www.example.com/?<script>alert(1)</script>&q=")("<script')

我尝试了很多方法但没有成功。有人能指出我正确的方向吗?感谢。

1 个答案:

答案 0 :(得分: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. 替换次数仅限于用于避免无限递归的内部重定向计数器。
  3. 虽然第二种陈述在这种情况下不适用,因为使用了N flag我不建议将mod_rewrite用于此类工作

    我宁愿建议在Web应用程序中执行此操作,可能只是在将数据输出到HTML文档之前,而不是以预防方式处理每个输入,无论数据如何处理。