asp.netWebForm(.netFramework) CSRF漏洞

asp.netWebForm(.netFramework) CSRF漏洞

CSRF(Cross-Site Request Forgery)跨站请求伪造是一种常见的 Web 应用程序安全漏

洞,攻击者通过诱使已认证用户在受信任的网站上执行恶意操作,从而利用用户的身份

执行未经授权的操作。攻击者通常会在第三方网站上植入恶意代码或链接,当用户访问

这些网站时,恶意请求会被发送到目标网站,利用用户的身份执行操作,如更改密码、

转账等。CSRF 漏洞可能导致以下安全问题:未经授权的操作:攻击者可以利用 CSRF 漏

洞执行未经授权的操作,如更改用户密码、删除账户等。数据篡改:攻击者可以通过

CSRF 漏洞修改用户数据,如更改个人信息、发表恶意内容等。跨站脚本执行:攻击者

可以通过 CSRF 漏洞执行跨站脚本(XSS)攻击,从而获取用户的敏感信息。

解决方案:

1、使用 CSRF 令牌:在每个请求中包含 CSRF 令牌,确保请求是合法的,防止攻击者伪

造请求。

需要安装Microsoft.AspNet.WebPages

c 复制代码
       // 页面
       <input type="hidden" id="hiddenFieldToken" runat="server" />
       //页面加载事件
        protected void Page_Load(object sender, EventArgs e)
        {

            // 生成 CSRF Token
            string cookieToken, formToken;
            System.Web.Helpers.AntiForgery.GetTokens(null, out cookieToken, out formToken);
            hiddenFieldToken.Value = cookieToken + ":" + formToken;
        }
        //按钮提交
        protected void Btn_Click(object o, EventArgs e)
        {
            // 拆分存储的 Token
            string[] tokens = hiddenFieldToken.Value.Split(':');
            if (tokens.Length == 2)
            {
                try
                {
                    // 验证 CSRF Token
                    System.Web.Helpers.AntiForgery.Validate(tokens[0], tokens[1]);
                }
                catch (HttpAntiForgeryException)
                {
                    // Token 验证失败
                    Response.Write("验证失败,可能是 CSRF 攻击!");
                    return;
                }
            }
        }

2、同源策略:确保网站遵循同源策略,限制第三方网站对用户数据的访问。

方法1:在每个页面的 Page_Load 方法中添加如下代码:

c 复制代码
protected void Page_Load(object sender, EventArgs e)
{
    // 设置 Content-Security-Policy
    Response.Headers.Add("Content-Security-Policy", "default-src 'self';");
    // 设置 X-Frame-Options
    Response.Headers.Add("X-Frame-Options", "SAMEORIGIN");
}

方法 2: 使用 HTTP 模块

创建一个自定义 HTTP 模块是一种集中管理 HTTP 响应头的有效方法。这样可以在不修改每个页面的情况下,集中控制整个应用程序的 HTTP 头部设置。

c 复制代码
using System;
using System.Web;

public class SecurityHeadersModule : IHttpModule
{
    public void Init(HttpApplication context)
    {
        context.BeginRequest += new EventHandler(OnBeginRequest);
    }

    private void OnBeginRequest(object sender, EventArgs e)
    {
        HttpContext context = ((HttpApplication)sender).Context;
        // 设置 Content-Security-Policy
        context.Response.Headers.Add("Content-Security-Policy", "default-src 'self';");
        // 设置 X-Frame-Options
        context.Response.Headers.Add("X-Frame-Options", "SAMEORIGIN");
    }

    public void Dispose()
    {
        // 清理代码或释放资源
    }
}

配置文件注册HttpModule

c 复制代码
<configuration>
    <system.webServer>
        <modules>
            <add name="SecurityHeadersModule" type="YourNamespace.SecurityHeadersModule" />
        </modules>
    </system.webServer>
</configuration>

3、验证 HTTP Referer 头部:验证请求的来源,确保请求来自合法的网站。

c 复制代码
protected void Page_Load(object sender, EventArgs e)
{
    if (IsPostBack)
    {
        Uri referrerUri = Request.UrlReferrer;
        if (referrerUri == null || !(referrerUri.Host.EndsWith("example.com") && referrerUri.Port == 8080))
        {
            Response.Write("非法请求来源!");
            Response.End();
        }
    }
}
相关推荐
开开心心_Every9 天前
音频格式互转工具,支持Mp3ApeWavFlac互转
linux·运维·服务器·typescript·edge·pdf·asp.net
bugcome_com12 天前
【C# 数组详解】Array 定义、初始化、遍历、内存原理与面试高频问题
后端·c#·asp.net
铁甲前沿18 天前
一个月玩转MQTT(篇五:开发自己的MQTT WEB页面)
前端·mqtt·asp.net·mqtt web开发
weixin_4219947820 天前
依赖注入与中间件 - ASP.NET Core 核心概念
后端·中间件·asp.net
鱼是一只鱼啊21 天前
ASP.NET Core 集成腾讯云 COS 实现文件上传下载完整指南
云计算·asp.net·腾讯云·文件上传·cos
无风听海25 天前
.NET10之ASP.NET Core的Filter管线
java·asp.net·.net
William_cl25 天前
ASP.NET路由长度约束精讲:[HttpGet (“{name:minlength (3)}“)] 字符长度限制吃透,附避坑指南 + 实战代码
后端·asp.net
奥特曼打小白1 个月前
Microsoft SQL Server2025的下载、安装与配置——从环境、管理工具、配置管理器入手,解决VS2022ASP.NET网站项目中SqlDataSource控件找不到服务器的问题
sqlserver·asp.net
William_cl1 个月前
ASP.NET路由类型约束核心精讲:[HttpGet (“{id:int}“)] 整数约束吃透,附避坑指南 + 实战代码
后端·asp.net
步步为营DotNet1 个月前
深入理解ASP.NET Core Middleware:管道执行机制与高效应用
后端·asp.net