我在使用 IIS 7 在 URL Rewrite 2.0 中设置规则时遇到了一些问题。我正在开发一个结合了更现代的 .NET 4.0 内容和经典 .ASP 内容的网站。我当前的任务是尝试从用户输入中去除一些特定字符,以帮助防止 XSS 攻击。
我得到了基本语法:
<rule name="Rule Name" stopProcessing="true">
<match url="myPage.asp" />
<conditions>
<add input="" pattern="" />
</conditions>
<action type="" />
</rule>
我知道我需要三个步骤,1) 确保我们正在查看的是帖子 2) 使用正则表达式识别许多坏字符中的任何一个 3) 继续发布帖子,去掉这些字符。
我认为第一个可以通过以下方式解决:
<add input="{REQUEST_METHOD}" matchType="Pattern" pattern="POST" ignoreCase="true" />
令我沮丧的是第二个和第三个问题。
第二个也是一个输入,但我一直在努力寻找最好的 {} 变量来放入输入。现在我有这个:
<add input="{REQUEST_URI}" pattern="[\\\|<>]" />
但我知道 {REQUEST_URI} 不是去那里的正确变量。我一直在 URL 重写站点 (http://www.iis.net/download/urlrewrite),我找到了 IIS 6.0 服务器变量列表 (http://msdn.microsoft.com/en- us/library/ms524602(v=vs.90).aspx),但我似乎无法找到 7.0 及更高版本中可用的变量及其含义的良好列表。这是任何人在某处添加书签并可以传递的东西吗?
第三个也是给我的问题。现在,我已经<action type="AbortRequest" />
设置了其他一些规则,但为此,我不想停止请求,我只想删除坏字符并继续 POST。IIS 中的自定义规则设置看起来很有希望,但它似乎只是想重定向到一个 URL,而不是做任何其他事情。这甚至是可能的吗?
我还应该注意,我正在研究 IIS 托管模块作为获得我正在寻找的东西的替代方案。这听起来对任何人来说都是更好的途径吗?