目前做ASP.NET项目的时候就有遇到过“用户代码未处理HttpRequestValidationException:从客户端***中检测到有潜在危险的 Request.Form/Request.QueryString值。”的问题,其实这是ASP.NET对于XSS攻击的一种防御手段,防止恶意的HTML标记或脚本数据注入到网站中。

遇到这种问题,我百度了一下,看了大神写的博客,于是转载+备份。

要解决这个问题需要对应多种情况,并且有多种方法来解决。在ASP.NET WebForm项目中可以对单独页面或者全局页面进行处理。

方法一:在出现问题的页面中,设置头部Page的属性ValidateRequest=false,代码如下:

<%@ Page Language="C#" ValidateRequest="false" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication13.WebForm1" %>

MSDN关于ValidateRequest属性的描述:如果 ASP.NET 针对危险值检查来自浏览器的输入,则为 true;否则为 false。 默认值为 true。

方法二:在配置文件中 设置system.web 节点下pages节点的validateRequest="false",代码如下:

  <system.web>
<pages validateRequest="false"></pages>
<httpRuntime requestValidationMode="2.0"/>
</stytem.web>

注意:

1、方法二要慎用,方法二是全局配置,一旦关闭了全站的请求验证,网站就很有可能受到各种攻击以及接受许多危险的数据,比如最常见的XSS攻击。

2、方法一和方法二设置生效都有一个前提,就是配置文件中的httpRuntime 节点的验证模式必须为2.0,.Net Framework4.0版本以上的项目,不设置的话默认验证模式是4.0,4.0的验证模式ValidateRequest=false将会无效,除非 你的ASP.NET项目使用的还是.NET 4.0以下的框架。

代码如下:

  <system.web>
<httpRuntime requestValidationMode="2.0"/>
</stytem.web>

总结MSDN的资料,概括来说就是4.0的验证模式默认是全站HTTP请求都会进行验证,包括COOKIE请求、.ashx一般处理程序请求都会进行验证。而2.0的模式只是针对当前的.aspx页面,这里看下微软MSDN上的说明:

RequestValidationMode 属性指定要使用的 ASP.NET 验证方法。 这可以是在 ASP.NET 版本(早于版本 )中或在 .NET Framework  中使用的版本中使用的算法。 可以将属性设置为下列值:

4.0(默认)。 HttpRequest 对象在内部设置一个标志,该标志指示每当访问 HTTP 请求数据时应触发请求验证。 这可保证在请求期间访问数据(如 cookie 和 URL)之前触发请求验证。 配置文件中页元素(如果有的话)的请求验证设置或单独页面中的 @ 页指令的请求验证设置将被忽略。
2.0. 仅对网页(而不是对所有 HTTP 请求)启用请求验证。 此外,配置文件中的 pages 元素(如果有的话)的请求验证设置或单独页中的 @ Page 指令的请求验证设置用来确定要验证哪些页请求。 未验证分配给此属性的值是否匹配特定版本的 ASP.NET。 任何小于 4.0(例如 3.7、2.9 或 2.0)的数值将被解释为 2.0。 任何大于 4.0 的数值将被解释为 4.0。 若要在配置文件中设置此值,可以为 httpRuntime 元素的 requestValidationMode 特性赋值。 有关更多信息,请参见 httpRuntime 元素(ASP.NET 设置架构)。

3、方法一也是在特定环境下才可以取消验证,对于用户的输入内容,必须要做好相对应的防御措施,基本的可以使用 HttpUtility.HtmlEncode()对用户输入文本进行编码。当然推荐还是使用AntiXSS类库,在.NET Framework4.5以上的版本已经将这个类库包含进去,有兴趣的朋友可以研究下System.Web.Security.AntiXss 命名空间。

另外一个就是ASP.NET MVC项目,MVC中比较简单,只要在控制器上设置属性ValidateInput(false)就行,例如:

[HttpPost]
[ValidateInput(false)]
public ActionResult Create(string strText)
{
/*此处省略代码1000行……..*/
}

另外即使是ASP.NET MVC,也要在配置文件中设置验证模式为2.0,否则设置也是无效的。

本文转载于:http://shiyousan.com/post/635563669112062894

ASP.NET防御XSS跨站攻击的更多相关文章

  1. XSS跨站攻击

    目录 1 XSS跨站攻击简介 1 1.1 什么是XSS 1 1.2 XSS的分类 1 1.3 XSS的危害 1 2 XSS的攻击原理 1 2.1 本地式漏洞攻击 1 2.2 存储式漏洞攻击 2 2.3 ...

  2. 云锁Linux服务器安全软件安装及防护webshell、CC、XSS跨站攻击设置

    无论我们在使用电脑,还是使用VPS/服务器的时候,最为担心的就是服务器是否有安全问题,尤其是网站服务器再遭受攻击的时候如何得到防护.对于大 部分站长用户来说,我们可能只会使用基础的环境,如果真遇到问题 ...

  3. 用shell脚本批量进行xss跨站攻击请求

    由于执行的xss攻击请求他多了,初步估计要执行83次,而且还要执行3篇,如果手工一个一个去执行,说出去,我还配叫自动化大师吗: 有鉴于此,边打算自己编写一个脚本进行批量执行: 而短脚本的编写,非she ...

  4. Laravel5中防止XSS跨站攻击的方法

    本文实例讲述了Laravel5中防止XSS跨站攻击的方法.分享给大家供大家参考,具体如下: Laravel 5本身没有这个能力来防止xss跨站攻击了,但是这它可以使用Purifier 扩展包集成 HT ...

  5. 应用安全-Web安全-XSS(跨站攻击)攻防整理

    分类 反射型 存储型 DOM型 XSF(Flash XSS) PDFXSS MHTML协议跨站(MHTML,data) 字符编码(UTF-7 XSS) 富文本编辑器测试 - 输入框 <img S ...

  6. Cross-Site Scripting XSS 跨站攻击全攻略 分类: 系统架构 2015-07-08 12:25 21人阅读 评论(2) 收藏

    原文:http://a1pass.blog.163.com/blog/static/2971373220087295449497/ 题记:这是我在<黑客X档案>08年第5期发表的一篇文章, ...

  7. web安全性测试——XSS跨站攻击

    1.跨站攻击含义 XSS:(Cross-site scripting)全称"跨站脚本",是注入攻击的一种.其特点是不对服务器端造成任何伤害,而是通过一些正常的站内交互途径,例如发布 ...

  8. 宽字节XSS跨站攻击

    简介 宽字节跨站漏洞多发生在GB系统编码. 对于GBK编码,字符是由两个字节构成,在%df遇到%5c时,由于%df的ascii大于128,所以会自动拼接%5c,吃掉反斜线.而%27 %20小于asci ...

  9. XSS跨站攻击(二)

    本人最近在学习XSS,想总结一下常见的XSS攻击的几种情况,刚好看到<防御 XSS 的七条原则>这篇文章,里面讲的七条防御原则不正是针对XSS的几种利用方式吗?于是,借来学习一下. 原则1 ...

随机推荐

  1. sublime 3 快捷键

    来自(http://dengo.org/archives/970) Sublime text 3是我最喜欢的代码编辑器,每天和代码打交道,必先利其器,掌握基本的代码编辑器的快捷键,能让你打码更有效率. ...

  2. 细说.NET 中的多线程 (一 概念)

    为什么使用多线程 使用户界面能够随时相应用户输入 当某个应用程序在进行大量运算时候,为了保证应用程序能够随时相应客户的输入,这个时候我们往往需要让大量运算和相应用户输入这两个行为在不同的线程中进行. ...

  3. Linux创建用户(转)

    这篇文章总结的太好了,让我没动力新写一篇了,啊哈哈哈哈. 源自:http://www.cnblogs.com/ylan2009/articles/2321177.html Linux 系统是一个多用户 ...

  4. redis中使用java脚本实现分布式锁

    转载于:http://www.itxuexiwang.com/a/shujukujishu/redis/2016/0216/115.html?1455860390 edis被大量用在分布式的环境中,自 ...

  5. Linux~centos上安装.netcore,HelloWorld归来!

    对于跨平台的.netCore来说,让它的程序运行在Linux系统上已经成为必然,也是一种趋势,毕竟我们的很多服务都放在linux服务器上(redis,mongodb,myql,fastDFS,luce ...

  6. salesforce 零基础学习(十六)Validation Rules & Date/time

    上一篇介绍的内容为Formula,其中的Date/time部分未指出,此篇主要介绍Date/time部分以及Validation rules. 本篇参考PDF: Date/time:https://r ...

  7. 修复发生“由于数据移动,未能继续以 NOLOCK 方式扫描”错误的数据库

    最近在系统运行中发现了一个错误,错误信息如下: 错误信息:查询A201412C20568单证信息错误 ---> System.Data.OleDb.OleDbException: 由于数据移动, ...

  8. javascript_core_03之数组

    1.数组:连续存储多个数据,一组连续变量的集合: ①创建空数组:var arr=[]:或者var arr=new Array(): ②创建初始化数组:var arr=[值1,值2,……]:或者var ...

  9. leancloud 用户登录(调用API) 教程

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo } p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; ...

  10. iOS苹果企业证书被撤销以及启用与管理

    在国内, 积分墙以及各大助手(爱思助手, 91苹果助手, XY苹果助手, PP助手, 快用助手)等业务领域都在使用,苹果对证书的使用越来越严格.简单的分析一下,证书被封的原因.   一般证书被封会收到 ...