Web安全笔记

  最近读了吴翰清的《白帽子讲Web安全》,学到了不少东西。现把书中的知识点梳理一遍,以便记忆。以下内容是我根据《白帽子讲Web安全》和自己的理解整理的,如有不够清晰或误导的地方,可以查看原书。

  随着网页技术的飞速发展,越来越多的黑客把攻击的目光投向网页。因而,Web安全也愈发显得重要。

  评判一个网页是否安全,可以分析网站是否具有具备安全三要素:机密性(Confidentiality)、完整性(Integrity)、可用性(Availability)。我们也可以对网站进行风险分析,一般可使用公式:Risk = Probility * Damage Potential。建立一个风险评估模型也很有必要,这里有一个简单的模型:DREAD(Damage Potential,Reproducibility,Exploitability,Affected Users,Discoverability),通过加权求值再排序可以大致确定风险的高低和要优先处理的安全问题。

  Web安全应该遵循以下原则:

  • Secure By Default(白名单、最小权限)
  • Defense in Depth(纵深防御)
  • 数据与代码分离
  • 不可预测性

  Web攻击按场景可分为客户端攻击和服务端攻击。客户端的攻击手段主要有跨站脚本攻击(XSS)、跨站请求伪造(CSRF)、点击劫持(Click Jacking),服务端的攻击手段主要有注入攻击和利用文件上传漏洞进行攻击。

一、XSS

常指黑客通过“HTML注入”篡改网页,插入恶意的脚本,从而在用户浏览网页时,控制用户浏览器的一种攻击。

分类

(1) 反射型:非持久型XSS。将用户输入的数据“反射”给浏览器,往往需要诱使用户“点击”一个恶意链接。
(2)存储型:持久型XSS。把用户输入的数据“存储”在服务器。
(3) DOM Based XSS:一种特殊的反射型XSS。通过修改页面的DOM节点形成的,不需要经过服务器。

攻击方法

(1)植入恶意脚本(XSS Payload)。

类型 实现 对策
Cookie劫持 插入空图片,利用onerror方法获取用户Cookie 1.Set-Cookie头增加HttpOnly属性;
2.cookie与IP绑定
构造GET和POST请求 诱使或获取用户信息并发起请求(form、XHR) 1.POST表单要求输入验证码
2.修改密码时要求输入旧密码

(2)XSS钓鱼:与钓鱼结合,伪造输入框获取信息。
(3)XSS收集用户信息:识别用户浏览器(利用UserAgent或浏览器的特性);识别用户安装的软件(ActiveX、Flash、Thunder、FireFox插件)。
(4)CSS History Hack: 利用style的visited属性,用户曾访问过某个链接,链接颜色会不同,从而获取用户的访问信息。
(5)获取用户的真实IP:借助第三方软件如Java Applet、ActiveX。
(6)XSS蠕虫。

如何构造XSS

(1)利用字符编码。
(2)绕过长度限制:利用点击事件、location.hash、注释符、window.name等。
(3)使用base标签:图片路径为相对路径的标签前加标签可以修改其域名。
(4)利用window.name:利用该对象实现跨域、跨页面传递数据,也可以缩短XSS Payload的长度。
(5)利用第三方插件:如Apache Expect Header XSS,可修改Expect头实现注入js;Anehta回旋镖;Flash XSS,动态脚本ActionScript的allowScriptAccessallowNetworking属性。
(6)利用js开发框架的安全漏洞:Dojo、YUI、jQuery等都有安全漏洞。

防御方法

(1)HttpOnly:浏览器会禁止页面的js访问带有HttpOnly属性的Cookie。
(2)输入检查:根据语境进行XSS过滤。
(3)输出检查:根据输出环境(HTML标签中、HTML属性中、

你可能感兴趣的:(web)