由于浏览器同源策略,限制了页面无法引用第三方资源,无法请求不同源下面的资源,影响了web的发展,所以浏览器出让了一些安全策略来满足web的发展。
通过CSP安全策略来保证浏览器可以安全的加载第三方资源;
通过CORS允许浏览器跨域请求;
通过PostMessage来操作DOM
但这些策略也给了黑客攻击我们的站点的机会。
web站点常见的攻击方式包括:XSS攻击
,CSRF攻击
、Sql注入攻击
等。
XSS攻击(跨站脚本攻击),黑客通过网站的漏洞,将恶意脚本插入Html页面,当用户打开站点时,由于恶意脚本和站点代码拥有同样的执行权限,恶意脚本就有可能篡改站点内容,窃取用户信息发送到第三方服务器。
恶意代码一般会做下面这些攻击:
获取用户Cookies
修改用户DOM,伪造登录页面
生成浮窗广告
监听用户输入
XSS攻击常被分为三类:存储型攻击、反射型攻击、基于DOM的XSS攻击。
前两种一般要经过服务器,所以后端研发更需要注意,而最后一种没有经过服务器,是需要前端注意避免的。
一个真实的案例就是:2015年乌云网爆出来的,喜玛拉雅站点,编辑上传专辑名称,未对录入表单进行过滤,黑客可以上传恶意脚本到服务器。当其他用户点击这张专辑的时候,就执行了恶意脚本,恶意脚本获取用户的Cookies信息,上传到黑客的服务器,然后就可以登录用户的站点。
第一步:输入恶意脚本到站点,没有过滤,所以可以上传到服务器
第二步:当用户打开了当前页面,执行了恶意脚本,后端代码没有禁止第三方站点发出的请求,所以黑客就获取了用户的Cookies,接着就可以访问用户的站点或者调用站点的API
反射型XSS攻击的常见模式是,黑客发现了网站存在将url的参数直接在页面上显示,并且没有过滤的情况,于是黑客就构造带有恶意脚本的链接,诱导用户点击,当用户点击了链接,就将恶意代码注入到了页面并执行,从而获取用户信息等。
反射型攻击案例:
页面中又直接渲染html的变量,直接渲染html的,如下代码,直接读取url参数query, 在页面展示,如果后端服务没有经过过滤,就有可能将query的代码引入页面中执行,造成攻击
该攻击可以是一些流氓软件或攻击路由器,在http请求返回的过程中,在返回的数据中插入了恶意代码,前端站点如果没有过滤,就可能出现执行恶意代码的情况。
1、页面读取html显示,后端通过抓取邮件内容,生成html,给到前端展示。由于邮件中可能存在一些非法标签,浏览器在解析中无法识别,就导致浏览器crash,常常使用插件或者js过滤,转译等。
2、给朋友发送一个页面的脚本,其中alert了6次,并且获取了浏览器Cookies
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>攻击测试</title> </head> <body> <script> window.onload = () => { document.cookie = "username=test" for(let i=0; i<=5; i++){ alert(`你被攻击了,我获取了你的Cookies${document.cookie}`) } } </script> 你被攻击了 </body> </html> 复制代码
打开页面后:
如果将其中的攻击脚本插入用户的页面中,然后向第三方服务器发送cookies,这就构成了XSS攻击
我们来模拟下存储型攻击
一个恶意的脚本这里用Express搭建,端口9000
另外启动一个http服务器,为我们的正常站点,端口8080。
假设,这个的网站存在漏洞,没有过滤参数,恶意脚本上传到了服务器
当用户打开另一个页面,可以加载了前一步录入的内容,我们发现恶意脚本已经执行
阻止XSS攻击,要先知道XSS攻击的原理:一般分为两个步骤。
第一步:黑客找到站点的漏洞,想站点插入恶意脚本。
第二步:读取站点的信息,发送到第三方服务器。
XSS攻击主要有以下方法注入:
html中的script脚本
凡事可以请求第三方数据的地方:标签的属性Img的src属性、a标签的href属性、background:url()
js脚本的拼接特殊字符
对于后端来说,主要有以下几处常常不可信:
用户输入内容
url参数
post参数
第三方的链接
referere
Cookies
对于存储型XSS攻击和反射型XSS攻击,二者由于都需要过服务器,那么只要后端开发在入库的时候最敏感代码进行过滤进行过滤,就可以避免大部分的XSS攻击。
目前对于前端的大部分组件(富文本组件)和常见的Vue、React框架都对展示的数据,只会展示以字符串进行展示。
对于有可能嵌入恶意代码的部分也贴心的增加了提示:
如在Vue中:
<div v-html="html"></div> 复制代码
在React中:
<div dangerouslySetInnerHTML = {{__html:<div><script src="http://xxs.js"></script></div>}} ></div> 复制代码
这些可能导致XSS攻击的地方,框架都给了显著的提示,所以在页面显示这些不可控的内容前要进行过滤。
设置CSP,现在站点加载或发送请求到第三方服务器
给cookies设置了该属性,当前页面重要的Cookie就无法通过js读取,这样黑客也就无法获取用户的信息
作者:前端中后台
链接:https://juejin.cn/post/7041435485310287886
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/127962.html
摘要:劫持用户是最常见的跨站攻击形式,通过在网页中写入并执行脚本执行文件多数情况下是脚本代码,劫持用户浏览器,将用户当前使用的信息发送至攻击者控制的网站或服务器中。预防将录入的恶意标签进行转码再存储,主要在后端录入的时候做。 xss定义 Cross Site Scripting的缩写本来是CSS,但是这样就跟Cascading Style Sheets的缩写混淆了,所以使用XSS,使用字母X...
摘要:劫持用户是最常见的跨站攻击形式,通过在网页中写入并执行脚本执行文件多数情况下是脚本代码,劫持用户浏览器,将用户当前使用的信息发送至攻击者控制的网站或服务器中。预防将录入的恶意标签进行转码再存储,主要在后端录入的时候做。 xss定义 Cross Site Scripting的缩写本来是CSS,但是这样就跟Cascading Style Sheets的缩写混淆了,所以使用XSS,使用字母X...
摘要:一背景是一个非常经典的渗透测试管理系统,原作者在年所开发,由于后来长时间没有人维护,导致目前在环境下无法运行。 一、背景 XSS Platform 是一个非常经典的XSS渗透测试管理系统,原作者在2011年所开发,由于后来长时间没有人维护,导致目前在PHP7环境下无法运行。 笔者最近花了一点时间将源码移植到了PHP7环境中,同时增加安装功能;另外还修复之前的代码的一些不严谨语法的问题,...
摘要:一背景是一个非常经典的渗透测试管理系统,原作者在年所开发,由于后来长时间没有人维护,导致目前在环境下无法运行。 一、背景 XSS Platform 是一个非常经典的XSS渗透测试管理系统,原作者在2011年所开发,由于后来长时间没有人维护,导致目前在PHP7环境下无法运行。 笔者最近花了一点时间将源码移植到了PHP7环境中,同时增加安装功能;另外还修复之前的代码的一些不严谨语法的问题,...
摘要:一背景笔者最近在慕课录制了一套跨站漏洞加强安全视频教程,课程当中有讲到的挖掘方式,所以在录制课程之前需要做大量实践案例,最近视频已经录制完成,准备将这些漏洞的挖掘过程记录下来,方便自己也方便他人。 一、背景 笔者最近在慕课录制了一套XSS跨站漏洞 加强Web安全视频教程,课程当中有讲到XSS的挖掘方式,所以在录制课程之前需要做大量实践案例,最近视频已经录制完成,准备将这些XSS漏洞的挖...
摘要:一背景笔者最近在慕课录制了一套跨站漏洞加强安全视频教程,课程当中有讲到的挖掘方式,所以在录制课程之前需要做大量实践案例,最近视频已经录制完成,准备将这些漏洞的挖掘过程记录下来,方便自己也方便他人。 一、背景 笔者最近在慕课录制了一套XSS跨站漏洞 加强Web安全视频教程,课程当中有讲到XSS的挖掘方式,所以在录制课程之前需要做大量实践案例,最近视频已经录制完成,准备将这些XSS漏洞的挖...
阅读 130091·2024-02-01 10:43
阅读 758·2024-01-31 14:58
阅读 733·2024-01-31 14:54
阅读 82539·2024-01-29 17:11
阅读 2821·2024-01-25 14:55
阅读 1896·2023-06-02 13:36
阅读 2771·2023-05-23 10:26
阅读 835·2023-05-23 10:25