当前位置: 首页 > 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中的Serverapp.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_tokenstring 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
    在这里插入图片描述
  • 调整后的效果
    在这里插入图片描述

相关文章:

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

解决asp.net mvc发布到iis下安全问题 环境信息1.The web/application server is leaking version information via the "Server" HTTP response2.确保您的Web服务器、应用程序服务器、负载均衡器等已配置为强制执行Strict-Transport-Security。3.在HTML提交表单中找不…...

概念|RabbitMQ 消息生命周期 待消费的消息和待应答的消息有什么区别

目录 消息生命周期 一、消息创建与发布阶段 二、消息路由与存储阶段 三、消息存活与过期阶段 四、消息投递与消费阶段 五、消息生命周期终止 关键配置建议 待消费的消息和待应答的消息 一、待消费的消息&#xff08;Unconsumed Messages&#xff09; 二、待应答的消息…...

springboot三层架构详细讲解

目录 springBoot三层架构 0.简介1.各层架构 1.1 Controller层1.2 Service层1.3 ServiceImpl1.4 Mapper1.5 Entity1.6 Mapper.xml 2.各层之间的联系 2.1 Controller 与 Service2.2 Service 与 ServiceImpl2.3 Service 与 Mapper2.4 Mapper 与 Mapper.xml2.5 Service 与 Entity2…...

2025最新群智能优化算法:云漂移优化(Cloud Drift Optimization,CDO)算法求解23个经典函数测试集,MATLAB

一、云漂移优化算法 云漂移优化&#xff08;Cloud Drift Optimization&#xff0c;CDO&#xff09;算法是2025年提出的一种受自然现象启发的元启发式算法&#xff0c;它模拟云在大气中漂移的动态行为来解决复杂的优化问题。云在大气中受到各种大气力的影响&#xff0c;其粒子的…...

2025年Draw.io最新版本下载安装教程,附详细图文

2025年Draw.io最新版本下载安装教程&#xff0c;附详细图文 大家好&#xff0c;今天给大家介绍一款非常实用的流程图绘制软件——Draw.io。不管你是平时需要设计流程图、绘制思维导图&#xff0c;还是制作架构图&#xff0c;甚至是简单的草图&#xff0c;它都能帮你轻松搞定。…...

记录--洛谷 P1451 求细胞数量

如果想查看完整题目&#xff0c;请前往洛谷 P1451 求细胞数量 P1451 求细胞数量 题目描述 一矩形阵列由数字 0 0 0 到 9 9 9 组成&#xff0c;数字 1 1 1 到 9 9 9 代表细胞&#xff0c;细胞的定义为沿细胞数字上下左右若还是细胞数字则为同一细胞&#xff0c;求给定矩形…...

Android Studio 配置国内镜像源

Android Studio版本号&#xff1a;2022.1.1 Patch 2 1、配置gradle国内镜像&#xff0c;用腾讯云 镜像源地址&#xff1a;https\://mirrors.cloud.tencent.com/gradle 2、配置Android SDK国内镜像 地址&#xff1a;Index of /AndroidSDK/...

做到哪一步才算精通SQL

做到哪一步才算精通SQL-Structured Query Language 数据定义语言 DDL for StructCREATE&#xff1a;用来创建数据库、表、索引等对象ALTER&#xff1a;用来修改已存在的数据库对象DROP&#xff1a;用来删除整个数据库或者数据库中的表TRUNCATE&#xff1a;用来删除表中所有的行…...

Manus演示案例: 英伟达财务估值建模 解锁投资洞察的深度剖析

在当今瞬息万变的金融投资领域&#xff0c;精准剖析企业价值是投资者决胜市场的关键。英伟达&#xff08;NVIDIA&#xff09;&#xff0c;作为科技行业的耀眼明星&#xff0c;其在人工智能和半导体领域的卓越表现备受瞩目。Manus 凭借专业的财务估值建模能力&#xff0c;深入挖…...

postman接口请求中的 Raw是什么

前言 在现代的网络开发中&#xff0c;API 的使用已经成为数据交换的核心方式之一。然而&#xff0c;在与 API 打交道时&#xff0c;关于如何发送请求体&#xff08;body&#xff09;内容类型的问题常常困扰着开发者们&#xff0c;尤其是“raw”和“json”这两个术语之间的区别…...

DeepSeek大语言模型下几个常用术语

昨天刷B站看到复旦赵斌老师说的一句话“科幻电影里在人脑中植入芯片或许在当下无法实现&#xff0c;但当下可以借助AI人工智能实现人类第二脑”&#xff08;大概是这个意思&#xff09; &#x1f49e;更多内容&#xff0c;可关注公众号“ 一名程序媛 ”&#xff0c;我们一起从 …...

ctf-WEB: 关于 GHCTF Message in a Bottle plus 与 Message in a Bottle 的非官方wp解法

Message in a Bottle from bottle import Bottle, request, template, runapp Bottle()# 存储留言的列表 messages [] def handle_message(message):message_items "".join([f"""<div class"message-card"><div class"me…...

测试用例详解

一、通用测试用例八要素   1、用例编号&#xff1b;    2、测试项目&#xff1b;   3、测试标题&#xff1b; 4、重要级别&#xff1b;    5、预置条件&#xff1b;    6、测试输入&#xff1b;    7、操作步骤&#xff1b;    8、预期输出 二、具体分析通…...

c#面试题整理7

1.UDP和TCP的区别 UDP是只要能连上终端就发送&#xff0c;至于终端是否收到&#xff0c;不管。 TCP则是会存在交换&#xff0c;即发送失败或成功&#xff0c;是可知的。 2.进程和线程的区别 双击一个程序的exe文件&#xff0c;程序执行了&#xff0c;这就是一个进程。 这个…...

OpenManus-通过源码方式本地运行OpenManus,含踩坑及处理方案,chrome.exe位置修改

前言&#xff1a;最近 Manus 火得一塌糊涂啊&#xff0c;OpenManus 也一夜之间爆火&#xff0c;那么作为程序员应该来尝尝鲜 1、前期准备 FastGithub&#xff1a;如果有科学上网且能正常访问 github 则不需要下载此软件&#xff0c;此软件是提供国内直接访问 githubGit&#…...

【性能测试】Jmeter下载安装、环境配置-小白使用手册(1)

本篇文章主要包含Jmeter的下载安装、环境配置 添加线程组、结果树、HTTP请求、请求头设置。JSON提取器的使用&#xff0c;用户自定义变量 目录 一&#xff1a;引入 1&#xff1a;软件介绍 2&#xff1a;工作原理 3&#xff1a;安装Jmeter 4&#xff1a;启动方式 &#xf…...

HTML星球大冒险之路线图

第一章&#xff1a;欢迎来到 HTML 星球&#xff01; 1.1 宇宙的基石&#xff1a;HTML 是什么&#xff1f; &#x1f30d; 比喻&#xff1a;HTML 是网页世界的「乐高积木」&#xff0c;用标签搭建一切可见内容&#x1f3af; 目标&#xff1a;理解 HTML 的作用&#xff0c;掌握…...

初识大模型——大语言模型 LLMBook 学习(一)

1. 大模型发展历程 &#x1f539; 1. 早期阶段&#xff08;1950s - 1990s&#xff09;&#xff1a;基于规则和统计的方法 代表技术&#xff1a; 1950s-1960s&#xff1a;规则驱动的语言处理 早期的 NLP 主要依赖 基于规则的系统&#xff0c;如 Noam Chomsky 提出的 生成语法&…...

LabVIEW伺服阀高频振动测试

在伺服阀高频振动测试中&#xff0c;闭环控制系统的实时性与稳定性至关重要。针对用户提出的1kHz控制频率需求及Windows平台兼容性问题&#xff0c;本文重点分析NI PCIe-7842R实时扩展卡的功能与局限性&#xff0c;并提供其他替代方案的综合对比&#xff0c;以帮助用户选择适合…...

AI编程工具-(七)

250309,10这几天都在用通义灵码搞做建模分析。 感想&#xff0c;指令越具体&#xff0c;实现效果越好。 依然是之前的时许数据&#xff0c;这几天分析效果没有提升。 画的几个有意思的图表和效果 主要觉得这图好看&#xff0c;提示词不复杂。 预测效果 预测准确性提升不大聊…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…...

Java 语言特性(面试系列2)

一、SQL 基础 1. 复杂查询 &#xff08;1&#xff09;连接查询&#xff08;JOIN&#xff09; 内连接&#xff08;INNER JOIN&#xff09;&#xff1a;返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...

MFC内存泄露

1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...

LeetCode - 394. 字符串解码

题目 394. 字符串解码 - 力扣&#xff08;LeetCode&#xff09; 思路 使用两个栈&#xff1a;一个存储重复次数&#xff0c;一个存储字符串 遍历输入字符串&#xff1a; 数字处理&#xff1a;遇到数字时&#xff0c;累积计算重复次数左括号处理&#xff1a;保存当前状态&a…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命

在华东塑料包装行业面临限塑令深度调整的背景下&#xff0c;江苏艾立泰以一场跨国资源接力的创新实践&#xff0c;重新定义了绿色供应链的边界。 跨国回收网络&#xff1a;废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点&#xff0c;将海外废弃包装箱通过标准…...

linux 错误码总结

1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...

【Go】3、Go语言进阶与依赖管理

前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课&#xff0c;做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程&#xff0c;它的核心机制是 Goroutine 协程、Channel 通道&#xff0c;并基于CSP&#xff08;Communicating Sequential Processes&#xff0…...

基于Docker Compose部署Java微服务项目

一. 创建根项目 根项目&#xff08;父项目&#xff09;主要用于依赖管理 一些需要注意的点&#xff1a; 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件&#xff0c;否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...

【JavaWeb】Docker项目部署

引言 之前学习了Linux操作系统的常见命令&#xff0c;在Linux上安装软件&#xff0c;以及如何在Linux上部署一个单体项目&#xff0c;大多数同学都会有相同的感受&#xff0c;那就是麻烦。 核心体现在三点&#xff1a; 命令太多了&#xff0c;记不住 软件安装包名字复杂&…...

selenium学习实战【Python爬虫】

selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...