[书籍精读]《Web前端黑客技术揭秘》精读笔记分享

写在前面 第一章 Web安全的关键点 1.1.数据与指令

用浏览器打开一个网站,呈现在我们面前的都是数据,有服务端存储的(如:数据库、内存、文件系统等)、客户端存储的(如:本地Cookies、Flash Cookies等)、传输中的(如:JSON数据、XML数据等),还有文本数据(如:HTML、JavaScript、CSS等)、多媒体数据(如:Flash、Mp3等)、图片数据等。

两个例子的攻击场景:1.SQL注入攻击的发生;2.XSS跨站脚本攻击的发生

跨站攻击发生在浏览器客户端,而SQL注入攻击由于针对的对象是数据库,一般情况下,数据库都在服务端,所以SQL注入是发生在服务端的攻击

1.2.浏览器的同源策略

计算机的本地与Web是不同的层面,Web世界(通常称为Internet域)运行在浏览器上,而被限制了直接进行本地数据(通常称为本地域)的读写

同源策略规定:不同域的客户端脚本在没明确授权的情况下,不能读写对方的资源。其中有几个关键词:不同域、客户端脚本、授权、读写、资源

1.不同域或同域:同域要求两个站点同协议、同域名、同端口

2.客户端脚本:主要指JavaScript(各个浏览器原生态支持的脚本语言)、ActionScript(Flash的脚本语言),以及JavaScript与ActionScript都遵循的ECMAScript脚本标准

3.授权:HTML5新标准中提到关于Ajax跨域访问的情况,默认情况下是不允许跨域访问的,只有目标站点明确返回HTTP响应头

4.读写权限:Web上的资源有很多,有的只有读权限,有的同时拥有读和写的权限。比如:HTTP请求头里的Referer(表示请求来源)只可读,而document.cookie则具备读写权限

5.同源策略里的资源是指Web客户端的资源。一般来说,资源包括:HTTP消息头、整个DOM树、浏览器存储(如:Cookies、Flash Cookies、localStorage等)

1.3.信任与信任关系

安全类似木桶原理,短的那块板决定了木桶实际能装多少水。一个Web服务器,如果其上的网站没做好权限分离,没控制好信任关系,则整体安全性就由安全性最差的那个网站决定

很多网站都嵌入了第三方的访问统计脚本,嵌入的方式是使用<script>标签引用,这时就等于建立了信任关系,如果第三方的统计脚本被黑客挂马,那么这些网站也都会被危及

1.4.社会工程学的作用

常用的社工辅助技巧有:Google Hack、SNS垂直搜索、各种收集的数据库集合查询等

1.5.攻防不单一

CSRF会借用目标用户的权限做一些借刀杀人的事(注意是“借用”,而不是“盗取”目标权限),然后去做坏事,“盗取”通常是XSS(跨站脚本攻击)最喜欢做的事

第二章 前端基础 2.1.W3C的世界法则

Web安全事件的角色如下:W3C、浏览器厂商、Web厂商、攻击者(或黑客)、被攻击者(或用户)

2.2.URL

URL是互联网最伟大的创意之一,也就是我们经常提的链接,通过URL请求可以查找到唯一的资源

URL有个重点就是编码方式,有三类:escape、encodeURI、encodeURIComponent,对应的解码函数是:unescape、decodeURI、decodeURIComponent

2.3.HTTP协议

URL的请求协议几乎都是HTTP,它是一种无状态的请求响应,即每次的请求响应之后,连接会立即断开或延时断开(保持一定的连接有效期),断开后,下一次请求再重新建立

User-Agent很重要,用于表明身份(我是谁)。从这里可以看到操作系统、浏览器、浏览器内核及对应的版本号等信息

通过Cookies进行会话跟踪,第一次响应时设置的Cookies在随后的每次请求中都会发送出去。Cookies还可以包括登录认证后的身份信息

针对不同的资源类型会有不同的解析方式,这个会影响浏览器对响应体里的资源解析 方式,可能因此带来安全问题。字符集也会影响浏览器的解码方式,同样可能带来安全问题

2.4.松散的HTML世界

HTML里可以有脚本、样式等内容的嵌入,以及图片、多媒体等资源的引用

HTML是由众多标签组成的,标签内还有对应的各种属性。这些标签可以不区分大小写,有的可以不需要闭合。属性的值可以用单引号、双引号、反单引号包围住,甚至不需要引号。多余的空格与Tab毫不影响HTML的解析。HTML里可以内嵌CSS、JavaScript等内容,而不强调分离,等等

很多前端安全问题就是因为松散导致的

1.DOM树:很多数据都存在于DOM树中,通过DOM树的操作可以非常容易地获取到我们的隐私数据;隐私数据可能存储在以下位置(HTML内容中、浏览器本地存储中,如Cookies、URL地址中)

2.iframe内嵌出一个开放的世界:iframe标签是HTML中一个非常重要的标签,也是Web安全中出镜频率最高的标签之一,很多网站都通过iframe嵌入第三方内容;iframe标签带来了很多便利,同时也带来了很多风险,比如,攻击者入侵一个网站后,可以通过iframe嵌入自己的网马页面,用户访问该网站后,被嵌入的网马页面就会执行;如果父页和子页之间是同域,那就很容易,父页可以通过调用子页的contentWindow来操作子页的DOM树,同理,子页可以调用父页的contentWindow来操作父页的DOM树。如果它们不同域,则必须遵守同源策略,但子页还是可以对父页的location进行写操作,这样可以让父页重定向到其他页面。不过对location的操作仅仅只是写权限,而没有读权限,这样就不能获取到父页location URL的内容,否则有可能会造成隐私数据泄露;

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/733aada54040dbf995fb8a037614d625.html