XSS
时间:2019-09-17
本文章向大家介绍XSS,主要包括XSS使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
XSS
cross site script
xss是一种发生在web前端的漏洞,一般是html代码拼接造成的。
分为:
- 反射型
- 存储型
- DOM型
可以用来钓鱼、上传用户cookie,反正就是运行第三方的js代码。
原理
- 反射型是攻击者准备url让用户浏览,用户执行攻击者的js代码。一般出现在查询
- 存储型请求一次运行一次js代码,而且用户一般信任该站点。一般出现在留言板,注册等页面。
- DOM型:不与后台服务器产生数据交互,是一种通过DOM操作前端代码输出的时候产生的问题,不像第一种html页面是后端渲染的。
测试流程
- 在目标站点上找到输入点,比如查询接口,留言板等
- 输入一组“特殊字符+唯一识别字符”,点击提交后,查看是否对特殊符号做了处理。(<>‘“97812)
- 通过搜索定位到唯一字符,前后语法确认是否可以狗仔执行js的条件(构造闭合);
- 提交构造的脚本,看是否可以成功执行,如果成功执行则说明存在xss漏洞。
一般查询接口容易出现反射型XSS,留言板容易出现存储型xss;构造的脚本可能后端过滤,也有可能浏览器限制执行(chrome)
后端没有处理直接字符串拼接
利用
GET型的利用方式直接将url发给被攻击人,点击就可以触发。
这种还可以做成短网址。
POST型的要攻击者的站点帮用户post表单,所以发给用户的是攻击者的站点的url,对应的页面要帮用户post有post XSS漏洞的站点的数据。
存储型的xss形成原理一样只不过存储在后台,谁访问这个页面都会执行xss脚本。
DOM型的不是后端渲染的是前端渲染的,是DOM。
跨域
想要执行一些复杂的东西就要加载自己的js脚本让浏览器执行
为了安全考虑,所有的浏览器都约定了同源策略,规定,两个不同域名之间不能使用js进行相互操作。如果想跨域操作,需要管理员进行特殊设置(Acess-Control-Allow-Origin:x.com)header。
下面这些变迁跨域加载资源(资源类型是有限制的)是不受同源策略限制
<script src="..."></script>//js加载到本地执行
<img src="...">//图片
<link href="...">//CSS
<iframe src= "...">//任意资源
XSS盲打
提交的xss代码前端不显示,但是可能管理员页面能够执行。
防御
总的原则:输入做过滤,输出做转义
编程语言会提供一些特殊的函数做html转义
特殊:href能够通过javascript协议执行js代码
原文地址:https://www.cnblogs.com/wan-xiang/p/11537960.html
- 线程创建和运行
- CentOs7.3 安装 MySQL 5.7.19 二进制版本
- Retrofit2.0通俗易懂的学习姿势,Retrofit2.0 + OkHttp3 + Gson + RxJava
- 3.Linux用户权限管理之三(文件与权限的设定)
- CentOs7.3 搭建 MySQL 5.7.19 主从复制,以及复制实现细节分析
- 1.Linux操作系统安装的5种方法以及心得
- 我(作为一名开发者)所犯过的错误
- Hadoop-2.7.4 集群快速搭建
- Scala-2.13.0 安装及配置
- HBase-1.3.1 集群搭建
- CentOs7.3 Hadoop 用户 ssh 免密登录
- 手把手教你用Mysql-Cluster-7.5搭建数据库集群
- 简单的java开源图床
- 调度器Quartz的简述与使用总结
- 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 数组属性和方法
- Linux安装Python3如何和系统自带的Python2并存
- Python Tricks 使用 pywinrm 远程控制 Windows 主机的方法
- PHP学习记录之常用的魔术常量详解
- laravel orm 关联条件查询代码
- PHP实现财务审核通过后返现金额到客户的功能
- Laravel框架中的路由和控制器操作实例分析
- php利用array_search与array_column实现二维数组查找
- Python实现手绘图效果实例分享
- php如何把表单内容提交到数据库
- Laravel5.5 视图 – 创建视图和数据传递示例
- 浅谈Python爬虫原理与数据抓取
- PHP封装cURL工具类与应用示例
- php中isset与empty函数的困惑与用法分析
- 布隆过滤器(bloom filter)及php和redis实现布隆过滤器的方法
- PHP使用反向Ajax技术实现在线客服系统详解