允许引用字符作为URL参数的一部分有什么风险?

时间:2010-11-02 11:58:11

标签: asp.net security request-validation

我需要允许用户按如下方式提交查询;

/search/"my search string"

但由于请求验证失败,如以下2个问题所述:

How to include quote characters as a route parameter? Getting "Illegal characters in path" message

How to modify request validation?

我目前正在尝试弄清楚如何禁用引号字符的请求验证,但是我想知道在实际将该网站置于此禁用状态之前的风险?我不会禁用请求验证,除非我只能为引号字符禁用它,所以我打算禁止当前不允许的所有其他字符。

1 个答案:

答案 0 :(得分:3)

根据URI通用语法规范(RFC 2396),双引号字符被明确排除,必须进行转义(即%22)。见2.4.3节。规范中给出的理由:

  

角括号“<”和“>”并且双引号(“)字符被排除,因为它们通常用作文本文档和协议字段中URI的分隔符。

您可以很容易地看到为什么会出现这种情况 - 想象一下尝试在HTML中创建一个链接到您的网址:

<a href="http://somesite/search/"my search string""/>

这将使HTML解析失败(并且还会破坏SO的语法突出显示)。您也可能无法使用URL进行基本操作,例如通过电子邮件将其发送给某人(电子邮件客户端无法正确解析URL),将其发布到留言板上,通过即时消息发送等等。

对于它的价值,还明确排除了空格(RFC的相同部分解释了原因)。