一、 XSS攻击原理

XSS原称为CSS(Cross-Site Scripting),因为和层叠样式表(Cascading Style Sheets)重名,所以改称为XSS(X一般有未知的含义,还有扩展的含义)。XSS攻击涉及到三方:攻击者,用户,web server。用户是通过浏览器来访问web server上的网页,XSS攻击就是攻击者通过各种办法,在用户访问的网页中插入自己的脚本,让其在用户访问网页时在其浏览器中进行执行。攻击者通过插入的脚本的执行,来获得用户的信息,比如cookie,发送到攻击者自己的网站(跨站了)。所以称为跨站脚本攻击。XSS可以分为反射型XSS和持久性XSS,还有DOM Based XSS。(一句话,XSS就是在用户的浏览器中执行攻击者自己定制的脚本。)

1.1 反射型XSS

反射性XSS,也就是非持久性XSS。用户点击攻击链接,服务器解析后响应,在返回的响应内容中出现攻击者的XSS代码,被浏览器执行。一来一去,XSS攻击脚本被web server反射回来给浏览器执行,所以称为反射型XSS。

特点:

1> XSS攻击代码非持久性,也就是没有保存在web server中,而是出现在URL地址中;

2> 非持久性,那么攻击方式就不同了。一般是攻击者通过邮件,聊天软件等等方式发送攻击URL,然后用户点击来达到攻击的;

1.2 持久型XSS

区别就是XSS恶意代码存储在web server中,这样,每一个访问特定网页的用户,都会被攻击。

特点:

1> XSS攻击代码存储于web server上;

2> 攻击者,一般是通过网站的留言、评论、博客、日志等等功能(所有能够向web server输入内容的地方),将攻击代码存储到web server上的;

有时持久性XSS和反射型XSS是同时使用的,比如先通过对一个攻击url进行编码(来绕过xss filter),然后提交该web server(存储在web server中), 然后用户在浏览页面时,如果点击该url,就会触发一个XSS攻击。当然用户点击该url时,也可能会触发一个CSRF(Cross site request forgery)攻击。

1.3 DOM based XSS

基于DOM的XSS,也就是web server不参与,仅仅涉及到浏览器的XSS。比如根据用户的输入来动态构造一个DOM节点,如果没有对用户的输入进行过滤,那么也就导致XSS攻击的产生。过滤可以考虑采用esapi4js。

参见:http://www.freebuf.com/articles/web/29177.html , http://www.zhihu.com/question/26628342/answer/33504799

二、 XSS 存在的原因

XSS 存在的根本原因是,对URL中的参数,对用户输入提交给web server的内容,没有进行充分的过滤。如果我们能够在web程序中,对用户提交的URL中的参数,和提交的所有内容,进行充分的过滤,将所有的不合法的参数和输入内容过滤掉,那么就不会导致“在用户的浏览器中执行攻击者自己定制的脚本”。

但是,其实充分而完全的过滤,实际上是无法实现的。因为攻击者有各种各样的神奇的,你完全想象不到的方式来绕过服务器端的过滤,最典型的就是对URL和参数进行各种的编码,比如escape, encodeURI, encodeURIComponent, 16进制,10进制,8进制,来绕过XSS过滤。那么我们如何来防御XSS呢?

三、 XSS 攻击的防御

原则:宁死也不让数据变成可执行的代码,不信任任何用户的数据,严格区分数据和代码。

XSS防御的总体思路是:对输入(和URL参数)进行过滤,对输出进行编码

也就是对提交的所有内容进行过滤,对url中的参数进行过滤,过滤掉会导致脚本执行的相关内容;然后对动态输出到页面的内容进行html编码,使脚本无法在浏览器中执行。虽然对输入过滤可以被绕过,但是也还是会拦截很大一部分的XSS攻击。

  • 对输入内容的特定字符进行编码,例如表示 html标记的 < > 等符号。

  • 对重要的 cookie设置 httpOnly, 防止客户端通过document.cookie读取 cookie,此 HTTP头由服务端设置。

  • 将不可信的值输出 URL参数之前,进行 URLEncode操作,而对于从 URL参数中获取值一定要进行格式检测(比如你需要的时URL,就判读是否满足URL格式)。

  • 不要使用 Eval来解析并运行不确定的数据或代码,对于 JSON解析请使用 JSON.parse() 方法。

  • 后端接口也应该要做到关键字符过滤的问题。

  • 使用XSS Filter

XSS(跨站脚本攻击)攻击与防御相关推荐

  1. XSS 跨站脚本攻击 的防御解决方案

    XSS 跨站脚本攻击 的防御解决方案 参考文章: (1)XSS 跨站脚本攻击 的防御解决方案 (2)https://www.cnblogs.com/suwings/p/6285340.html 备忘一 ...

  2. 《XSS跨站脚本攻击剖析与防御》—第6章6.1节参 考 文 献

    本节书摘来自异步社区<XSS跨站脚本攻击剖析与防御>一书中的第6章6.1节参 考 文 献,作者邱永华,更多章节内容可以访问云栖社区"异步社区"公众号查看. 参 考 文 ...

  3. xss跨站攻击html转义,前端攻击和防御(一)XSS跨站脚本攻击

    (一)XSS跨站脚本攻击 (1)XSS简介 XSS攻击全称跨站脚本攻击(Cross Site Scripting),是为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混 ...

  4. XSS跨站脚本攻击剖析与防御笔记

    读书笔记,希望某位小伙伴用得上 第一章XSS初探 1.概念:Cross-Site Scripting简称XSS,是由于WEB应用程序对用户的输入过滤不足而产生的,攻击者利用网站漏洞把恶意脚本注入到网站 ...

  5. XSS跨站脚本攻击原理与常见的脚本及《XSS跨站脚本攻击剖析与防御》摘录总结

    XSS跨站脚本攻击原理与常见的脚本及<XSS跨站脚本攻击剖析与防御>摘录总结 一.XSS跨站脚本攻击的原理 1.什么是XSS跨站脚本 2.跨站脚本攻击产生因素 二.XSS跨站脚本攻击的类别 ...

  6. XSS跨站脚本攻击与防御

    XSS跨站脚本攻击与防御 1.什么是 XSS ? XSS (Cross Site Scripting),即跨站脚本攻击,是一种常见于 Web 应用中的计算机安全漏洞.恶意攻击者往 Web 页面里嵌入恶 ...

  7. xss攻击突破转义_WEB安全之XSS攻击方式与防御方式

    上一期给大家简单介绍XSS以及其操作,本期将带大家了解XSS比较常见的攻击方式与防御方式,一起去了解一下~ XSS 常见攻击方法 1.绕过 XSS-Filter,利用 <> 标签注入 Ht ...

  8. xss跨站脚本攻击_网络安全xss跨站脚本攻击原理

    以下在未经授权的网站操作均为违法行为 XSS跨站脚本攻击 xss的危害 网络钓鱼,盗取各类账号密码 我们先来看一下下面的案例:先来记住一下下面中的表 我们来做一个转发 上面页面显示已经登录,但是突然页 ...

  9. 遭遇 XSS 跨站脚本攻击?稳住,这些方法可保你渡劫 | 附代码、图解

    作者 | 杨秀璋 责编 | 夕颜 出品 | CSDN博客 本文将详细讲解XSS跨站脚本攻击,从原理.示例.危害到三种常见类型(反射型.存储型.DOM型),并结合代码示例进行详细讲解,最后分享了如何预防 ...

  10. XSS及CSRF攻击防御

    一.概念: XSS攻击全称跨站脚本攻击(Cross Site Scripting); CSRF(Cross-site request forgery)跨站请求伪造,也被称为"One Clic ...

最新文章

  1. 如何设置文字的位置html5,怎么设置文字在表格中的位置
  2. Fiddler无法抓取HTTPS的问题,Fiddler证书无法安装终极解决方案,
  3. JFrame中使用jpanel来布局
  4. 趣话题:git三部曲(一)-bug之争,到底谁才是该背锅的那个人?
  5. c语言课程笔记格式,C语言课程学习笔记.docx
  6. 决用 Anaconda 完美解 Python2 和 python3 共存问题
  7. Domino XML Language(DXL)简介
  8. php源码查后门,某一次排查源码后门的过程
  9. 彻底卸载McAfee Agent
  10. 【力扣】合并两个有序链表
  11. 正弦波、方波、三角波的产生和两两之间相互转换
  12. light动名词_动名词的用法英语语法大全
  13. 嘘,这份0项目经验应对面试的独门秘籍,千万别被你的面试官发现~
  14. 选择运营商3G上网资费套餐其实挺实惠
  15. 日常技术积累-ARM中RO/RW/ZI
  16. LaTeX 注释快捷键
  17. Bank Marketing预测一个客户购买理财产品的成功率
  18. Java3D与其他三维技术的比较
  19. android横竖屏切换方法,Android横竖屏切换的生命周期
  20. NKD 编译通过,但是eclipse提示报错 linux

热门文章

  1. php strtoupper 和 array_change_key_case 字符串转大写,小写
  2. xhr get获取文件流下载文件_python爬虫实战——豆瓣电影get初体验
  3. 改成中文版的_lol手游怎么改成中文版?英雄联盟手游中文版更改教程
  4. 每日一笑 | 如果把大脑看成CPU的话...
  5. idea 线程内存_Java线程池系列之-Java线程池底层源码分析系列(二)
  6. lcd屏幕抖动_电视屏幕面板大科普!买电视之前必看!
  7. uboot移植9个步骤_不知道具体的新房装修步骤?9个步骤教你吃透装修
  8. linux卸载android studio,mac上完整卸载删除.简单粗暴无脑:androidstudio删除方案
  9. linux安装卷管理,Linux安装管理ISCSI卷(initiator端)
  10. linux raw设备格式化,SUSE Linux 10配置裸设备(raw devices)