一直对web安全很感兴趣,却一直只是略懂一点。决定从现在开始学起web安全的知识,更新起web安全系列的文章。文章内容为作者自己边学边写的,不对之处多谢各位大大们指出。
web安全比较经典的手段有三种:xss,csrf,界面操作劫持。好吧,都是一知半解的,就从xss开始吧。这篇文章从xss基础讲起,内容比较简单,了解xss的同学可以直接跳过,关注后续笔者继续学习xss的文章就好了~~
XSS 全称(Cross Site ing) 跨站脚本, 是Web程序中最常见的漏洞。指者在网页中嵌入客户端脚本(例如Java), 当用户浏览此网页时,脚本就会在用户的浏览器上执行,从而达到者的目的. 比如获取用户的Cookie,到恶意网站,携带木马等。
反射型XSS,又称非持久型XSS。之所以称为反射型XSS,则是因为这种方式的注入代码是从目标服务器通误信息、搜索结果等等方式“反射”回来 的。而称为非持久型XSS,则是因为这种方式具有一次性。者通过电子邮件等方式将包含注入脚本的恶意链接发送给者,当者点击该链接时,注 入脚本被传输到目标服务器上,然后服务器将注入脚本“反射”到者的浏览器上,从而在该浏览器上执行了这段脚本。
反射性XSS危害虽然相对较小,但是应该是XSS中使用最多的一种手段。好吧,说了这么多概念,估计了解XSS的同学也没学到什么,不了解的同学也还是不知道这是什么。还是看个简单的DEMO:
这样一个代码,就是一次反射型的XSS了。当然,打开这个URL的是被的用户,者得用户去点击,用户点击后就会触发里的脚本了,alert只是一个示例,将里面的代码改成比如把用户cookie发送到你自己的服务器,那就顺利获得被用户在站点的cookie啦,然后一般就可以顺利登入,做各种事情。。后面会再仔细探Payload的问题~~
存储型XSS会把用户输入的数据“存储”在服务器端。这种XSS具有很强的稳定性,危害性也要大的多。存储型XSS也叫持久型XSS。
最典型的例子是留言板XSS,用户提交一条包含XSS代码的留言存储到数据库,目标用户查看留言板时,那些留言的内容会从数据库查询出来并显示,浏览器发现有XSS代码,就当做正常的HTML与JS解析执行,于是就触发了XSS。
DOM XSS和反射型XSS、存储型XSS的区别在于,DOM XSS的XSS代码并不需要服务器解析响应的直接参与,触发XSS靠的就是浏览器端的DOM解析,可以认为完全是客户端的事情。这类XSS作为一个前端的同学应该是要尤其注意。
整个过程跟服务端完全没有任何关系,者就可以轻松别人点击有XSS代码的URL实现。好吧,刚毕业时看规范说不能写eval还不以为然。有些同学还是觉得自己有信心写eval,能自己的代码没有问题。但是,有”输出点“就意味着有风险,就意味着多了一份被XSS的风险!还是能不写则不写为好~
XSS成功后,者能够对用户当前浏览的页面植入恶意脚本,通过恶意脚本,控制用户的浏览器。这些用已完成各种具体功能的恶意脚本,被称为”XSS payload。
XSS Payload实际上就是Java脚本(还可以是Flash或其他富客户端的脚本),所以任何Java脚本能实现的功能,XSS Payload都能做到。
当然,刚说了这些东西也没啥用,看着好像也没啥意义,后面的文章会慢慢的探讨这些。先来把前面那个窃取cookie的简单demo来看看吧:
这样就是一个简单的窃取cookie的Payload了。还是用反射性XSS那个例子,我们只要把引入alert(1)的代码改成引入这段代码,只要用户被点击带有XSS代码的URL,就会往我们的服务器送test.com的cookie啦~ 顺利拿到cookie,然后palapala~~~
从我的理解来看,只要不存在数据“输入点”或者“输出点”,就是不可能发生XSS的,但是一个代码怎么可能没有数据“输入点”和“输出点”呢~~ 看完的简单介绍,大家应该还是觉得自己的代码应该没有任何问题,自己写的代码是安全的。事实真的是这样吗。。反正笔者在学习过程中感觉自己的代码存在很多问题,很多东西以前根本没想到。。
这篇文章仅仅是XSS一个简单基础知识介绍,后面系列会把继续学习的内容分享出来,下篇文章继续学XSS额O(∩_∩)O~
推荐: