本文节选自《.NET 安全攻防指南》, 感兴趣的朋友可以点击下方链接就能下单,把硬核.NET 安全知识带回家!
CSRF 漏洞的核心机制是:攻击者诱导已登录目标网站的用户访问恶意页面,利用用户浏览器中保存的身份凭证,比如 Cookie,以用户名义向目标网站发送伪造请求,从而执行未授权操作。其链条可概括为:
1. 用户登录可信网站 A 并保持会话
2. 攻击者诱导用户访问恶意网站 B
3. 恶意网站 B 向网站 A 发起请求,浏览器自动携带用户的 Cookie
4. 网站 A 验证 Cookie 通过,误认为是用户主动操作,执行请求
以 .NET MVC 中的用户添加功能为例,存在 CSRF 漏洞的代码往往缺乏请求来源验证机制。
public ActionResult AddUsers(string username, string info)
{
if (!string.IsNullOrEmpty(username) && !string.IsNullOrEmpty(info))
{
// 直接执行添加用户操作,未验证请求合法性
string querySQL = "insert into Users(name, info) values(@username, @info)";
SqlHelper.ExecuteDataTable(querySQL,
new SqlParameter("@username", username),
new SqlParameter("@info", info));
return RedirectToAction("AddSuccess");
}
else
{
return View();
}
}
AddUsers接口发送请求,服务器验证 Cookie 通过后,将在用户不知情的情况下添加用户。
ValidateAntiForgeryToken机制防御 CSRF 攻击,其核心原理是通过令牌验证确保请求来源的合法性。
[ValidateAntiForgeryToken]特性,并指定 HTTP 方法为 POST,因为,GET 请求不适合处理敏感操作:
[HttpPost] // 限定为POST请求,避免GET参数泄露
[ValidateAntiForgeryToken] // 启用令牌验证
public ActionResult AddUsers2(string username, string info)
{
if (!string.IsNullOrEmpty(username) && !string.IsNullOrEmpty(info))
{
string querySQL = "insert into Users(name, info) values(@username, @info)";
SqlHelper.ExecuteDataTable(querySQL,
new SqlParameter("@username", username),
new SqlParameter("@info", info));
return RedirectToAction("AddSuccess");
}
else
{
return View();
}
}
Html.AntiForgeryToken()方法生成令牌,该方法会自动创建一个名为__RequestVerificationToken的隐藏字段:
<h2>安全的用户添加功能</h2>
<body>
@using (Html.BeginForm("AddUsers2", "CSRF", FormMethod.Post))
{
@Html.AntiForgeryToken() // 生成防伪令牌
<input type="text" name="Username" placeholder="用户名" />
<input type="text" name="info" placeholder="用户信息" />
<input type="submit" value="提交" />
}
</body>
<input name="__RequestVerificationToken" type="hidden" value="随机令牌值" />
综上,CSRF 攻击利用用户的身份凭证执行未授权操作,在.NET 环境中尤其需要警惕。.NET MVC 提供的ValidateAntiForgeryToken机制通过令牌验证有效解决了这一问题,只需在服务器端添加特性并在前端生成令牌,即可大幅提升应用安全性。
在实际开发中,应始终遵循 最小权限原则,对敏感操作采用 POST 方法,并结合多种防御措施,构建多层次的安全防护体系,有效抵御 CSRF 及其他 Web 安全威胁。
免责声明:此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。任何未经授权的网络渗透、入侵或对他人网络破坏的活动而造成的直接或间接后果和损失,均由使用者为自身的行为负责并承担全部的法律和连带责任,与本号及作者无关,请务必遵循相关法律法规。本文所提供的工具仅用于学习和本地安全研究和测试,禁止用于其他方面。
以上相关的知识点已收录于新书《.NET安全攻防指南》,全书共计25章,总计1010页,分为上下册,横跨.NET Web代码审计与红队渗透两大领域。
上册深入剖析.NET Web安全审计的核心技术,帮助读者掌握漏洞发现与修复的精髓;下册则聚焦于.NET逆向工程与攻防对抗的实战技巧,揭秘最新的对抗策略与技术方法。

