文章出處

CSRF是Cross Site Request Forgery的縮寫,乍一看和XSS差不多的樣子,但是其原理正好相反,XSS是利用合法用戶獲取其信息,而CSRF是偽造成合法用戶發起請求。

XSS危害——session劫持中我們提到了session原理,用戶登錄后會把登錄信息存放在服務器,客戶端有一個用戶標識存在cookie中,只要用戶不關閉瀏覽器或者退出登錄,在其有效期內服務器就會把這個瀏覽器發送的請求當作當前客戶,如果這時候用戶被欺騙,使用瀏覽器打開了某些惡意網址,里面就會包含一些不是用戶希望發送的請求,服務器也會把這些請求當作是當前客戶發送的請求,這時候用戶的個人信息、資金安全、如果用戶權限高整個站點都可能會受到危害。

CSRF原理

CSRF原理很簡單,當用戶登錄以站點時用瀏覽器打開一惡意網址,就有可能遭受攻擊。有同學會奇怪了這個很難實現吧,必須同時滿足兩個條件才行。其實很簡單,比如我們使用QQ,看看QQ zone,突然蹦出個包含中獎或者問卷調查鏈接的聊天窗口(或者是。。。),這個騰訊做了防范,但是我們收到封郵件包含此內容,很多用戶會選擇去點擊

在網上找了張圖片很能說明這個過程

201371311142979

簡單小例子

在某個論壇管理頁面,管理員可以在list.php頁面執行刪除帖子操作,根據URL判斷刪除帖子的id,像這樣的一個URL

http://localhost/list.php?action=delete&id=12

當惡意用戶想管理員發送包含CSFR的郵件,騙取管理員訪問http://test.com/csrf.php,在這個惡意網頁中只要包含這樣的html語句就可以利用讓管理員在不知情的情況下刪除帖子了

<img alt="" arc="http://localhost/list.php?action=delete&id=12"/>

這個利用了img的src可以跨域請求的特點,這種情況比較少,因為一般網站不會利用get請求修改資源信息

升級

 

是不是網站利用post修改信息就安全了呢,還拿剛才例子,改成post修改的

<?php
            $action=$_POST['action'];
            $id=$_POST['id'];
            delete($action,$id);
        ?>

但是惡意網站這么寫一樣可以攻擊

<!DOCTYPE html>
<html>
  <body>
    <iframe display="none">
      <form method="post" action="http://localhost/list.php">
        <input type="hidden" name="action" value="delete">
        <input type="hidden" name="id" value="12">
                <input id="csfr" type="submit"/>
      </form>
    </iframe>

        <script type="text/javascript">
           document.getElementById('csfr').submit();
    </script>
  </body>
</html>

如何防范

 

1. 使用post,不使用get修改信息

2. 驗證碼,所有表單的提交需要驗證碼,但是貌似用起來很麻煩,所以一些關鍵的操作可以

3. 在表單中預先植入一些加密信息,驗證請求是此表單發送


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()