学做预算有网站吗,环保公司网站建设,wordpress版5.2,自己做的网站怎么删除转载自 XSS的那些事儿XSS是什么XSS#xff0c;Cross-site scripting#xff0c;跨站脚本攻击#xff0c;为了区分与CSS#xff0c;起名为XSS。黑客利用网站的漏洞#xff0c;通过代码注入的方式将一些包含了恶意攻击脚本程序注入到网页中#xff0c;企图在用户加载网页时…转载自 XSS的那些事儿XSS是什么XSSCross-site scripting跨站脚本攻击为了区分与CSS起名为XSS。黑客利用网站的漏洞通过代码注入的方式将一些包含了恶意攻击脚本程序注入到网页中企图在用户加载网页时执行脚本来实施攻击。脚本程序通常是JavaScript编写当然还包括JavaVBScriptActiveX等。常见的攻击手段是获取用户身份认证信息CookieSession、获取私密网页内容、植入病毒等。
XSS漏洞可以追溯到1990年代。TwitterFacebookMySpaceOrkut,新浪微博和百度贴吧这些网站曾遭受XSS漏洞攻击或被发现此类漏洞。而最近几年XSS升级为最流行的攻击方式有68%的网站可能遭受此类攻击。根据开放网页应用安全计划Open Web Application Security Project公布的2010年统计数据在Web安全威胁前10位中XSS排在第2位仅次于代码注入。场景还原XSS是之所以能成功在于黑客注入的脚本程序在网页上得到执行那么它是怎么被注入又是如何被执行的我们来躺枪一次XSS攻击就知道怎么回事了。
忙碌的一天过去了下班后我打开博客准备写篇《XSS的那些事儿》。于是乎我偷偷的在内容处写入了以下代码scriptalert(I am a xss hacker.)/script提交发布博客后我查看网页的博客内容页面刷新时就会弹出一个对话框:之所以会弹出这个对话框是因为我刚写在内容中的那行JavaScript代码被执行了注入的代码被执行。我尝试把这行代码push到GitHub Page博客的Repository上我就会遇到这种问题。它只是一句简单的警告弹框用户登录后的网站中嵌入下面代码又会发生什么呢script var cockie window.cockie; // localStorage, sessionStorage // Send cockie|localStorage|sessionStorage information to hacker/script如果我访问的博客网站使用了JWT做用户认证将Token保存在sessionStoragecookie或 localStorage中而我无意间访问了一个包含上述脚本的网页我的身份认证信息就会被黑客窃取后续的事情就不得而知了。XSS家族体系根据XSS的表现形式和存储形态XSS主要分为三类反射性、持久型和基于DOM三种类型。而基于DOM型和反射型本质上又是一种类型。反射型XSS攻击最开始出现是在那种服务器负责处理所有数据的网站中。比如一个ServletJSP的网站服务器在处理完用户的输入包含XSS之后会将结果作为一个页面包含XSS返回给用户XSS就会立即被执行该类型就是典型的反射型XSS。
反射性是XSS中最基本的攻击用户输入包含XSS通常附加在HTTP查询参数或者表单上提交请求后服务器直接返回结果就立即执行执行XSS。
反射型的攻击主要针对个人用户。黑客通常通过邮件发送包含一些看似没有问题的URL诱饵给用户用户点击这些URL后就会跳转到一个隐藏着XSS攻击的网站。持久型我们知道反射型XSS需要使用诱惑用户针对的是个人用户它的危害和波及范围是可控的。而XSS被持久化到服务器数据库中后影响范围就不再可控了。来回顾前文获取cookie的XSS脚本script var cockie window.cockie; // localStorage, sessionStorage // Send cockie|localStorage|sessionStorage information to hacker/script如果该脚本被作为一篇博客文章的内容被原样持久化到服务器端的数据库中之后任何用户在浏览该博客文章的时候都会触发浏览器执行该脚本用户的身份信息便会被盗走。
这种持久化在服务器端的XSS就是一种持久型的XSS攻击它的影响范围是很广。因为一旦被持久化到服务器该博客网站的任何用户都有可能遭遇攻击。基于DOM随着Web的发展页面承载了越来越多的展现逻辑那么为了提高用户体验页面的渲染由同步转向异步架构师开始采用JavaScriptAJAX的方案。之后JavaScript就逐渐掌管页面中数据请求和逻辑渲染。
JavaScript同时会处理用户输入并将其渲染出来。如果用户输入包含了XSS此时XSS会以DOM的形式被执行。而这种XSS攻击我们称之为基于DOM型。
基于DOM型是由反射型衍生出来的一种新的类型不同于反射型的是后者需要服务器端的反射而前者不会涉及跟服务器的交互。但它们本质上是一种类型只是因为系统架构的演变而不得不进行基因变异。防御措施当我们使用cookie的时候我们要防范CSRF当我们使用了Token的时候我们又得防范XSS有种Web世界太危险我要转后端服务器端开发的姿态。不巧的是恰恰从服务器端去阻止XSS攻击才是有效的途径。
从XSS的家族体系中可以看出XSS其实就是用户输入寄生虫所以只要能对症下药正确处理用户输入就能防御绝大部分XSS攻击甚至使其无地容身。双重校验对于用户输入我们始终要保持怀疑的态度。要消除这种怀疑我们要在浏览器端和服务器端做双重严格校验。
在安全架构方面我们对JavaScript的定位是仅用于提高用户体验。所以浏览器校验只是用来防君子根本上需要在服务器端搭设一层可靠的防御网。针对双重校验我们可以的事情主要有
1.严格控制输入的格式比如年龄的input中只允许用户输入数字。
2.对数据进行HTMLEncode处理对URL进行URLEncode。
3.过滤或移除特殊的HTML标签。例如: script,iframe,lt;
for ,gt;for , quot for等。
4.过滤JavaScript事件的标签。例如οnclick,onfocus等Web Framework在这方面一般都集成了XSS防御功能比如Spring Security就提供了配置http.headers().xssProtection()的选项。注入猴子当我们处在危险境遇我们不能坐以待毙。提前做一些主动的安全防御措施是绝对有必要的。比如说引入一些自动化的XSS监测机制。
借鉴著名的Netflix猴子军的做法
混乱猴子Chaos Monkey
负责在一天随机停掉服务器。混乱大猩猩Chaos Gorilla
负责随机关闭整个可用区数据中心。延迟猴子Latency Monkey
则负责下系统之间注入网络延迟。Netflix的猴子军的目标是在生产环境的制造故障来锻炼团队对故障的应对能力。它核心理念从错误中学习成长。所以我们既然要防御XSS不妨引入一直注入猴子Injectiion Monkey它主要负责向我们的网站中注入类似脚本/scriptalert(document.cookie)/script!--scriptalert(document.cookie)/script!--onclickalert(document.cookie)特殊保护XSS通常会盗用用户身份信息如果网站使用了Cookie中保存用户Session的机制则需要将重要的Cookie设置为httponly即不让JavaScript脚本去读取Cooike信息。使用这种机制需要防范CSRF攻击。如果你的网站使用了Token机制则需要重点实施上述两条措施。