ASP.NET常見安全漏洞及修復方式

Microsoft IIS 版本信息泄露

查看網頁返回的 Header 信息,默認會包含 IIS,ASP.NET 版本信息:

隱藏 Server 標頭

編輯 web.config 文件,在 system.webServer 節點中配置 requestFiltering 來移除Server標頭:

<security>
+  <requestFiltering removeServerHeader ="true" />
</security>

隱藏 X-ASPNET-Version 標頭

編輯 web.config 文件,在 system.web 節點, 添加以下配置代碼:

<system.web>
+  <httpRuntime enableVersionHeader="false" />
</system.web>

隱藏 X-Powered-By 標頭

編輯 web.config 文件,在 system.webServer.customeHeaders 節點, 添加以下代碼:

<system.webServer><httpProtocol><customHeaders>
+	    <remove name="X-Powered-By" /></customHeaders></httpProtocol></system.webServer>

修改完響應 Header 如下所示:

未加密的__VIEWSTATE參數

編輯 web.config 文件,在 system.web 節點, 添加以下配置代碼:

	<system.web>
+		<pages enableEventValidation="true" validateRequest="false" viewStateEncryptionMode="Always" enableViewStateMac="true"></system.web>

以上配置加密__VIEWSTATE 參數,并啟用__EVENTVALIDATION;

HTML FORM 表單沒有CSRF防護

通過全局向 注入隱藏域 CSRF 標簽,即 , 服務端收到請求時,會驗證 CSRFToken 是否正確,不正確則拒絕請求。

添加 App_code/CSRFInjectingFilter.cs

using System;
using System.IO;
using System.Text;
using System.Text.RegularExpressions;
using System.Web;public class CSRFInjectingFilter : Stream
{private Stream _responseStream;private StringBuilder _buffer = new StringBuilder();private string _csrfToken;public CSRFInjectingFilter(Stream responseStream, string csrfToken) {_responseStream = responseStream;_csrfToken = csrfToken;}public override void Write(byte[] buffer, int offset, int count) {string content = Encoding.UTF8.GetString(buffer, offset, count);content = InjectToken(content);byte[] outData = Encoding.UTF8.GetBytes(content);_responseStream.Write(outData, 0, outData.Length);}private string InjectToken(string html) {string hiddenInput = string.Format("<input type='hidden' name='CSRFToken' value='{0}' />", _csrfToken);return Regex.Replace(html, @"<form[^>]*>", match => match.Value + hiddenInput, RegexOptions.IgnoreCase);}// 其他 Stream 抽象成員實現public override bool CanRead { get { return false; } }public override bool CanSeek { get { return false; } }public override bool CanWrite { get { return true; } }public override void Flush() { _responseStream.Flush(); }public override long Length {get { throw new NotSupportedException(); }}public override long Position {get { throw new NotSupportedException(); }set { throw new NotSupportedException(); }}public override int Read(byte[] buffer, int offset, int count) { throw new NotSupportedException();}public override long Seek(long offset, SeekOrigin origin) { throw new NotSupportedException(); }public override void SetLength(long value) { throw new NotSupportedException();}}

添加 App_code/CSRFModule.cs

using System;
using System.IO;
using System.Text;
using System.Text.RegularExpressions;
using System.Web;public class CSRFModule : IHttpModule
{public void Init(HttpApplication context) {context.AcquireRequestState += OnAcquireRequestState;context.PreRequestHandlerExecute += OnPreRequestHandlerExecute;}private void OnAcquireRequestState(object sender, EventArgs e) {var app = (HttpApplication)sender;var context = app.Context;// 對 POST 請求做校驗if (context.Request.HttpMethod == "POST" && context.CurrentHandler is System.Web.UI.Page) {string tokenFromForm = context.Request.Form["CSRFToken"];string tokenFromSession = null;if (context.Session != null) {tokenFromSession = context.Session["CSRFToken"] as string;}if (string.IsNullOrEmpty(tokenFromForm) || tokenFromForm != tokenFromSession) {context.Response.StatusCode = 403;context.Response.Write("CSRF 驗證失敗");context.Response.End();}}}private void OnPreRequestHandlerExecute(object sender, EventArgs e){var app = (HttpApplication)sender;var context = app.Context;// 只處理 text/html 類型響應if (context.CurrentHandler is System.Web.UI.Page && context.Response.ContentType == "text/html") {if (context.Session["CSRFToken"] == null) {context.Session["CSRFToken"] = Guid.NewGuid().ToString();}context.Response.Filter = new CSRFInjectingFilter(context.Response.Filter, context.Session["CSRFToken"].ToString());}}public void Dispose() { }
}

配置 web.config , 添加以下配置

在 system.web/httpModules 節點中添加 CSRFModule

<system.web><httpModules>
+			<add name="CSRFModule" type="CSRFModule" />

在 system.webServer/modules 節點中添加 CSRFModule

<system.webServer><modules>
+			<add name="CSRFModule" type="CSRFModule" />

其他

增加 IP 地址黑名單

首先打開“服務器管理器”中,進入“管理”,點擊“添加角色和功能”,在“服務器角色”的 Web服務器/Web服務器/安全性 中找到 “IP和域限制”,勾選并安裝。

安裝成功后,在 IIS 中點擊對應的網站,右側面板中找到 “IP和域限制”,

雙擊進入,右鍵添加拒絕條目即可。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/77321.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/77321.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/77321.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

深入解析Java日志框架Logback:從原理到最佳實踐

Logback作為Java領域最主流的日志框架之一,由Log4j創始人Ceki Glc設計開發,憑借其卓越的性能、靈活的配置以及與SLF4J的無縫集成,成為企業級應用開發的首選日志組件。本文將從架構設計、核心機制、配置優化等維度全面剖析Logback的技術細節。 一、Logback的架構設計與核心模…

OpenStack Yoga版安裝筆記(22)Swift筆記20250418

一、官方文檔 https://docs.openstack.org/swift/yoga/admin/objectstorage-components.html#https://docs.openstack.org/swift/yoga/admin/objectstorage-components.html# 二、對象存儲簡介&#xff08;Introduction to Object Storage&#xff09; OpenStack 對象存儲&a…

Spring Boot日志系統詳解:Logback與SLF4J的默認集成

大家好呀&#xff01;&#x1f44b; 今天我們來聊聊Spring Boot中一個超級重要但又經常被忽視的功能——日志系統&#xff01; 一、日志系統的重要性 首先&#xff0c;咱們得明白為什么日志這么重要&#xff1f;&#x1f937;?♂? 想象一下&#xff0c;你正在玩一個超級復…

【AI提示詞】退休規劃顧問專家

提示說明 隨著人口老齡化的加劇&#xff0c;越來越多的人開始關注退休規劃問題。一個專業的退休規劃顧問可以幫助用戶合理規劃退休生活&#xff0c;確保退休后的生活質量。 提示詞 # 角色 退休規劃顧問專家## 注意 1. 專家設計應符合退休規劃的專業性和可靠性&#xff0c;幫…

樓梯上下檢測數據集VOC+YOLO格式5462張2類別

數據集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路徑的txt文件&#xff0c;僅僅包含jpg圖片以及對應的VOC格式xml文件和yolo格式txt文件) 圖片數量(jpg文件個數)&#xff1a;5462 標注數量(xml文件個數)&#xff1a;5462 標注數量(txt文件個數)&#xff1a;5462 …

docker 部署服務工具記錄

一、場景 項目需要使用dify和向量庫milvus, 這兩個工具都是使用docker 部署&#xff0c;因此需要安裝docker. 二、docker安裝 系統為debian , 剛開始安裝不是超時&#xff0c;就是依賴版本沖突&#xff0c;查看系統鏡像源文件&#xff1a; cat /etc/apt/sources.list 覺得可…

Oracle、MySQL、PostgreSQL三大數據庫對比分析

Oracle、MySQL、PostgreSQL 三大數據庫的對比分析&#xff0c;結合 Java SpringBoot 項目開發 的實際場景&#xff0c;重點說明分庫分表、主從復制的實現難度及案例。 一、數據庫核心對比 1. 核心區別與適用場景 維度OracleMySQLPostgreSQL定位企業級商業數據庫輕量級開源數據…

Stable Diffusion LoRA模型加載實現風格自由

對于模型微調來說&#xff0c;直接進行微調需要的硬件配置和時間都是相當夸張的&#xff0c;但要想實現風格切換自由&#xff0c;也不是只有模型微調一個方式&#xff0c;LoRA技術可以說很完美的解決了這個難題。無論是二次元畫風還是復古膠片質感&#xff0c;都只需要加載小巧…

貪心算法day10(無重疊區間)

1.無重疊區間 435. 無重疊區間 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 代碼&#xff1a; class Solution {public static int eraseOverlapIntervals(int[][] intervals) {Arrays.sort(intervals,(v1,v2)->{return v1[0]-v2[0];});int left interva…

Python語言基礎教程(上)4.0

?博客主頁&#xff1a; https://blog.csdn.net/m0_63815035?typeblog &#x1f497;《博客內容》&#xff1a;.NET、Java.測試開發、Python、Android、Go、Node、Android前端小程序等相關領域知識 &#x1f4e2;博客專欄&#xff1a; https://blog.csdn.net/m0_63815035/cat…

PyTorch 浮點數精度全景:從 float16/bfloat16 到 float64 及混合精度實戰

PyTorch 在深度學習中提供了多種 IEEE 754 二進制浮點格式的支持&#xff0c;包括半精度&#xff08;float16&#xff09;、Brain?float&#xff08;bfloat16&#xff09;、單精度&#xff08;float32&#xff09;和雙精度&#xff08;float64&#xff09;&#xff0c;并通過統…

在conda環境下使用pip安裝庫無法import

安裝seleniumwire包&#xff0c;conda環境沒有&#xff0c;pip之后安裝不到當前conda環境 網上的方法都試過了&#xff0c;包括強制安裝等 python -m pip install --upgrade --force-reinstall selenium-wire 最后定位應該是沒有安裝到當前conda的環境下&#xff0c;使用list…

【k8s系列4】工具介紹

1、虛擬機軟件 vmware workstation 2、shell 軟件 MobaXterm 3、centos7.9 下載地址 &#xff08;https://mirrors.aliyun.com/centos/7.9.2009/isos/x86_64/?spma2c6h.25603864.0.0.374bf5adOaiFPW&#xff09; 4、上網軟件

ApiHug 前端解決方案 - M1 內側

背景 ApiHug UI 解決方案 - ApiHug前后端語義化設計&#xff0c;節約80%以上時間https://apihug.github.io/zhCN-docs/ui 現代前端框架日趨SPA(Single Page Application)化&#xff0c;給前后協同都帶來了挑戰&#xff0c;ApiHug試圖減少多人在前后協同帶來的理解難度&#x…

【人工智能】DeepSeek 與 RAG 技術:構建知識增強型問答系統的實戰

《Python OpenCV從菜鳥到高手》帶你進入圖像處理與計算機視覺的大門! 解鎖Python編程的無限可能:《奇妙的Python》帶你漫游代碼世界 本文深入探討了如何利用 DeepSeek R1 模型結合檢索增強生成(RAG)技術,構建一個高效的知識增強型問答系統。RAG 技術通過結合信息檢索與生…

強大的AI網站推薦(第五集)—— Suno

網站&#xff1a;Suno 號稱&#xff1a;被許多用戶稱為“最強音樂類AI” 博主評價&#xff1a;早在去年1月&#xff0c;我就已經開始使用過了&#xff0c;從小就有一個音樂夢&#xff0c;奈何五音不全&#xff0c;現在用這個來進行創作音樂&#xff0c;有想AI創造音樂的可以試試…

Sigma-Delta ADC(ΣΔ-ADC)中的量化器簡介

Sigma-Delta ADC&#xff08;ΣΔ-ADC&#xff09;是一種高精度的模數轉換器&#xff0c;其中的量化器是其核心組件之一。量化器負責將模擬信號轉換為數字信號&#xff0c;并通過獨特的噪聲整形技術實現高分辨率。接下來&#xff0c;我們將深入了解量化器的各個方面&#xff1a…

Oracle日志系統之附加日志

Oracle日志系統之附加日志 在 Oracle 數據庫中&#xff0c;附加日志&#xff08;Supplemental Log&#xff09;是一種增強日志記錄的機制&#xff0c;用于在數據庫的 redo log 中記錄更多的變更信息&#xff0c;尤其是在進行數據遷移、復制和同步等任務時&#xff0c;能夠確保…

使用源碼編譯安裝golang的docker版

編譯規則 1.4之前用C寫的&#xff0c;1.4可編譯后續一直到1.9版本&#xff0c;后續版本實現了自舉&#xff0c;后續版本是go寫的&#xff0c;基本上相互低2個版本能編譯出新版本。 Go < 1.4&#xff1a;C 工具鏈。 1.5 < Go < 1.19&#xff1a;Go 1.4 編譯器。 1.20…

Android平臺 Hal AIDL 系列文章目錄

目錄 1. Android Hal AIDL 簡介2. AIDL 語言簡介3. Android 接口定義語言 (AIDL)4. 定義AIDL 接口5. AIDL 中如何傳遞 Parcelable 對象6. 如何使用AIDL 定義的遠程接口進行跨進程通信7. 適用于 HAL 的 AIDL8. Android Hal AIDL 編譯調試9. 高版本Android (AIDL HAL) 沿用HIDL方…