作为一个对于对Web安全没大有概念的人最大的收获就是知道了好多的攻击方式,总体来说这本书讲的比较通俗,通读完这本书后大概也能知道一些常见的攻击方式以及一些避免方式,对做Web开发的程序员来说有一定的收获,概括来说适合对Web安全了解不多的人入门。
- 安全三要素:机密性(Confidentiality),完整性(Intergrity), 可用性(Availablity)。
- 同源策略(Same Origin Policy):
影响源的因素有host、子域名、端口、协议等。
<script><img><iframe><link>可以跨域加载资源不受同源策略的限制,这些带src属性的标签每次加载时实际上是由浏览器发起了一次get请求。
DOM、Cookie、XMLHttpRequest、第三方插件受同源策略的限制,但可以通过crossdomain.xml文件限制跨域的白名单。 - XSS:Cross Site Script 跨站脚本攻击 是为了和Cascading Style Sheet区别,所以改叫XSS.
- location.hash第一个字符是#,并且内容不会被发送到服务器端。
- <base>是定义页面上所有的使用“相对路径”标签的hosting地址,<base>不只可以放在<head>内,也可以放在页面的任何地方。
- window对象是浏览器的窗体,而非document对象,所以不受同源策略的限制
- 对于一些重要的,又不想让JS读取的cookie,在设置cookie时设置HttpOnly属性为ture,这样的话JS就不知道有这个cookie了,可以避免cookie劫持。
- 输入检查可以避免一些XSS,SQl Injection,通用的做法是在前台用JS检查一下以避免大多数的错误,然后在后台做同样的检查,以避免前台JS被绕过的情况。
- Anti-Samy是一个很好的XSSFilter,有Java/.NET实现。
- CSRF Cross Site Request Forgery.跨站点请求伪造。
- 浏览器所持有的Cookie分为Session Cookie和Third-party Cookie。前一种是临时Cookie,后一种是本地Cookie.
- 在浏览器上存储数据以前主要有Cookie, FlashShardObject,IE UserData.HTML5加入了WebStorage。WebStorage分为SessionStorage和LocalStorage. Window.sessionStorage.setItem(key, value)
- 要解决基于字符集的注入需要统一数据库、操作系统、Web应用所使用的字符集,可以都统一为UTF-8.
- 使用预编译语句和存储过程都可以一定程序上避免Sql Injection.
- 避免文件上传漏洞的方式:
文件上传的目录设为不可执行。
用白名单的方式判断文件类型。
单独设置文件服务器的域名,不同源的话很多攻击会失效。 - Authentication(认证)是为了认出用户是谁,而Authorization(授权)是为了决定用户能够做什么。
- Distributed Denial of Service 分布式拒绝服务。