XSS攻击(跨站脚本攻击)的概念:

  用户通过网站页面的输入框植入自己的脚本代码,来获取额外的信息。

XSS的实现方式:

  (1)通过用户将恶意的脚本命令输入到网站中,而这些网站又能够接收“不干净”用户输入,称为“被动注入”,用户把“不干净”的内容输入到文本框中,并把这些内容保存到数据库中,以后再重新在页面上显示。

  (2)通过直接在页面上显示的用户输入,称为“主动注入”。用户将“不干净”的内容输入到文本框中,这些输入的内容立刻就会在屏幕上显示出来。

阻止XSS攻击:

    (1)Html编码

    大部分情况下,使用简单的HTML编码就可以避免XSS -- 服务器通过这个过程将HTML保留字符(如 “<” 和 “>” )替换为特殊编码。对于ASP.NET MVC而言,只需要在视图中使用Html.Encode和Html.AttributeEncode方法就可以实现对特性值的“编码”替换。

谨记:永远不要信任用户能够接触到的或者使用的一切数据,其中包括所有的表单值、Url、cookie或来自第三方源(如OpenID)的个人信息。此外,网站所访问的数据库或服务可能没有对这些数据进行编码,所以不要相信输入应用程序的任何数据,要尽可能地对它们进行编码。

    (2)JavaScript编码

    Html编码不能阻止注入的JavaScript执行。

    解决方法:   (1)使用Ajax.JavaScriptStringEncode辅助方法对JavaScript中使用的字符串进行编码,这与Html.Encode方法进行编码是类似的

          (2)使用AntiXSS库

              AntiXSS库可以为ASP.NET应用程序增加一层额外的防护,它的工作机制与ASP.NET和ASP.NET MVC的编码机制相比有几点重要差异,主要是如下两点:

                (1)AntiXSS使用一个新人字符的白名单,而ASP.NET的默认实现使用一个有限的不信任字符的黑名单。AntiXSS只允许已知安全的输入,因此它只提供安全性能要炒锅视图组织潜在有害输入的过滤器。

                (2)AntiXSS库的中点是组织应用程序中的安全漏洞,而ASP.NET编码主要关注防止HTML页面的显示不被破坏。

              要使用AntiXSS库,只需要在web.config的httpRuntime中添加如下代码:

                <httpRuntime encoderType="System.Web.Security.AntiXss.AntiXssEncoder,System.Web, Version=4.0.0.0,Culture=neutral, PublishKeyToken=b03f5f7f11d50a3a" />

              或者安装AntiXSS NuGet包。在视图中添加对Microsoft.Security.Application命名空间的引用,然后再使用Encoder.JavaScriptEncode()方法来编码。

1、Web应用程序中的安全向量 -- XSS跨站脚本攻击的更多相关文章

  1. Web 应用程序中的安全向量 – ASP.NET MVC 4 系列

           Web 程序运行在标准的.基于文本的协议(HTTP 和 HTML)之上,所以特别容易受到自动攻击的伤害.本章主要介绍黑客如何滥用应用程序,以及针对这些问题的应对措施.   威胁:跨站脚本 ...

  2. 7、Web应用程序中的安全向量 -- 使用Retail部署配置

    该方法不需要胡乱地编辑各个配置设置,而是利用了ASP.NET特性:Retail部署配置. 部署配置是服务器的machine.config文件(在%windir%\Microsoft.NET\Frame ...

  3. 6、Web应用程序中的安全向量 -- customErrors(适当的错误报告和堆栈跟踪)

    几乎所有的网站在开发过程中都在web.config文件中设置了特性<customErrors mode="off">. customErrors模式有3个可选的设置项: ...

  4. 3、Web应用程序中的安全向量 -- cookie盗窃

    作为用户,为了防止cookie盗窃,可以在浏览器设置中选择"禁用cookie",但是这样做很可能导致在访问某个站点的时候弹出警告"该站点必须使用cookie". ...

  5. 5、Web应用程序中的安全向量 -- Open Redirect Attack(开放重定向)

    开放重定向攻击的概念:那些通过请求(如查询字符串和表单数据)指定重定向URL的Web应用程序可能会被篡改,而把用户重定向到外部的恶意URL. 在执行重定向之前需先检查目标地址的有效性,可使用Url.I ...

  6. 2、Web应用程序中的安全向量 -- CSRF/XSRF(跨站请求伪造)

    CSRF的概念可以分为两类:XSS和混淆代理. 混淆代理中的"代理"是指用户的浏览器.CSRF是基于浏览器的工作方式运作的.用户登录到一个站点后,用户的信息将会存储在cookie中 ...

  7. 4、Web应用程序中的安全向量 -- over-posting(重复提交)

    模型绑定是ASP.NET MVC提供的强大功能,可遵照命名约定将输入元素映射到模型属性,从而极大地简化了处理用户输入的过程,然而,这也成为了攻击的另一种没接,给攻击者提供了一个填充模型属性的机会,右下 ...

  8. 在 ASP.NET MVC Web 应用程序中输出 RSS Feeds

    RSS全称Really Simple Syndication.一些更新频率较高的网站可以通过RSS让订阅者快速获取更新信息.RSS文档需遵守XML规范的,其中必需包含标题.链接.描述信息,还可以包含发 ...

  9. Java嵌入式数据库H2学习总结(二)——在Web应用程序中使用H2数据库

    一.搭建测试环境和项目 1.1.搭建JavaWeb测试项目 创建一个[H2DBTest]JavaWeb项目,找到H2数据库的jar文件,如下图所示: H2数据库就一个jar文件,这个Jar文件里面包含 ...

随机推荐

  1. Linux学习-文件和目录管理 

    Linux文件和目录管理  文件系统架构  1.Linux文件系统具有层级性     1)文件或者目录起始于根目录"/"成为树状结构    2)最顶层由/开始   2 ...

  2. Activiti工作流入门

    Activiti简介 Activiti是一个开源的工作流引擎,它实现了BPMN 2.0规范,可以发布设计好的流程定义,并通过api进行流程调度. Activiti 作为一个遵从 Apache 许可的工 ...

  3. Python网络编程学习_Day10

    一.进程与线程 1.区别 进程:一个程序要运行时所需要的所有资源的集合,进程是资源的集合. 一个进程至少需要一个线程,这个线程称为主线程 一个进程里面可以有多个线程 两个进程之间的数据是完全独立,不能 ...

  4. float 属性详解

    当前元素分类(float:left) 下一个紧邻元素分类(不含float) 结论 块级元素(a) 块级元素(b) b会填充a遗留下来的空间,a会和b发生重叠,a的图层在上面. 内联元素(b) b会紧跟 ...

  5. 何为PostgreSQL?

    PostgreSQL 是以加州大学伯克利分校计算机系开发的 POSTGRES, Version 4.2 为基础的对象关系型数据库管理系统(ORDBMS).POSTGRES 领先的许多概念只是在非常迟的 ...

  6. ASP.NET中重复表格列合并的实现方法(转自脚本之家)

    这几天做一个项目有用到表格显示数据的地方,客户要求重复的数据列需要合并,就总结了一下.NET控件GridView 和 Repeater 关于重复数据合并的方法. 这是合并之前的效果: 合并之后的效果图 ...

  7. Android使用 startActivityForResult 、 onActivityResult 时的注意事项

    今天使用 startActivityForResult 时遇到两个问题,应该是常见问题了吧,浪费了些时间才搞定,做个记录. 1. onActivityResult 的触发顺序问题 这个问题很郁闷,我一 ...

  8. [DP优化方法之虚树]

    首先我们看一篇文章 转自xyz: 给出一棵树. 每次询问选择一些点,求一些东西.这些东西的特点是,许多未选择的点可以通过某种方式剔除而不影响最终结果. 于是就有了建虚树这个技巧..... 我们可以用l ...

  9. Hadoop之MapReduce分布式计算

    简单介绍一下项目背景——很简单,作死去接下老师的活,然后一干就是半个月,一直忙着从零基础到使用Hadoop中的MapReduce来解决一个实际问题,也就是用来计算一个数据量较大的二度朋友关系. 那么首 ...

  10. css 冷门样式大全

    1. 文字多了 省略后面  后面加省略号 p{width:300px; border:solid 1px #000; padding:10px; font:22px/22px "微软雅黑&q ...