web安全性包括: 客户端脚本安全和服务器端应用服务器
客户端脚本安全:
● 跨站脚本攻击(XSS )
● 跨站点请求伪造(CSRF)
● 点击劫持(ClickJacking)
● HTML 5 安全性
服务端应用安全:
● 注入攻击
● 文件上传漏洞
● 认证与会话管理
● 访问控制
● DDos攻击
个人意识和个人层面:
Xss 攻击
Cross Site script: Xss攻击是通过HTML网页篡改网页,插入恶意的脚本,从而在用护浏览网页,控制用户浏览器的一种攻击,Xss长期被列为Web客户端的头号大敌.
反射型XSS
反射型Xss只是简单把用户输入的数据"反射"给浏览器,也就是说,黑客往往需要诱使用户点击"恶意"的链接,有称为非持久的xss
存储型XSS
存储型Xss,黑客把恶意的脚本保存在服务器
DOM Based Xss
也是反射型的XSS,通过修改DOM节点形成XSS,称为DOM Based Xss
Xss攻击进阶
Xss payload
Xss 攻击成功之后,对用户当前浏览的页面植入恶意脚本,控制用户的浏览器,称为Xss payload,常见的Xss payload,是Cookie劫持,可以通过设置"Httponly"标识并防止Cookie劫持,
解决思路
- Cookie httponly
- 输入检查, 互联网有很多Xss filter
- 输出检查, 在变量输出到HTML时候,可以使用编码或者转义,比如HtmlEncode JavascriptEncode
- 富文本尽量不让用户自定义Css,如果支持的话,用Css parser对样式进行智能解析.
- Dom Based Xss是从javascript输出数据到HTML页面,上面所有的方法是从服务器直接输出到HTML,这块目前还没有效的解决,
跨站点请求伪造(CSRF)
浏览器的cookie
● SessionCookie(又名为临时Cookie)
● Third-party cookie
两者的区别是在于 Third-party cookie是服务器在set-cookie时指定了Expire时间,只有到了expire时间后的cookie才会失效,所以这种cookie会保存在本地,而session-cookie则没有指定expire时间,所以浏览器关闭之后,就失效了.一般而言浏览器会禁止
Web安全是一个很大的领域,可参考《白帽子讲Web安全》
1、XSS 跨站脚本攻击
○ 类型
■ 反射型
■ 存储型
■ 基于 DOM 的攻击
○ 解决方案有:
■ 服务端
● 输入时,过滤数据、使用编码
● 设置 cookie 为 httpOnly
■ 前端
● 输入时,过滤数据、使用编码
● 输出时,过滤数据
2、CSRF 跨站请求伪造
○ 原理:利用客户端用户的登录态进行的第三方请求攻击
○ 解决方案有:
■ referrer
■ 验证码
■ token
■ cookie 新增属性 SameSite
3、iframe 的风险
○ 防御:使用 iframe 的属性 sandbox 限制 iframe 的行为
4、点击劫持
○ 原理:利用网站视觉欺骗,将原有网页的功能或操作通过其他形式覆盖,当用户点击时,从而发起攻击
○ 防御:
■ iframe 覆盖攻击:使用 X-Frame-Options HTTP 响应头标记该页面不能被 iframe 嵌入,从而避免该点击劫持的可能性
■ 图片覆盖攻击:考虑是否存在xss、检查用户提交的img标签是否style属性浮出
5、错误的内容推断
○ 浏览器会根据返回的内容自行推断文件的类型,从而以相应的类型执行文件,如 .js 文件就发起执行 js 脚本。
○ 防御:设置 HTTP 头的属性 X-Content-Options: nosniff ,设置后浏览器不再推断类型,而是根据 Content-Type 的值去处理。
6、不安全的第三方依赖包
○ 通常项目开发中,不可避免的会使用到第三方依赖包,这时第三方依赖包就有可能存在安全漏洞。
○ 防御:
■ 使用一些检测工具检查第三方依赖包等
7、响应拦截
○ 通常用户访问某个网站,是从域名开始输入,访问某网站时,是通过 http 请求发起的,然后再重定向https请求,这给了攻击者机会,在 http 访问时便被拦截。
○ 防御:
■ 输入网站时,带上协议:https
■ 响应头上带上 Strict-Transport-Security 告诉浏览器以后访问该网址时自动把 http 转换成 https
■ 不使用不信任的热点访问需要关注安全的网站
8、本地存储数据泄露
○ 防御:尽可能不在前端存储敏感、机密的信息
9、静态资源完整性
○ 通常静态资源如 脚本文件 和 样式文件存在 CDN,若 CDN 被劫持修改了资源,那么就会造成被攻击。
○ 防御:使用浏览器端的 script 和 link 标签的属性 integrity 表示文件的 base64编码的哈希值和实际的文件哈希值比较是否未被修改。