gpt4 book ai didi

c# - 尝试向 URL 添加哈希以防止 URL 篡改,但包含 "+"因此现在出现 404 错误

转载 作者:行者123 更新时间:2023-11-30 22:05:50 26 4
gpt4 key购买 nike

我正在使用 MVC3、.NET4.5、C#、Razor。

我在 Codeproject 之外重用了 Albin 的一些非常有用的代码,通过添加哈希来防止 URL 篡改。主要运行良好。

然而……

我现在发现我遇到了 404 错误:

The request filtering module is configured to deny a request that contains a double escape sequence.

据我所知,这是由于在 url 中包含“+”,在我的例子中它在哈希中,即:

http://myServer/Controller/Action/Ivz7P+b2ZPmatG6kZaY_IR0az1s=?mode=xxx

生成哈希的代码是:

//Converting the salt in to a byte array
byte[] saltValueBytes = System.Text.Encoding.ASCII.GetBytes(salt);
//Encrypt the salt bytes with the password

Rfc2898DeriveBytes key = new Rfc2898DeriveBytes(password, saltValueBytes,2);
//get the key bytes from the above process

byte[] secretKey = key.GetBytes(16);
//generate the hash

HMACSHA1 tokenHash = new HMACSHA1(secretKey);

tokenHash.ComputeHash(System.Text.Encoding.ASCII.GetBytes(stringToToken));
//convert the hash to a base64string
token = Convert.ToBase64String(tokenHash.Hash).Replace("/", "_");

看来我需要一种生成没有“+”或替换“+”的散列的方法,但这会使散列无效。

最好的方法是生成没有“+”的哈希值。

想法。

编辑1

似乎如果我从路由中取出 UrlToken 并因此将它附加在 URL 的末尾,即:

http://myServer/Controller/Action?mode=xxx&urltoken=Ivz7P+b2ZPmatG6kZaY_IR0az1s=

现在可以了。不知道为什么。好吧,404 消失了,但是 URL 篡改机制现在一直失败!可能没有关系。

编辑2

我现在已经通过更改 URL 篡改代码从非路由位(即“?”之后)提取哈希来实现此目的。这一切都很好,据我所知,我没有发现任何新漏洞,因为我保留了默认的 ASP.NET 设置。

编辑3

参见:

Hex Code Convertion

最佳答案

IIS7 请求过滤器拒绝包含 + 字符的 URL。您可以通过将此添加到您的 web.config 来禁用它:

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

或者您可以通过以下方式将“+”编码为“%20”:System.Web.HttpUtility.UrlPathEncode(字符串 str)

关于c# - 尝试向 URL 添加哈希以防止 URL 篡改,但包含 "+"因此现在出现 404 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24079627/

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