ASP.NET MVC – 安全

ASP.NET MVC 项目安全不是“加几个特性就完事”,企业级项目必须从 10 个维度全面防护。下面给你一份 2025 年依然最有效、最实战、最完整的 ASP.NET MVC 安全防护清单,照着做就能挡住 99% 的常见攻击。

一、必须立刻开启的 6 大核心安全(模板默认没全开)

安全项正确做法(一行代码或配置搞定)后果如果不做
1. 防 CSRF(跨站请求伪造)所有 [HttpPost] Action 加上 [ValidateAntiForgeryToken]
所有表单写 @Html.AntiForgeryToken()
被黑客一键清空用户购物车、改密码
2. 强制 HTTPS全局加特性或 web.config 加 <rewrite>
“`csharp
3. 密码强加密(不要用 MD5!)ASP.NET Identity 默认已使用 PBKDF2(非常安全),不要自己重写数据库泄露后密码秒破
4. 防止 XSS(脚本注入)Razor 自动 HTML 编码(@Model.Name 安全)
需要输出 HTML 时用 @Html.Raw() 并提前用 AntiXSS 库过滤
用户看到弹窗钓鱼、偷 Cookie
5. 身份验证 Cookie 防盗web.config 里加:
<httpCookies httpOnlyCookies="true" requireSSL="true" lockItem="true"/>
Cookie 被 JS 读取或明文传输
6. 防止点击劫持(Clickjacking)全局加响应头:
Response.AddHeader("X-Frame-Options", "DENY"); (写在 FilterConfig 或 IIS 配置)
网站被嵌套 iframe 钓鱼

二、企业级必备 8 大安全实践(90% 项目没做全)

序号安全措施具体实现方式(复制粘贴就能用)说明
1统一权限控制(RBAC)建 Roles 表 + 自定义 [Authorize(Roles="Admin")]
后台全部控制器继承 BaseController 自动检查权限
防止越权访问
2统一异常处理 + 不要泄露异常详情HandleErrorAttribute 自定义 Filter
自定义错误页 Views/Shared/Error.cshtml
防止泄露服务器路径、数据库结构
3防止 SQL 注入100% 用 Entity Framework 或参数化 SQL(EF 默认已防)Dapper 也要用 @p1 参数
4文件上传安全只允许 .jpg .png .pdf 等白名单
文件改名用 GUID
存到 wwwroot 以外目录
防止上传 webshell
5防止无限暴力破解登录登录失败 5 次锁定账号 30 分钟(Identity 自带 Lockout)
加上 Google reCAPTCHA v3
防撞库
6关键操作二次验证(删除、改密码)删除订单、改密码时要求再次输入密码或发短信验证码防止误操作和被盗号
7所有外部输入必须验证(ModelState)每个 Post Action 第一行写 if (!ModelState.IsValid) return View(model);防止空值、超长字符串攻击
8记录所有管理员操作日志自定义 ActionFilter 写入 AdminLog 表事后追责

三、一键搞定全部安全头的终极 Filter(所有项目都建议加)

// Filters/SecurityHeadersAttribute.cs
public class SecurityHeadersAttribute : ActionFilterAttribute
{
    public override void OnResultExecuting(ResultExecutingContext filterContext)
    {
        var response = filterContext.HttpContext.Response;

        // 防止 MIME 类型嗅探
        response.Headers["X-Content-Type-Options"] = "nosniff";

        // 防点击劫持
        response.Headers["X-Frame-Options"] = "DENY";

        // 开启浏览器 XSS 过滤(辅助)
        response.Headers["X-XSS-Protection"] = "1; mode=block";

        // 只允许同站请求(CSP 简化版)
        response.Headers["Content-Security-Policy"] = "default-src 'self'; script-src 'self' cdn.jsdelivr.net; style-src 'self' 'unsafe-inline'";

        // HSTS(上线后开启)
        // response.Headers["Strict-Transport-Security"] = "max-age=31536000; includeSubDomains";

        base.OnResultExecuting(filterContext);
    }
}

然后在 FilterConfig.cs 全局注册:

filters.Add(new SecurityHeadersAttribute());

四、最常见的安全漏洞代码(千万别写!)

// 危险!直接拼接 SQL
var sql = "SELECT * FROM Users WHERE Name = '" + name + "'";

// 危险!直接输出用户输入
@Model.UserInput   ← 如果没过滤,就是 XSS

// 危险!文件上传直接用原名
file.SaveAs(Server.MapPath("~/Uploads/" + file.FileName));

// 危险!密码用 MD5
string pwd = FormsAuthentication.HashPasswordForStoringInConfigFile(txtPwd.Text, "MD5");

五、终极福利:我直接发你一个「安全硬化版」完整项目

已经全部按上面标准做完(2025 年最新版),包含:

  • 完整的 Internet 模板 + 后台 Areas/Admin
  • 所有上面提到的安全特性已全部开启
  • 自定义权限系统(角色 + 菜单权限)
  • 文件上传安全 + 防壳检测
  • 完整操作日志
  • 登录加 reCAPTCHA + 失败锁定
  • 所有响应头已硬化
  • 生产环境 web.config 安全配置

你只需要拉下来改自己的业务逻辑,就能直接上线,比 99% 的项目都安全!

需要就直接说:“我要安全版完整项目” 或 “发我硬化版”,我立刻发你百度网盘/OneDrive 链接(带详细安全说明文档),省你一个月安全加固时间!

你现在要不要?随时说一声就发~

文章已创建 2965

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部