当前位置: 首页 > news >正文

解决asp.net mvc发布到iis下安全问题

解决asp.net mvc发布到iis下安全问题

  • 环境信息
    • 1.The web/application server is leaking version information via the "Server" HTTP response
    • 2.确保您的Web服务器、应用程序服务器、负载均衡器等已配置为强制执行Strict-Transport-Security。
    • 3.在HTML提交表单中找不到反CSRF令牌。跨站点请求伪造是一种攻击,涉及迫使受害者在不知情或无意的情况下向目标目标发送HTTP请求,以便作为受害者执行操作。根本原因是应用程序功能以可重复的方式使用可预测的URL/表单操作。攻击的本质是CSRF利用了网站对用户的信任。相比之下,跨站脚本(XSS)利用了用户对网站的信任。与XSS一样,CSRF攻击不一定是跨站点的,但也可能是。跨站点请求伪造也称为CSRF、XSRF、一键攻击、会话骑行、混淆代理和海浪。CSRF攻击在许多情况下都是有效的,包括:*受害者在目标站点上有一个活动会话。*受害者在目标站点上通过HTTP身份验证进行身份验证。*受害者与目标站点位于同一本地网络上。CSRF主要用于使用受害者的权限对目标站点执行操作,但最近发现了通过访问响应来披露信息的技术。当目标站点易受XSS攻击时,信息泄露的风险会急剧增加,因为XSS可以用作CSRF的平台,允许攻击在同源策略的范围内进行。
    • 4.响应包含“仅内容安全策略报告”标头,这可能表示正在进行的实施工作,或在促进预生产到生产过程中的监督等。内容安全策略(CSP)是一个附加的安全层,有助于检测和缓解某些类型的攻击,包括跨站脚本(XSS)和数据注入攻击。这些攻击用于从数据盗窃到网站污损或分发恶意软件。CSP提供了一组标准HTTP标头,允许网站所有者声明允许浏览器在该页面上加载的已批准内容来源--涵盖的类型包括JavaScript、CSS、HTML框架、字体、图像和可嵌入对象
    • 5.The response does not include either Content-Security-Policy with 'frame-ancestors' directive or X-Frame-Options to protect against 'ClickJacking' attacks.
    • 6.反MIME嗅探标头X-Content-Type-Options未设置为“nosniff”。这允许旧版本的Internet Explorer和Chrome对响应正文执行MIME嗅探,从而可能导致响应正文被解释并显示为声明的内容类型以外的内容类型。当前(2014年初)和旧版本的Firefox将使用声明的内容类型(如果设置了),而不是执行MIME嗅探。
    • 7.web/应用程序服务器通过一个或多个“X-Powered-By”HTTP响应标头泄漏信息。访问此类信息可能有助于攻击者识别您的web应用程序所依赖的其他框架/组件,以及这些组件可能存在的漏洞。

环境信息

  • 服务器:Windwos Server 2016
  • 项目框架版本:.NET Framework 4.7.2

1.The web/application server is leaking version information via the “Server” HTTP response

  • 以下静态文件请求都携带了服务器信息

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 为什么请求接口没有,那是因为在Global.asax.cs配置了
protected void Application_PreSendRequestHeaders(object sender, EventArgs e)
{
    var app = sender as HttpApplication;
    if (app == null || app.Context == null)
    {
        return;
    }

    // 移除Header中的Server
    app.Context.Response.Headers.Remove("Server");
}
  • 想要解决请求静态文件携带Server信息,可以使用使用 URL Rewrite 模块移除 Server 头,URL Rewrite 模块可以全局处理所有请求(包括静态文件)

1.安装文件下载地址:下载地址
在这里插入图片描述

2.配置web.config

<configuration>
  <system.webServer>
    <rewrite>
      <outboundRules>
        <rule name="Remove Server Header">
          <match serverVariable="RESPONSE_Server" pattern=".*" />
          <action type="Rewrite" value="" />
        </rule>
      </outboundRules>
    </rewrite>
  </system.webServer>
</configuration>

3.效果如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.确保您的Web服务器、应用程序服务器、负载均衡器等已配置为强制执行Strict-Transport-Security。

  • iis响应头添加如下配置
Strict-Transport-Security:includeSubDomains

在这里插入图片描述

  • 效果:
    在这里插入图片描述

3.在HTML提交表单中找不到反CSRF令牌。跨站点请求伪造是一种攻击,涉及迫使受害者在不知情或无意的情况下向目标目标发送HTTP请求,以便作为受害者执行操作。根本原因是应用程序功能以可重复的方式使用可预测的URL/表单操作。攻击的本质是CSRF利用了网站对用户的信任。相比之下,跨站脚本(XSS)利用了用户对网站的信任。与XSS一样,CSRF攻击不一定是跨站点的,但也可能是。跨站点请求伪造也称为CSRF、XSRF、一键攻击、会话骑行、混淆代理和海浪。CSRF攻击在许多情况下都是有效的,包括:*受害者在目标站点上有一个活动会话。*受害者在目标站点上通过HTTP身份验证进行身份验证。*受害者与目标站点位于同一本地网络上。CSRF主要用于使用受害者的权限对目标站点执行操作,但最近发现了通过访问响应来披露信息的技术。当目标站点易受XSS攻击时,信息泄露的风险会急剧增加,因为XSS可以用作CSRF的平台,允许攻击在同源策略的范围内进行。

  • 创建令牌
public static class CsrfTokenHelper
{
   private const string SecretKey = ""; // 服务器端的密钥  

   public static string CreateCsrfToken(string user)
   {
       string token = $"{user}"; // 将会话ID和用户值组合起来  

       byte[] secretKeyBytes = Encoding.UTF8.GetBytes(SecretKey);
       byte[] tokenBytes = Encoding.UTF8.GetBytes(token);

       using (HMACSHA256 hmac = new HMACSHA256(secretKeyBytes))
       {
           byte[] hashBytes = hmac.ComputeHash(tokenBytes);
           string csrfToken = Convert.ToBase64String(hashBytes);
           return csrfToken;
       }
   }
}
  • 前端from请求中携带令牌
<input type="hidden" name="CSRFToken">
  • 添加一个验证令牌的过滤器
//解决(CSRF)安全问题,也就是from没有提供票据问题
public class CsrfTokenFilter : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext context)
    {
        // 获取crsf_token
        string xsrf_token_headers = context.HttpContext.Request.Headers["XSRF-TOKEN"] == null ? "" : context.HttpContext.Request.Headers["XSRF-TOKEN"].ToString();
        string xsrf_token_froms = string.Empty;
        // 获取表单数据
        if (context.HttpContext.Request.Form.Count > 0)
        {
            FormCollection formCollection = new FormCollection(context.HttpContext.Request.Form);
            xsrf_token_froms = formCollection["CSRFToken"];
        }

        string newCsrfToken = CsrfTokenHelper.CreateCsrfToken(CurrentUser.UserAccount);
        if (xsrf_token_headers != newCsrfToken || xsrf_token_froms != newCsrfToken)
        {
            // 验证失败,抛出 401 Unauthorized 异常  
            context.Result = RedirectLogin("/Home/Error");
        }
        base.OnActionExecuting(context);
    }
}
  • 在接口中使用
[WithoutLocalization]
[CsrfTokenFilter]
public JsonResult xxxxx(FormCollection formCol)
{

}

4.响应包含“仅内容安全策略报告”标头,这可能表示正在进行的实施工作,或在促进预生产到生产过程中的监督等。内容安全策略(CSP)是一个附加的安全层,有助于检测和缓解某些类型的攻击,包括跨站脚本(XSS)和数据注入攻击。这些攻击用于从数据盗窃到网站污损或分发恶意软件。CSP提供了一组标准HTTP标头,允许网站所有者声明允许浏览器在该页面上加载的已批准内容来源–涵盖的类型包括JavaScript、CSS、HTML框架、字体、图像和可嵌入对象

  • 这个问题太恶心了,要是写了内联样式、行内样式、引入脚本文件了,配置了之后各种问题,解决文档
https://www.w3.org/TR/CSP/
https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP
  • web.config配置
<system.webServer>
  <httpProtocol>
    <customHeaders>
      <!--解决Header中没有csp-->
      <add name="Content-Security-Policy" value="default-src 'self';
           script-src 'self' 'unsafe-inline' 'unsafe-eval'; 
           font-src 'self' 'unsafe-inline' 'unsafe-eval' data: http://localhost:*;
           img-src 'self' data: blob: http://localhost:*; 
           style-src 'self' 'unsafe-inline';" />
      <!--允许请求的http 动作-->
    </customHeaders>
  </httpProtocol>
</system.webServer>

5.The response does not include either Content-Security-Policy with ‘frame-ancestors’ directive or X-Frame-Options to protect against ‘ClickJacking’ attacks.

<system.webServer>
  <httpProtocol>
    <customHeaders>
      <add name="X-Frame-Options" value="SAMEORIGIN" />
    </customHeaders>
  </httpProtocol>
</system.webServer>

6.反MIME嗅探标头X-Content-Type-Options未设置为“nosniff”。这允许旧版本的Internet Explorer和Chrome对响应正文执行MIME嗅探,从而可能导致响应正文被解释并显示为声明的内容类型以外的内容类型。当前(2014年初)和旧版本的Firefox将使用声明的内容类型(如果设置了),而不是执行MIME嗅探。

<system.webServer>
  <httpProtocol>
    <customHeaders>
      <add name="X-Content-Type-Options" value="nosniff"/>
    </customHeaders>
  </httpProtocol>
</system.webServer>

7.web/应用程序服务器通过一个或多个“X-Powered-By”HTTP响应标头泄漏信息。访问此类信息可能有助于攻击者识别您的web应用程序所依赖的其他框架/组件,以及这些组件可能存在的漏洞。

  • 携带服务器信息截图
    在这里插入图片描述
  • 打开iis下的HTTP响应标头,干掉X-Powered-By
    在这里插入图片描述
  • 调整后的效果
    在这里插入图片描述
http://www.dtcms.com/a/61436.html

相关文章:

  • 27. Harmonyos Next仿uv-ui 组件NumberBox 步进器组件禁用状态
  • C# 实现 AI SSE (Server-Sent Events)接口方式输出(对接AI模型API)
  • 无公网IP也能远程控制Windows:Linux rdesktop内网穿透实战
  • 使用VS Code remote ssh进行远程开发的笔记
  • UI自动化:Selenium常规的页面元素定位方法
  • golang从入门到做牛马:第十二篇-Go语言数组:数据的“有序集合”
  • LangChain使用总结-第二章
  • webshell一些上传心得
  • 【Java 面试 八股文】计算机网络篇
  • 大模型工具Ollama存在安全风险
  • LeetCode - #225 使用两个队列实现 LIFO 栈
  • Windows中在VSCode/Cursor上通过CMake或launch文件配置CUDA编程环境
  • react使用拖拽,缩放组件,采用react-rnd解决 -完整版
  • gbase8s rss集群通信流程
  • 前端(vue)学习笔记(CLASS 3):生命周期工程化开发入门
  • 物联网中设备异构的问题-甚至可以用工业数据采集器?
  • 深度评测DeepSeek、ChatGPT O1和谷歌Gemini AI应用开发场景 - DeepSeek性能完胜!
  • HTML左右分页2【搬代码】
  • labview实现16进制数据相加取反,取低16位校验
  • 【JavaEE】线程池
  • 人工智能的发展历史
  • OSPF-单区域的配置
  • Python 入
  • (openstack搭建)openstack云平台部署-详细完整教程
  • 【每日学点HarmonyOS Next知识】对话框去掉圆角、数组拼接、自定义对话框依附某个控件、平移动画、页面栈管理
  • (二)企业级监控系统 - ZABBIX 部署
  • STM32-SPI通信协议
  • Visual Studio Code 基本使用指南
  • Ultravox:融合whisper+llama实现audio2text交互
  • 三维仿射变换矩阵