gpt4 book ai didi

c# - ASP MVC Url 编码双转义序列

转载 作者:太空狗 更新时间:2023-10-29 19:46:26 25 4
gpt4 key购买 nike

我想加密给定 url 的 Id 部分,我使用了 SHA-1为了那个原因。该算法将 id 转换为以下字符串:

NxVhIhrfbZNzyxqtudUZdiv4DdQA9nF1Zn7CueGUiT8=|h1bCRiN5zxexiIhHp+qNEQ0jVh/8fMGiIkeTf30LVdU=

因此,我的最终网址应该是这样的:

http://localhost:9432/Product/Edit/NxVhIhrfbZNzyxqtudUZdiv4DdQA9nF1Zn7CueGUiT8=|h1bCRiN5zxexiIhHp+qNEQ0jVh/8fMGiIkeTf30LVdU=

此 url 包含某些导致请求失败的字符。例如,url 中不允许使用“+”。所以我用了 HttpUtility.UrlEncode()在加密的 Id 上得到这个字符串作为结果:

NxVhIhrfbZNzyxqtudUZdiv4DdQA9nF1Zn7CueGUiT8%3d%7ch1bCRiN5zxexiIhHp%2bqNEQ0jVh%2f8fMGiIkeTf30LVdU%3d

现在我的网址是:

http://localhost:9432/Product/Edit/NxVhIhrfbZNzyxqtudUZdiv4DdQA9nF1Zn7CueGUiT8%3d%7ch1bCRiN5zxexiIhHp%2bqNEQ0jVh%2f8fMGiIkeTf30LVdU%3d

但是使用上面的 url 会导致以下错误:

The request contained a double escape sequence and request filtering is configured on the Web server to deny double escape sequences.

我可以通过在 web.config 中插入以下代码来忽略它:

<system.webServer>
<security>
<requestFiltering allowDoubleEscaping="true" />
</security>
</system.webServer>

现在我有两个问题:

  1. 为什么 HttpUtility.UrlEncode() 的结果导致任何类型的错误。正如我所注意到的,结果不包含任何非法的 url 字符?

  2. 据我了解,将 <requestFiltering allowDoubleEscaping="true" />这不是一个好的解决方案,因为它会在应用程序中造成安全漏洞,那么在这种情况下最好的解决方案是什么?

最佳答案

HttpUtility.UrlEncode() 的结果不包含错误,它只是对 + 符号进行编码,将在 IIS 级别上检测到。默认情况下,IIS 拒绝 URL 中的“+”。您的解决方法将起作用:

<requestFiltering allowDoubleEscaping="true" />

但正如您所说,它会产生一些安全问题,因为这会使您的网站更容易受到恶意 URL 的攻击。<​​/p>

我的建议是,要么使用另一种不会生成这些“IIS”敏感字符的加密算法,要么如果您想使用上述解决方法,则需要实现正确的 URL/用户输入验证以确保您捕获并阻止所有可疑条目。

关于c# - ASP MVC Url 编码双转义序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45540836/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com