常见前端安全问题概述

随着互联网的高速发展,安全问题已成为企业最关注的焦点之一。而前端又是容易引起安全问题的“窗口”,做为开发人员的咱们,更须要充分了解如何预防和修复安全漏洞。本文将列举常见的前端安全问题,但愿对你有所帮助。前端

本文将从如下几种安全问题展开介绍:git

  • XSS攻击
  • CSRF攻击
  • SQL注入
  • XXE漏洞
  • JSON劫持
  • XST攻击
  • 暴力破解
  • 信息泄露
  • 其余漏洞

1. XSS攻击

XSS攻击全称跨站脚本攻击(Cross-Site Scripting),为区别CSS,在安全领域叫作XSS。攻击者经过在目标网站上注入恶意脚本并运行,获取用户的敏感信息如 Cookie、SessionID等,影响网站与用户数据安全。github

开始这种攻击的案例是跨域的,因此叫作“跨站脚本”。可是发展到今天,因为JS的强大以及网站前端应用的复杂化,是否跨域已经再也不重要。但因为历史缘由,XSS这个名字却一直保留下来。web

本质是恶意代码未通过滤,与网站正常的代码混在一块儿,浏览器没法分辨哪些脚本是可信的,致使恶意脚本执行。shell

XSS攻击要素数据库

  1. 攻击者提交恶意代码
  2. 浏览器执行恶意代码

XSS攻击分类segmentfault

类型 存储区 插入点
反射型XSS URL HTML
存储型XSS 后端数据库 HTML
DOM型XSS 后端数据库/前端存储/URL 前端JS

反射型XSS攻击后端

反射型XSS只是把用户输入的数据“反射”给浏览器,攻击者每每须要诱使用户操做一个恶意连接,才能攻击成功。反射型XSS也叫作“非持久型XSS”(Non-persistent XSS)跨域

存储型XSS攻击浏览器

存储型XSS会把用户输入的数据“存储”在服务器端,这种XSS具备很强的稳定性

比较常见的一个场景就是,黑客写下一篇包含有恶意JS代码的博客文章,发表后,全部访问该博客文章的用户都会在他们的浏览器中执行这段恶意的JS代码。黑客把恶意的脚本保存到服务器端,因此这种XSS攻击就叫作“存储型XSS”

存储型XSS一般也叫作“持久型XSS”(Persistent XSS)

DOM型XSS攻击

DOM型XSS从效果上来讲也是反射型XSS,经过修改页面的DOM节点造成XSS,称之为DOM型XSS

实际上,这种类型的XSS并不是按照“数据是否保存在服务器端”来划分,单独划分出来,是由于DOM型XSS的造成缘由比较特别,发现它的安全专家专门提出了这种类型的XSS。出于历史缘由,也就把它单独做为一个分类了。

XSS攻击类型区别

  1. 存储型XSS的恶意代码存在数据库里,反射型XSS的恶意代码存在URL里

  2. DOM型XSS攻击中,取出和执行恶意代码由浏览器端完成,属于前端JS自身的安全漏洞,而其余两种XSS都属于服务端的安全漏洞

XSS攻击检测

  • 使用XSS攻击字符串手动检测XSS漏洞 github.com/0xsobky/Hac…

  • 使用扫描工具自动检测XSS漏洞 例如Arachni、Mozilla HTTP Observatory、w3af等

XSS攻击防护

  1. 输入输出检查
  2. 避免内联事件
  3. 富文本类使用标签白名单
  4. 增长攻击难度,下降攻击后果
    • 增长验证码,防止脚本冒充用户提交危险操做
    • 经过CSP、输入长度配置、接口安全措施等方法
  5. 主动检测发现

针对以上总结的XSS攻击的防护方法,咱们再来针对CSP与HttpOnly进行进一步的了解与分析:

  • CSP (Content Security Policy)

    1. 禁止加载外域代码,防止复杂的攻击逻辑
    2. 禁止外域提交,网站被攻击后,用户的数据不会泄露到外域
    3. 禁止内联脚本执行
    4. 禁止未受权的脚本执行
    5. 合理使用上报能够及时发现XSS,利于尽快修复问题
  • HttpOnly Cookie

    禁止JS读取敏感Cookie,攻击者完成XSS注入后也没法窃取Cookie

XSS攻击带来的不光是Cookie劫持问题,还有窃取用户信息、模拟用户身份执行操做 攻击者利用AJAX构造HTTP请求,以用户身份完成的操做,就是在不知道用户Cookie的状况下进行的。

2. CSRF攻击

CSRF(Cross-site request forgery)跨站请求伪造,攻击者盗用受害人身份,以受害人的名义发送恶意请求。 其本质是重要操做的全部参数都是能够被攻击者猜想到的,攻击者只有预测出URL的全部参数与参数值,才能成功地构造一个伪造的请求;反之,攻击者将没法攻击成功。

CSRF攻击要素

  1. 攻击通常发起在第三方网站,被攻击的网站没法防止攻击发生
  2. 攻击利用受害者在被攻击网站的登陆凭证,冒充受害者提交操做,而不是直接窃取数据
  3. 整个过程攻击者并不能获取受害者登陆凭证,只是冒用
  4. 跨站请求能够是图片URL、超连接、CORS、Form提交等

CSRF攻击防护

  1. 阻止不明外域的访问

    • 同源检测
      • 如何判断请求是否来自外域?HTTP协议中,每个异步请求都会携带两个Header,用于标记来源域名:Origin Header、Referer Header,这两个Header在浏览器发起请求时,大多数状况会自动带上,而且不能由前端自定义内容。服务器能够经过解析这两个Header中的域名,肯定请求的来源域。
    • Samesite Cookie
      • SameSite-cookies 是Google起草的一份草案来改进HTTP协议,就是为Set-Cookie响应头新增Samesite属性,用来标明这个Cookie是个“同站 Cookie”,同站Cookie只能做为第一方Cookie,不能做为第三方Cookie,Samesite 有两个属性值,分别是Strict和Lax:
        • Samesite=Strict:严格模式,代表这个 Cookie 在任何状况下都不可能做为第三方 Cookie,绝无例外
        • Samesite=Lax:宽松模式
  2. 提交时要求附加本域才能获取的信息

    • CSRF Token
      1. 将CSRF Token输出到页面中
      2. 页面提交的请求携带这个Token
      3. 服务器验证Token是否正确
    • 双重Cookie验证
      • 用户访问网站页面时,向请求域名注入一个Cookie,前端向后端发起请求时,取出Cookie,添加到URL的参数中,后端接口验证Cookie中的字段与URL参数中的字段是否一致,不一致则拒绝。
      • 优势:无需使用Session,适用面更广,易于实施。Token储存于客户端中,不会给服务器带来压力。相对于Token,实施成本更低,能够在先后端统一拦截校验,而不须要一个个接口和页面添加。
      • 缺点:Cookie中增长了额外的字段;若是有其余漏洞(例如XSS),攻击者能够注入Cookie,那么该防护方式失效。难以作到子域名的隔离。为了确保Cookie传输安全,采用这种防护方式的最好确保用整站HTTPS的方式,若是还没切HTTPS的使用这种方式也会有风险。

CSRF测试

  1. 设置浏览器代理
  2. 使用合法帐户访问网站开始测试
  3. 经过CSRF修改并伪造请求
  4. 拿到结果若有漏洞进行修复

3. SQL注入

经过Web应用接口注入SQL语法,破坏原有SQL结构,达到攻击行为。 若是网站存在注入漏洞,至关于将数据库直接暴露在攻击者面前 根据注入位置及方式不一样分分为POST注入、GET注入、cookie注入、盲注、延时注入、搜索注入、base64注入等

SQL注入要素

  1. 跳过帐户权限验证达到越权
  2. 获取数据库关键信息从而进行脱库
  3. 特别状况下还能够修改数据库内容,若是数据库权限分配存在问题,攻击者能够经过SQL注入漏洞直接获取webshell或者服务器系统权限

SQL注入防护

  1. 数据校验
    • 检查数据格式
    • 使用数据库特定的敏感字符转义函数把用户提交数据进行转义
  2. 权限限制
  3. 日志处理
    • 数据库操做失败的时,尽可能不将原始错误日志返回,如类型错误、字段不匹配等,把代码里的SQL语句暴露出来,以防止攻击者利用错误信息进行SQL注入

4. XXE漏洞

XXE (XML External Entity)外部实体漏洞,当应用程序解析XML输入时,若是没有禁止外部实体的加载,致使可加载恶意外部文件和代码,形成任意文件读取、命令执行、内网端口扫描等攻击。只在可以接收XML格式参数的接口才会出现

XXE漏洞防护

  1. 禁用外部实体
  2. 过滤用户提交的XML数据

5. JSON劫持

JSON劫持(JSON Hijacking)是用于获取敏感数据的一种攻击方式,属于CSRF攻击的范畴

JSON劫持防护

  1. X-Requested-With标识
  2. 浏览器JSON数据识别
  3. 禁止JS执行JSON数据

6. XST攻击

XST攻击(cross-site tracing)当Web服务器启用TRACE时,提交的请求头会在服务器响应Body中完整返回,其中HTTP头极可能包括Session Token、Cookies或其它认证信息,攻击者能够利用漏洞获取用户信息

XST攻击防护

禁用HTTP TRACE方法

7. 暴力破解

弱密码(Weak Password)被他人猜到或被破解工具暴力破解

暴力破解防护

  1. 增长密码复杂度
  2. 限制尝试次数

8. 信息泄漏

Web服务器或应用程序没有正确处理一些特殊请求,泄露 敏感信息,如用户名、密码、源代码、服务器信息、配置信息等

信息泄漏防护

  1. 应用程序报错时,不对外产生调试信息
  2. 过滤用户提交的数据与特殊字符
  3. 保证源代码、服务器配置安全

9. 其余漏洞

  1. 目录遍历漏洞
  2. 命令执行漏洞
  3. 文件上传漏洞
  4. 业务漏洞
  5. 框架或应用漏洞

参考资料

相关文章
相关标签/搜索