关于xss:从一次攻击看前端安全问题

5次阅读

共计 2910 个字符,预计需要花费 8 分钟才能阅读完成。

微信公众号:[前端一锅煮]
一点技术、一点思考。
问题或倡议,请公众号留言。

最近网站遭逢了一次 CSRF 攻打,短信调用接口被第三方调用导致收回大量有效短信,起初通过接口签名和 IP 封禁解决。明天就来具体学习下前端畛域的平安问题。

Web 利用中存在很多平安危险,这些危险会被攻击者利用,轻则篡改网页内容,重则窃取网站外部数据,更为严重的则是在网页中植入恶意代码,使得用户受到侵害。常见的安全漏洞如下:

  • XSS 攻打:对 Web 页面注入脚本,应用 JavaScript 窃取用户信息,诱导用户操作。
  • CSRF 攻打:伪造用户申请向网站发动歹意申请。
  • 钓鱼攻打:利用网站的跳转链接或者图片制作钓鱼陷阱。
  • HTTP 参数净化:利用对参数格局验证的不欠缺,对服务器进行参数注入攻打。
  • 近程代码执行:用户通过浏览器提交执行命令,因为服务器端没有针对执行函数做过滤,导致在没有指定绝对路径的状况下就执行命令。

XSS

XSS(cross-site scripting 跨域脚本攻打)攻打是最常见的 Web 攻打,其重点是『跨域』和『客户端执行』。

XSS 攻打个别分为两类:Reflected XSS(反射型的 XSS 攻打)和 Stored XSS(存储型的 XSS 攻打)。

Reflected XSS

反射型的 XSS 攻打,次要是因为服务端接管到客户端的不平安输出,在客户端触发执行从而发动 Web 攻打。比方:在某购物网站搜寻物品,搜寻后果会显示搜寻的关键词。搜寻关键词填入 <script>alert('handsome boy')</script>,点击搜寻。页面没有对关键词进行过滤,这段代码就会间接在页面上执行,弹出 alert。此攻打须要用户触发执行。

进攻措施:不要信赖用户的任何输出,对用户输出全副做过滤解决。本义 <>、过滤掉双引号,单引号,阻止靠元素属性来触发事件执行脚本。

Stored XSS

基于存储的 XSS 攻打,是通过提交带有歹意脚本的内容存储在服务器上,当其他人看到这些内容时发动 Web 攻打。个别提交的内容都是通过一些富文本编辑器编辑的,很容易插入危险代码。存在于网页的数据库内,不须要用户触发。

进攻措施:不信赖用户的输出,可对属性、域名做过滤,后端不可信赖前端输出,须要再次过滤。

JSONP XSS

JSONP 的 callback 参数十分危险,他有两种危险可能导致 XSS。

  1. callback 参数意外截断 js 代码,特殊字符单引号双引号,换行符均存在危险。
  2. callback 参数歹意增加标签(如 <script>),造成 XSS 破绽。

进攻措施:限度 callback 函数名词最长 50 个字符,callback 函数名只容许 [,],a-zA-Z0123456789_, $,.,避免个别的 XSS,utf-7 XSS 等攻打。

CSRF

CSRF(Cross-site request forgery 跨站申请伪造,也被称为 One Click Attack 或者 Session Riding,通常缩写为 CSRF 或者 XSRF,是一种对网站的歹意利用。CSRF 攻打会对网站发动歹意伪造的申请,重大影响网站的平安。

进攻措施:

  1. 前后端接口做签名并设置过期工夫,避免第三方调用。
  2. 后端验证申请的 referer 起源。
  3. 把歹意申请 IP 退出黑名单。
  4. 限度申请频率,超过失常频率,显著接口歹意调用的,锁死 IP。

钓鱼攻打

钓鱼有多种形式,这里介绍 url 钓鱼、图片钓鱼和 iframe 钓鱼。

url 钓鱼

服务端未对传入的跳转 url 变量进行检查和管制,可能导致可歹意结构任意一个歹意地址,诱导用户跳转到歹意网站。因为是从可信的站点跳转进来的,用户会比拟信赖,所以跳转破绽个别用于钓鱼攻打,通过转到歹意网站坑骗用户输出用户名和明码盗取用户信息,或坑骗用户进行金钱交易;也可能引发的 XSS 破绽(次要是跳转经常应用 302 跳转,即设置 HTTP 响应头,Locatioin: url,如果 url 蕴含了 CRLF,则可能隔断了 HTTP 响应头,使得前面局部落到了 HTTP body,从而导致 XSS 破绽)。

进攻措施:在跳转的时候对 url 进行按规定校验,判断 url 是否在利用受权的白名单内。

图片钓鱼

如果能够容许用户向网页里插入未经验证的外链图片,这有可能呈现钓鱼危险。

比方常见的 401 钓鱼,攻击者在拜访页面时,页面弹出验证页面让用户输出帐号及明码,当用户输出之后,帐号及明码就存储到了黑客的服务器中。通常这种状况会呈现在 <img src=xxx/> 中,零碎不对 src 是否在域名白名单内进行校验。

进攻措施:在 html 标签中要解析 url 的中央进行白名单校验。

iframe 钓鱼

iframe 钓鱼,通过内嵌 iframe 到被攻打的网页中,攻击者能够疏导用户去点击 iframe 指向的危险网站,甚至遮蔽,影响网站的失常性能,劫持用户的点击操作。

进攻措施:加上以下代码限度网站被嵌套。

if (window != window.top) {window.top.location.href = window.location.href}

HPP 攻打

Http Parameter Pollution(HPP),即 HTTP 参数净化攻打。在 HTTP 协定中是容许同样名称的参数呈现屡次,而因为利用的实现不标准,攻击者通过流传参数的时候传输 key 雷同而 value 不同的参数,从而达到绕过某些防护的结果。可能导致的平安威逼有:绕过防护和参数校验;产生逻辑破绽和报错,影响利用代码执行。

进攻措施:在客户端传输 key 雷同而 value 不同的参数时,服务端强制应用第一个参数,因而不会导致 hpp 攻打。

中间人攻打

在网络环节的数据传输过程中,内容申请和获取时会通过许多中间人,包含充当内容入口的浏览器、路由器厂商、WIFI 提供商、通信运营商等。如果应用了代理、翻墙软件则会引入更多中间人。因为 HTTP 申请的门路、参数默认状况下均是明文的,因而这些中间人能够对 HTTP 申请进行监控、劫持、阻挡。

在没有 HTTPS 时,运营商可在用户发动申请时间接跳转到某个广告,或者间接扭转搜寻后果插入自家的广告。如果劫持代码呈现了 BUG,则间接让用户无奈应用,呈现白屏。

数据泄露、申请劫持、内容篡改等等问题,外围起因就在于 HTTP 是全裸式的明文申请,域名、门路和参数都被两头人们看得一清二楚。HTTPS 做的就是给申请加密,让其对用户更加平安。对于本身而言除了保障用户利益外,还可防止本属于本人的流量被挟持,以爱护本身利益。

只管 HTTPS 并非相对平安,把握根证书的机构、把握加密算法的组织同样能够进行中间人模式的攻打。不过 HTTPS 是现行架构下最平安的解决方案,并且它大幅减少了中间人攻打的老本。

进攻措施:把网站降级到 HTTPS。

进攻总结

XSS 攻打:前端过滤用户输出,后端过滤前端传的数据。

CSRF 攻打:前后端接口做签名并设置过期工夫,referer 测验,封 IP,锁 IP。

钓鱼攻打:对第三方跳转链接进行白名单校验,限度网站被嵌套。

HPP 攻打:服务端强制应用第一个参数。

中间人攻打:网站降级为 HTTPS。

SSL 平安检测

服务端 SSL 反对检测:https://www.ssllabs.com/sslte…

本地 SSLv3 反对检测:https://www.ssllabs.com/sslte…

正文完
 0