欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

從客戶端檢測到有潛在危險的Request.Form值的asp.net代碼

 更新時間:2009年03月05日 00:18:06   作者:  
asp.net開發(fā)中,經常遇到“從客戶端檢測到有潛在危險的Request.Form 值”錯誤提示,很多人給出的解決方案是
1、web.config文檔<system.web>后面加入這一句:
復制代碼 代碼如下:

<pages validaterequest="false"/>

示例:
XML/HTML
復制代碼 代碼如下:

<?xml version="1.0" encoding="gb2312" ?>
<configuration>
<system.web>
<pages validaterequest="false"/>
</system.web>
</configuration>

2、在*.aspx文檔頭的page中加入validaterequest="false",示例如下:
復制代碼 代碼如下:

<%@ page validaterequest="false" language="c#" codebehind="index.aspx.cs" autoeventwireup="false" inherits="mybbs.webform1" %>

其實這樣做是不正確的,會給程序安全帶來風險。
  ASP.Net 1.1后引入了對提交表單自動檢查是否存在XSS(跨站腳本攻擊)的能力。當用戶試圖用之類的輸入影響頁面返回結果的時候,ASP.Net的引擎會引發(fā)一個 HttpRequestValidationExceptioin。這是ASP.Net提供的一個很重要的安全特性。因為很多程序員對安全沒有概念,甚至都不知道XSS這種攻擊的存在,知道主動去防護的就更少了。ASP.Net在這一點上做到默認安全。這樣讓對安全不是很了解的程序員依舊可以寫出有一定安全防護能力的網站。
  但是,當我Google搜索 HttpRequestValidationException 或者 "A potentially dangerous Request.Form value was detected from the client"的時候,驚奇的發(fā)現(xiàn)大部分人給出的解決方案竟然是在ASP.Net頁面描述中通過設置 validateRequest=false 來禁用這個特性,而不去關心那個程序員的網站是否真的不需要這個特性??吹梦疫@叫一個膽戰(zhàn)心驚。安全意識應該時時刻刻在每一個程序員的心里,不管你對安全的概念了解多少,一個主動的意識在腦子里,你的站點就會安全很多。
  為什么很多程序員想要禁止 validateRequest 呢?有一部分是真的需要用戶輸入"<>"之類的字符。這就不必說了。還有一部分其實并不是用戶允許輸入那些容易引起XSS的字符,而是討厭這種報錯的形式,畢竟一大段英文加上一個ASP.Net典型異常錯誤信息,顯得這個站點出錯了,而不是用戶輸入了非法的字符,可是自己又不知道怎么不讓它報錯,自己來處理報錯。
  對于希望很好的處理這個錯誤信息,而不使用默認ASP.Net異常報錯信息的程序員們,你們不要禁用validateRequest=false。
  正確的做法是在你當前頁面添加Page_Error()函數(shù),來捕獲所有頁面處理過程中發(fā)生的而沒有處理的異常。然后給用戶一個合法的報錯信息。如果當前頁面沒有Page_Error(),這個異常將會送到Global.asax的Application_Error()來處理,你也可以在那里寫通用的異常報錯處理函數(shù)。如果兩個地方都沒有寫異常處理函數(shù),才會顯示這個默認的報錯頁面呢。
  舉例而言,處理這個異常其實只需要很簡短的一小段代碼就夠了。在頁面的Code-behind頁面中加入這么一段代碼:
復制代碼 代碼如下:

protected void Page_Error(object sender, EventArgs e)
{
Exception ex = Server.GetLastError();
if (HttpContext.Current.Server.GetLastError() is HttpRequestValidationException)
{
HttpContext.Current.Response.Write("請輸入合法的字符串【<a href=\"javascript:history.back(0);\">返回</a>】");
HttpContext.Current.Server.ClearError();
}
}

這樣這個程序就可以截獲 HttpRequestValidationException 異常,而且可以按照程序員的意愿返回一個合理的報錯信息。
  這段代碼很簡單,所以我希望所有不是真的要允許用戶輸入之類字符的朋友,千萬不要隨意的禁止這個安全特性,如果只是需要異常處理,那么請用類似于上面的代碼來處理即可。
  而對于那些通過 明確禁止了這個特性的程序員,自己一定要明白自己在做什么,而且一定要自己手動的檢查必須過濾的字符串,否則你的站點很容易引發(fā)跨站腳本攻擊。
  關于存在Rich Text Editor的頁面應該如何處理?
  如果頁面有富文本編輯器的控件的,那么必然會導致有類的HTML標簽提交回來。在這種情況下,我們不得不將validateRequest="false"。那么安全性怎么處理?如何在這種情況下最大限度的預防跨站腳本攻擊呢?
  根據(jù)微軟的建議,我們應該采取安全上稱為“默認禁止,顯式允許”的策略。
  首先,我們將輸入字符串用 HttpUtility.HtmlEncode()來編碼,將其中的HTML標簽徹底禁止。
  然后,我們再對我們所感興趣的、并且是安全標簽,通過Replace()進行替換。比如,我們希望有""標簽,那么我們就將""顯式的替換回""。
void submitBtn_Click(object sender, EventArgs e)
{
//將輸入字符串編碼,這樣所有的HTML標簽都失效了。
StringBuilder sb = new StringBuilder(HttpUtility.HtmlEncode(htmlInputTxt.Text));
//然后我們選擇性的允許<b> 和 <i>
sb.Replace("<b>", "<b>");
sb.Replace("</b>", "</b>");
sb.Replace("<i>", "<i>");
sb.Replace("</i>", "</i>");
Response.Write(sb.ToString());
}
這樣我們即允許了部分HTML標簽,又禁止了危險的標簽。
根據(jù)微軟提供的建議,我們要慎重允許下列HTML標簽,因為這些HTML標簽都是有可能導致跨站腳本攻擊的。
<applet>
<body>
<embed>
<frame>
<script>
<frameset>
<html>
<iframe>
<img>
<style>
<layer>
<link>
<ilayer>
<meta>
<object>
可能這里最讓人不能理解的是<img>。但是,看過下列代碼后,就應該明白其危險性了。
<img src="javascript:alert('hello');">

相關文章

  • ASP.NET?MVC自定義操作過濾器

    ASP.NET?MVC自定義操作過濾器

    這篇文章介紹了ASP.NET?MVC自定義操作過濾器的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-03-03
  • ASP.NET Core中使用MialKit實現(xiàn)郵件發(fā)送功能

    ASP.NET Core中使用MialKit實現(xiàn)郵件發(fā)送功能

    這篇文章主要介紹了ASP.NET Core中使用MialKit實現(xiàn)郵件發(fā)送功能,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-10-10
  • 在Linux上使用OpenCvSharp的過程詳解

    在Linux上使用OpenCvSharp的過程詳解

    在本次項目中,我們成功實現(xiàn)了在Linux上使用OpenCvSharp,并成功配置了OpenCvSharp依賴庫,實現(xiàn)了在.NET 6.0環(huán)境下使用C#語言調用OpenCvSharp庫,實現(xiàn)的圖片數(shù)據(jù)的讀取以及圖像色彩轉換,并進行了圖像展示,感興趣的朋友跟隨小編一起看看吧
    2024-02-02
  • ASP.NET Core中的Action的返回值類型實現(xiàn)

    ASP.NET Core中的Action的返回值類型實現(xiàn)

    這篇文章主要介紹了ASP.NET Core中的Action的返回值類型實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-04-04
  • C#抽象類的用法介紹

    C#抽象類的用法介紹

    這篇文章介紹了C#抽象類的用法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-08-08
  • .net SMTP發(fā)送Email實例(可帶附件)

    .net SMTP發(fā)送Email實例(可帶附件)

    本文為大家詳細介紹下.net SMTP發(fā)送Email同時可帶附件的具體實現(xiàn)思路及代碼,想實現(xiàn)的朋友可以參考下哈,希望對大家有所幫助
    2013-07-07
  • .NET 6開發(fā)TodoList應用之實現(xiàn)API版本控制

    .NET 6開發(fā)TodoList應用之實現(xiàn)API版本控制

    API接口版本管理,對于一些規(guī)模稍大的企業(yè)應用來說,是經常需要關注的一大需求。本文將介紹在.NET 6開發(fā)中如何實現(xiàn)API版本控制,感興趣的可以了解一下
    2022-01-01
  • ASP.NET Core奇淫技巧之動態(tài)WebApi的實現(xiàn)

    ASP.NET Core奇淫技巧之動態(tài)WebApi的實現(xiàn)

    這篇文章主要介紹了ASP.NET Core奇淫技巧之動態(tài)WebApi的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-08-08
  • ASP.NET對無序列表批量操作的三種方法小結

    ASP.NET對無序列表批量操作的三種方法小結

    在網頁開發(fā)中,經常要用到無序列表。事實上在符合W3C標準的div+css布局中,無序列表被大量使用,ASP.NET雖然內置了BulletedList控件,用于創(chuàng)建和操作無序列表,但感覺不太好用
    2012-01-01
  • .NET必知的EventCounters性能指標監(jiān)視器詳解

    .NET必知的EventCounters性能指標監(jiān)視器詳解

    這篇文章主要介紹了.NET必知的EventCounters性能指標監(jiān)視器,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11

最新評論