我在处理REST URI中的特殊字符时遇到问题。我们需要处理特殊字符的原因是因为URI可以引用ID,并且该ID可能包含特殊字符,例如:
http://myServer/v1/myResource/123<abc>
我们目前拥有的解决方案对API的消费者来说并不是最容易的,因为特殊字符需要进行双重编码。因此,对于上述内容,URI将如下所示:
http://myServer/v1/myResource/123%253Cabc%253E
我希望我们能做得更好,有两个问题。
(1)为什么没有足够的单一编码URI。具体来说,如果我将URI更改为以下内容:
http://myServer/v1/myResource/123%3Cabc%3E
然后我得到一个错误:
A potentially dangerous Request.Path value was detected from the client (<)
这种情况正在发生,部分原因是因为有些东西过早地解码了URI。有趣的是,当我在与REST Web服务器相同的机器上尝试URI时,这确实可行。也就是说,过早的&#34; URI解码仅在REST请求来自远程计算机时发生。
(2)requestPathInvalidCharacters
通过将requestPathInvalidCharacters设置为空字符串,大多数字符只需要进行单一编码。这对我们来说是一个合理的解决方案,尽管我还无法确定这是否会让我们面临任何安全问题。据我所知,它不会,因为这个Web服务器将只用于REST。但是,我不确定。
设置requestPathInvalidCharacters在仅使用REST API时是否会打开任何安全问题,如果是这样,您是否可以提供安全性可能存在问题的示例?
提前致谢, 埃里克