gpt4 book ai didi

c# - 通过依赖注入(inject)创建 AntiForgeryToken

转载 作者:太空狗 更新时间:2023-10-29 21:48:00 24 4
gpt4 key购买 nike

我正在努力提高我公司网站的安全性,并希望创建一个 token 来防止可以轻松维护的伪造尝试,这就是我想出的办法。

public class AntiForgeryToken
{
private readonly string _referenceToken;

public AntiForgeryToken()
{
_referenceToken = Guid.NewGuid().ToString();
}
public string ReferenceToken
{
get { return _referenceToken; }
}
}

在我的 MasterPage 的基类中,我有一个 HiddenField 包裹着名为:ReferenceToken

protected virtual void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
InjectToken();
}

ValidateToken();
}

private void InjectToken()
{
var token = ObjectFactory.GetInstance<AntiForgeryToken>();
ReferenceToken = token.ReferenceToken;
}

private void ValidateToken()
{
var token = ObjectFactory.GetInstance<AntiForgeryToken>();
if (ReferenceToken.Equals(token.ReferenceToken, SC.InvariantCultureIgnoreCase))
return;
...do stuff for failed token
}

我有 StructureMap 句柄将 token 存储在 session 中,因此它会在每个用户 session 中保留,所有这些都是防伪方案的有效实现吗?

编辑: 我的问题似乎有些困惑,是的,我知道 ASP.NET MVC 有一个内置的 AntiForgeryToken 方案,这个问题明确是关于如何为 WebForms 重新创建它 以防止使用 CSRF 攻击(跨站请求伪造)。我理解这绝不会消除对用户权限进行适当授权的需要。

我正要调出@Neal 和@solairaja 发布的链接:Prevent Cross-Site Request Forgery (CSRF) using ASP.NET MVC’s AntiForgeryToken() helper .本文更多地解释了 CSRF 攻击是什么以及 MVC 如何阻止它,但是他们的解决方案不适用于网络表单,这就是我开始实现自己的解决方案的原因。

在看到@Neal 的回复后,我认为这很可能是公认的答案,因为我没有意识到我可以从 MVC 工具中获取实际源代码,这很可能会取代 guid 创建。但我会留下这个问题,以防其他人有一些有值(value)的信息要补充。

最佳答案

克里斯,

您的方法或多或少模仿了 MVC 中的防伪方法,除了它们使用从 RNGCryptoServiceProvider 生成的 base64 编码字节数组并将 token 存储在页面(隐藏表单字段)和 cookie 中。我建议将更多逻辑移至 token 实现中(例如,将大部分验证逻辑封装在 token 中)。

MVC 实现的代码可在 http://aspnet.codeplex.com/sourcecontrol/changeset/view/23011?projectName=aspnet#391757 免费访问。如果可能的话,你应该回顾一下http://blog.codeville.net/2008/09/01/prevent-cross-site-request-forgery-csrf-using-aspnet-mvcs-antiforgerytoken-helper/进行分析+想法。

关于c# - 通过依赖注入(inject)创建 AntiForgeryToken,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1702324/

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