XSS全称Cross Site Scripting:即跨站脚本攻击
Web程序中常见的漏洞,XSS属于被动式且用于客户端的攻击方式,所以容易被忽略其危害性。其原理是攻击者向有XSS漏洞的网站中输入(传入)恶意的HTML代码,当其它用户浏览该网站时,这段HTML代码会自动执行,从而达到攻击的目的。如,盗取用户Cookie、破坏页面结构、重定向到其它网站等。
1、反射型:Reflected
2、存储型:Stored
3、DOM Based XSS
反射型跨站XSS
反射性跨站过程如下:
1、用户正常登陆
2、攻击者把恶意的URL提交给客户
3、用户查请求恶意攻击者的URL
4、服务器对攻击者的JS做出回应
5、攻击者的JS在客户浏览器执行
6、用户的浏览器向攻击者发送会话令牌
7、攻击者劫持用户会话
实例:
DVWA四种级别的代码进行分析:low,medium,high,impossible
服务器端核心代码,Low:
<?php
// Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
// Feedback for end user
$html .= '<pre>Hello ' . $_GET[ 'name' ] . '</pre>';
}
?>
输入<script>alert(/xss/)</script>,成功弹框:
实例-Medium
服务器端核心代码,Medium:
<?php
// 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
$html .= "<pre>Hello ${name}</pre>";
}
?>
输入<sc<script>ript>alert(/xss/)</script> ,成功弹框:
实例-High
输入<img src=1 οnerrοr=alert(/xss/)> ,成功弹框:
<?php
// 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
$html .= "<pre>Hello ${name}</pre>";
}
?>
实例-impossible
服务器端核心代码,impossible:
<?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
$html .= "<pre>Hello ${name}</pre>";
}
// Generate Anti-CSRF token
generateSessionToken();
?>
存储型跨站
存储型跨站过程如下
1、用户正常浏览信息
2、通过发帖向服务器发送存在恶意代码的帖子
3、用户查看发帖网页,查看贴子内容
4、服务器将恶意的代码发送给用户
5、客户端浏览器执行恶意代码
实例:
DVWA四种级别的代码进行分析:low,medium,high,impossible
服务器端核心代码,Low:
输入<script>alert(/xss/)</script>,成功弹框:
DOM XSS
DOM,全称Document Object Model,是一个平台和语言都中立的接口,可以使程序和脚本能够动态访问和更新文档的内容、结构以及样式
DOM型XSS其实是一种特殊类型的反射型XSS,它是基于DOM文档对象模型的一种漏洞。
可能触发DOM型XSS的属性:
document.referer属性
window.name属性
location属性
innerHTML属性
documen.write属性
······
跨站攻击的危害
•劫持用户的cookie信息,进行身份盗用;
•重定向用户到其它的网页或网站,进行钓鱼欺骗;
•在网站上挂木马程序;
•XSS蠕虫:XSS 蠕虫可以用来打广告、刷流量、挂马、恶作剧、破坏网上数据、实施DoS攻击等;
•与其它漏洞结合,修改系统设置,查看系统文件,执行系统命令等
•…….
防范措施
需作转义的字符 | 字符实体编码 |
& | & |
< | < |
> | > |
" | " |
' | ' |
/ | / |
程序开发者:
Ø对用户提交内容进行合法性校验
Ø对用户提交内容进行转义处理
Ø对用户输入的长度进行限制
普通用户:
Ø不要轻易访问别人给你的长链接,它可能包含了转码后的恶意HTML代码。
Ø禁止浏览器运行JavaScript和ActiveX代码