问题描述
我向我的 .net 核心 Web API 发送请求时遇到问题。
该请求包含一个路径变量,带有波浪号 ('~') 后跟一个数字。例如:
GET 'https://example.com/v1/Books/details/~0~~9600131~BookTitle'
您要查找的资源已被删除、更名或暂时不可用。
奇怪的是,这个请求在我们的测试环境中有效。此环境与我们的生产环境几乎相同。
是否有任何我可以检查的 IIS 设置可以解释这些差异?
编辑:问题似乎与 ~{Numeric Character} 有关。
~2 不起作用但是
~~ 或 ~g 有效
IIS 8.5
解决方法
不安全:
由于多种原因,字符可能不安全。空间
字符是不安全的,因为重要的空格可能会消失并且
转录网址时可能会引入无关紧要的空格或
排版或经受文字处理程序的处理。
字符“”是不安全的,因为它们被用作
自由文本中 URL 周围的分隔符;引号 (""") 用于
在某些系统中分隔 URL。字符“#”是不安全的,应该
总是被编码,因为它用于万维网和其他
将 URL 与片段/锚标识符分隔开的系统
跟着它。字符“%”是不安全的,因为它用于
其他字符的编码。其他字符是不安全的,因为
网关和其他传输代理有时会修改
这样的字符。这些字符是“{”、“}”、“|”、“”、“^”、“~”、
“[”、“]”和“`”。
所有不安全的字符都必须始终在 URL 中进行编码。对于
例如,字符“#”必须在 URL 中编码,即使在
通常不处理片段或锚点的系统
标识符,以便如果 URL 被复制到另一个系统中
使用它们,不需要更改 URL 编码。
因为波浪号 ('~') 不安全,IIS 在核心级别主动阻止这种行为。这是一种主动安全措施,可以最大限度地减少攻击面。
您可以参考此 link 以了解有关引用段落的更多信息。