Web安全之XSS攻击与防御小结


Posted in Javascript onDecember 13, 2018

Web安全之XSS攻防

1. XSS的定义

跨站脚本攻击(Cross Site Scripting),缩写为XSS。恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。

2. XSS的原理

  • 攻击者对含有漏洞的服务器发起XSS攻击(注入JS代码)。
  • 诱使受害者打开受到攻击的服务器URL。
  • 受害者在Web浏览器中打开URL,恶意脚本执行。

3. XSS的攻击方式

(1)反射型: 发出请求时,XSS代码出现在URL中,作为输入提交到服务器端,服务器端解析后响应,XSS随响应内容一起返回给浏览器,最后浏览器解析执行XSS代码,这个过程就像一次发射,所以叫反射型XSS。

(2)存储型: 存储型XSS和反射型的XSS差别就在于,存储型的XSS提交的代码会存储在服务器端(数据库,内存,文件系统等),下次请求目标页面时不用再提交XSS代码。

4. XSS的防御措施

(1)编码:对用户输入的数据进行HTML Entity编码

Web安全之XSS攻击与防御小结 

(2)过滤:移除用户上传的DOM属性,如onerror等,移除用户上传的style节点,script节点,iframe节点等。

(3)校正:避免直接对HTML Entity编码,使用DOM Prase转换,校正不配对的DOM标签。

5. 应用示例

构建node应用,演示反射型XSS攻击。(Linux操作系统中)

本例子的代码地址:https://github.com/Xganying/Web-XSS (xss_test1)

(1) 新建一个文件夹xss: mkdir xss_test1

(2) 切换目录到该文件夹下: cd xss

(3) 安装express: express -e ./

Web安全之XSS攻击与防御小结

(4) 构建应用依赖: npm install

Web安全之XSS攻击与防御小结

(5) 打开构建好的node应用,得到目录:

Web安全之XSS攻击与防御小结

(6) 开启node服务:npm start

Web安全之XSS攻击与防御小结

(7) 在浏览器地址栏输入:localhost:3000 ,得到:

Web安全之XSS攻击与防御小结

(8) 加入xss

修改xss_test1文件routers目?下的index.js文件:

Web安全之XSS攻击与防御小结

修改xss_test1文件views目录下的index.ejs文件:

Web安全之XSS攻击与防御小结

(9) 重启node服务:npm start ,打开浏览器

a. 在地址栏输入: localhost:3000/?xss=hello

运行结果得到:

Web安全之XSS攻击与防御小结

b. 在地址栏输入:localhost:3000/?xss=<img src="null" onerror="alert(1)">

运行结果得到:

Web安全之XSS攻击与防御小结

说明: 如果代码中没有 res.set('X-XSS-Protection', 0); 则会发现没有弹出框,这是因为浏览器自动设置了拦截XSS,所以onerror事件并不会执行,而加上了:res.set('X-XSS-Protection', 0); 才会出现弹框,这才完成了一次xss攻击。

c. 在地址栏输入:localhost:3000/?xss=<p onclick="alert(%点我%)">点我</p>

运行结果得到:

Web安全之XSS攻击与防御小结

说明: 这种攻击就是常用于篡改页面内容,破坏页面结构,引诱用户去点击一些钓鱼等网站的手段。

d. 在地址栏输入:localhost:3000/?xss=<iframe src="//baidu.com/t.html"></iframe>

运行结果得到:

Web安全之XSS攻击与防御小结

说明:这种攻击就常用于广告植入等。

简单总结就是: img标签是自动触发而受到攻击的,p标签是引诱出发而受到攻击的的,而iframe则是广告植入攻击的。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
pjblog修改技巧汇总
Mar 12 Javascript
屏蔽鼠标右键、Ctrl+n、shift+F10、F5刷新、退格键 的javascript代码
Apr 01 Javascript
基于JQuery的一句话搞定手风琴菜单
Sep 14 Javascript
javascript SpiderMonkey中的函数序列化如何进行
Dec 05 Javascript
html5的自定义data-*属性和jquery的data()方法的使用示例
Aug 21 Javascript
jQuery mobile转换url地址及获取url中目录部分的方法
Dec 04 Javascript
深入理解JavaScript中为什么string可以拥有方法
May 24 Javascript
AngularJS学习第一篇 AngularJS基础知识
Feb 13 Javascript
获取url中用&amp;隔开的参数实例(分享)
May 28 Javascript
JavaScript适配器模式详解
Oct 19 Javascript
JavaScript使用小插件实现倒计时的方法讲解
Mar 11 Javascript
Flexible.js可伸缩布局实现方法详解
Nov 13 Javascript
JavaScript实现邮箱后缀提示功能的示例代码
Dec 13 #Javascript
深入理解js A*寻路算法原理与具体实现过程
Dec 13 #Javascript
Vue.js上传图片到阿里云OSS存储的方法示例
Dec 13 #Javascript
JS/HTML5游戏常用算法之路径搜索算法 随机迷宫算法详解【普里姆算法】
Dec 13 #Javascript
JS/HTML5游戏常用算法之碰撞检测 包围盒检测算法详解【凹多边形的分离轴检测算法】
Dec 13 #Javascript
JS/HTML5游戏常用算法之碰撞检测 包围盒检测算法详解【矩形情况】
Dec 13 #Javascript
详解Express笔记之动态渲染HTML(新手入坑)
Dec 13 #Javascript
You might like
PHP中你应该知道的require()文件包含的正确用法
2015/06/12 PHP
WordPress中用于获取文章信息以及分类链接的函数用法
2015/12/18 PHP
PHP MVC框架中类的自动加载机制实例分析
2019/09/18 PHP
firefox 和 ie 事件处理的细节,研究,再研究 书写同时兼容ie和ff的事件处理代码
2007/04/12 Javascript
用JQuery模仿淘宝的图片放大镜显示效果
2011/09/15 Javascript
js实现简单登录功能的实例代码
2013/11/09 Javascript
深入理解JavaScript中的箭头函数
2015/07/28 Javascript
javaScript中的原型解析【推荐】
2016/05/05 Javascript
基于jquery实现最简单的选项卡切换效果
2016/05/08 Javascript
Ionic实现页面下拉刷新(ion-refresher)功能代码
2016/06/03 Javascript
针对后台列表table拖拽比较实用的jquery拖动排序
2016/10/10 Javascript
require.js 加载 vue组件 r.js 合并压缩的实例
2016/10/14 Javascript
Jquery AJAX POST与GET之间的区别详细介绍
2016/10/17 Javascript
jQuery代码实现实时获取时间
2017/01/29 Javascript
详解Angular 4.x 动态创建组件
2017/04/25 Javascript
详解浏览器缓存和webpack缓存配置
2018/07/06 Javascript
如何对react hooks进行单元测试的方法
2019/08/14 Javascript
详解小程序横屏方案对比
2020/06/28 Javascript
Vue实现导航栏菜单
2020/08/19 Javascript
Python实现的几个常用排序算法实例
2014/06/16 Python
连接Python程序与MySQL的教程
2015/04/29 Python
python实现最长公共子序列
2018/05/22 Python
python基于C/S模式实现聊天室功能
2019/01/09 Python
python实现回旋矩阵方式(旋转矩阵)
2019/12/04 Python
pytorch-RNN进行回归曲线预测方式
2020/01/14 Python
pytorch实现从本地加载 .pth 格式模型
2020/02/14 Python
Edwaybuy西班牙:小米在线商店
2019/12/04 全球购物
南京某公司笔试题
2013/01/27 面试题
大学生四年生活自我鉴定
2013/11/21 职场文书
工商行政管理专业求职书
2014/05/23 职场文书
中药学自荐信
2014/06/15 职场文书
琅琊山导游词
2015/02/05 职场文书
我们的节日中秋节活动总结
2015/03/23 职场文书
百年校庆宣传标语口号
2015/12/26 职场文书
MySQL query_cache_type 参数与使用详解
2021/07/01 MySQL
多线程Spring通过@Scheduled实现定时任务
2022/05/25 Java/Android