浏览器的安全机制\ XSS
目录
XSS 跨站脚本攻击 (Cross Site Scripting)。
同源策略 SOP(sam Origin Policy)
同源策略就是浏览器对 JavaScript 进行跨域访问的安全策略,同时也是浏览器沙盒环境提供的一项制约。
浏览器可以同时处理多个网站内容,典型方法:
☺ <img src = ‘ ’>
☺ iframe 框架
☺ AJAX
img 标签:
定义和用法:
img 元素向网页中嵌入一幅图像。 请注意,从技术上讲,<img> 标签并不会在网页中插入图像,而是从网页上链接图像。<img> 标签创建的是被引用图像的占位空间。 <img> 标签有两个必需的属性:src 属性 和 alt 属性。
img> 标签的 src 属性是必需的。它的值是图像文件的 URL,也就是引用该图像的文件的的绝对路径或相对路径。
alt 属性是一个必需的属性,它规定在图像无法显示时的替代文本。
假设由于下列原因用户无法查看图像,alt 属性可以为图像提供替代的信息:
(网速太慢src 属性中的错误浏览器禁用图像用户使用的是屏幕阅读器)
<img> 标签的 alt 属性指定了替代文本,用于在图像无法显示或者用户禁用图像显示时,代替图像显示在浏览器中的内容。
iframe框架
用于在网页内显示网页。
添加 iframe 的语法
<iframe src="URL"></iframe>
注:URL 指向隔离页面的位置。
AJAX:
AJAX = 异步 JavaScript 和 XML。
JAX 是一种用于创建快速动态网页的技术。
通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。
传统的网页(不使用 AJAX)如果需要更新内容,必需重载整个网页面。
有很多使用 AJAX 的应用程序案例:新浪微博、Google 地图、开心网等等。
同源策略条件
如果两个页面的协议,端口(如果有指定)和域名都相同,则两个页面具有相同的源。
- URL的主机(FQDN:Fully Qualified Domain Name,全称域名)一致
- Schema 一致
- 端口号一致
跨资源共享:
解决JS跨域访问的问题
跨域资源共享,CORS (cross-orgin sharing standard)
HTTP头部声明
CORS 标准新增了一组HTTP头部字段,允许服务器声明哪些源站通过浏览器访问哪些资源。
CSP(content security policy)
内容安全策略
内容安全策略 (CSP) 是一个额外的安全层,用于检测并削弱某些特定类型的攻击,包括跨站脚本 (XSS) 和数据注入攻击等。无论是数据盗取、网站内容污染还是散发恶意软件,这些攻击都是主要的手段。
为使CSP可用, 你需要配置你的网络服务器返回 Content-Security-Policy
详细见:
内容安全策略( CSP ) - HTTP | MDN https://developer.mozilla.org/zh-CN/docs/Web/HTTP/CSP
XSS 跨站脚本攻击 (Cross Site Scripting)。
注:
XSS通过将代码注入到网页中,并由浏览器解释运行这段js代码,以达到恶意攻击的效果。当用户访问被XSS脚本注入过的网页,XSS脚本就会被提取出来,用户浏览器就会解释执行这段代码,也就是说用户被攻击了。
微博、留言板、聊天室等等手机用户输入的地方,都有可能被注入XSS代码,都存在遭受XSS的风险,只要用户输入的没有做严格的过滤,就会被XSS。
注:用户提交的数据,会作为网页的一部分出现。
♠ 服务器
♠ 攻击者
♠ 客户端浏览器用户
SRC 安全应急响应中心
XSS漏洞的危害
♠ XSS是利用JS代码实现攻击,有很多危害:
♠ 盗取各种用户账号
♠ 窃取用户资料,冒充用户身份
♠ 劫持用户会话执行任意操作
♠ 刷流量、执行弹窗广告
♠ 传播蠕虫病毒
Xss 漏洞的验证
可以使用一段简单的代码,验证和检测漏洞的存在,这样的代码叫做POC。
alert(/xss/);
confirm('xss');
prompt('xss');
<script>alert(/xss/);</script>
<script>confirm(/xss/);</script>
<script>confirm('xss');</script>
<script>prompt('xss');</script>
<sCr<scrscRiptipt>ipt>OonN'"<>
<!--
<sCr<scrscRiptipt>ipt>OonN\'\"<> 【终极测试】
如果页面弹窗,浏览器把用户提交的字符串当做JS 来执⾏,并且执行成功。说明XXS漏洞存在。
Payload 和 poc区别:
Payload:
攻击时存在的代码
Poc:
验证和检测漏洞的存在的代码
XXS漏洞的分类
反射型xss,储存型xss ,DOM型 xss。
☺ 反射型:
非持久性、参数型的跨站脚本。
反射型XSS的代码在Web应用的参数中,例如搜索框的反射型XSS。
注意到,反射型XSS代码出现在keywords参数中。
☺ 存储型:
持久性跨站脚本。XSS代码不是在某个参数(变量中),而是写进数据库或文件永久保存数据的介质中。 通常发生在留言板等地方,可以在留言板位置进行留言,将恶意代码写进数据库中。
*要知道反射性XSS与存储性XSS的区别
☺ DOM型XSS
DOM 型XSS 是⼀种XSS 攻击,其中攻击的代码是由于修改受害者浏览器⻚⾯的DOM 树⽽执⾏的。特殊的地⽅就是攻击代码(payload)在浏览器本地修改DOM 树⽽执⾏,并不会将payload上传到服务器,这也使得DOM 型XSS ⽐较难以检测。
http://192.168.16.107/xssTest/DOM-XSS/
?message=%3Cscript%3Ealert(/xss/);%3C/script%3E
http://192.168.16.107/xssTest/DOM-XSS/
#message=%3Cscript%3Ealert(/xss/);%3C/script%3E
XXS的构造
利用<>构造HTML/JS:
<script>alert(/xss/)</script>
Javascript 伪协议:
可以通过URL 载⼊资源的标签。
<a herf = javascript:alert(/xss/) >click me !</a>
<img src = “javascript :alert(/xss/)”>
注:XSS 攻击的是浏览器,受前端影响⽐较⼤。浏览器的类型,版本等因素都会影响XSS 的效果。
产生自己的事件
“事件驱动” 是⼀种⽐较典型的编程思想。
详见:
HTML 事件属性 https://www.w3school.com.cn/tags/html_ref_eventattributes.asp
固定会话攻击与防御
Cookie窃取和欺骗
XSS盲打
试验流程:
XSS平台建立一个项目(手机号可以不留)
Cookie窃取;
在WEB服务器中找到可能存在xss漏洞的地方 例 留言板 ,通过XSS平台建立项目 形成一个攻击语句 将它放在留言板地方 通过管理员进行触发。
会获得管理员的 Cookie信息。
- 例:
- cookie : username=admin;
- userid=1;
- PHPSESSID=rbpiipm5jfondm3720eanuemq1
我们获取三段信息
Cookie欺骗:
在页面控制台
将获取的Cookie信息复制执行
在进行欺骗时 将获取内容进行加工在控制台写入:(如下)
document.cookie = "username=admin";
document.cookie = "userid=1";
document.cookie = "PHPSESSID=rbpiipm5jfondm3720eanuemq1";
注:标点符号是否规范。
*利用XSS漏洞如何获取数据?
1 .xss漏洞在留言板中
2.借助于XSS平台,用来接收数据
3.需要管理员查看留言触发XSS漏洞
4.设置Cookie,登陆网站后台。
XSS的变形:
可以将构造的XSS代码进行变形,以绕过XSS过滤器的检测。
例:
<img src = ‘#’οnerrοr=’alert(/xss/)’>
<a href = ‘javascript:alert(/xss/)’>click me!</a>
<script>alert(/xss/)</script>
大小写转换:
JS代码大小写敏感
<Img sRc = ‘#’onErRoR=’alert(/xss/)’>
<A hrEf =’JaVaScriPt:alert(/xss/)’>click me!</A>
<ScRiPt>alert(/xss/)</sCrIpT>
引号的使用:
HTML语言对引导的使用要求不严格,某些过滤函数是“锱铢必较”。
☺ 没有引导
☺ 单引号
☺ 双引号
例:
<Img sRc=# OnErRoR=alert(/xss/);>
<Img sRc=’#’ OnErRoR=’alert(/xss/)’>
<Img sRc=”# “ OnErRoR=”alert(/xss/)”>
/代替空格
<Img sRc=’#‘/ OnErRoR=‘alert(/xss/)’>
双写绕过
绕过一次过滤。
例:
Xss过滤器过滤了script关键字。
<scrscriptipt>alert(/xss/)</scrscriptipt>
<script>alert(/xss/)</script>
<scr<script>ipt>alert(/xss/);</script>
对伪协议进行转码
☺ HTML编码
对属性值进行转码,可以绕过过滤。
例:
<a herf =’javascript:alert(/xss/)’>click me!</a>
<a herf =’javascript:alert(/xss/)’>click me!</a> #十进制
<a herf =’javascript:alert(/xss/)’>click me!</a> #十六进制
☺ 其他编码:
1. utf -8 编码
2. utf -7 编码
插入其他字符
拆分跨站
将一段JS代码拆成多段。
<script>z='alert'</script>
<script>z+='(/xss/)'</script>
<script>eval(z)</script>
<script>eval(alert(/xss/))</script>
XSS的防御
XSS过滤器的作用是过滤用户(浏览器客户端)提交的有害信息,从而达到防范XSS攻击的效果。
☺ 输入过滤
永远不要相信用户的输入。
♦ 输入验证:
- 对用户提交的信息进行“有效性“验证。
- 仅接受指定长度
- 仅包含合法字符
- 仅接受指定范围
- 特殊的格式,例如,emali\ip地址。
♦ 数据消毒
过滤或净化掉有害的输入
$xsscode = str_replace(‘script’, ‘’,$xsscode);
输出编码:
HTML编码是HTML实体编制码。
$xsscode = htmlspecialchars($xsscode);
黑白名单策略
不管是采用输入、过滤、输出编码,都是针对用户提交的信息进行黑、白名单式的过滤。
黑名单:不允许的内容
白名单:允许的内容。
防御DOM型XSS
避免客户端文档重写,重定向或其他敏感操作。