久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

PHP開發中csrf攻擊的簡單演示和防范

CSRF的全名為Cross-site request forgery,它的中文名為 跨站請求偽造(偽造跨站請求【這樣讀順口一點】)CSRF是一種夾持用戶在已經登陸的web應用程序上執行非本意的操作的攻擊方式。相比于

csrf攻擊,即cross site request forgery跨站(域名)請求偽造,這里的forgery就是偽造的意思。網上有很多關于csrf的介紹,比如一位前輩的文章CSRF的攻擊方式詳解,參考這篇文章簡單解釋下:csrf 攻擊能夠實現依賴于這樣一個簡單的事實:我們在用瀏覽器瀏覽網頁時通常會打開好幾個瀏覽器標簽(或窗口),假如我們登錄了一個站點A,站點A如果是通過cookie來跟蹤用戶的會話,那么在用戶登錄了站點A之后,站點A就會在用戶的客戶端設置cookie,假如站點A有一個頁面siteA-page.php(url資源)被站點B知道了url地址,而這個頁面的地址以某種方式被嵌入到了B站點的一個頁面siteB-page.php中,如果這時用戶在保持A站點會話的同時打開了B站點的siteB-page.php,那么只要siteB-page.php頁面可以觸發這個url地址(請求A站點的url資源)就實現了csrf攻擊。

上面的解釋很拗口,下面舉個簡單的例子來演示下。

1,背景和正常的請求流程

A站點域名為html5.yang.com,它有一個/get-update.php?uid=uid&username=username地址,可以看到這個地址可以通過get方法來傳遞一些參數,假如這個頁面的邏輯是:它通過判斷uid是否合法來更新username,這個頁面腳本如下:

<?php
// 這里簡便起見, 從data.json中取出數據代替請求數據庫
$str = file_get_contents('data.json');
$data = json_decode($str, true);

// 檢查cookie和請求更改的uid, 實際應檢查數據庫中的用戶是否存在
empty($_COOKIE['uid']) ||empty($_GET['uid']) || $_GET['uid'] != $data['id'] ? die('非法用戶') : '';
// 檢查username參數
$data['username'] = empty($_GET['username']) ? die('用戶名不能為空') : $_GET['username'];

// 更新數據
$data['username'] = $_GET['username'];
if(file_put_contents('data.json', json_encode($data))) {
  echo "用戶名已更改為{$data['username']}<br>";
} else {
  die('更新失敗');
}

正常情況下這個頁面的鏈接是放在站點A下面的,比如A站點的csrfdemo.php頁面,用戶登錄站點A以后可以通過點擊這個鏈接來發送請求,比如站點A有一個頁面腳本,包含了這個鏈接:

<?php
// 這里用一個data.json文件保存用戶數據,模擬數據庫中的數據
// 先初始化data.json中的數據為{"id":101,"username":"jack"}, 注意這句只讓它執行一次, 然后把它注釋掉
// file_put_contents('data.json','{"id":101,"username":"jack"}');

$data = json_decode(file_get_contents('data.json'), true);

// 這里為了簡便, 省略了用戶身份驗證的過程
if ($data['username']) {
  // 設置cookie
  setcookie('uid', $data['id'], 0);
  echo "登錄成功, {$data['username']}<br>";
}
?>

 <a  rel="external nofollow" >
  更新用戶名為json
 </a>

加載這個頁面如下:

PHP開發中csrf攻擊的簡單演示和防范

用點擊頁面中的鏈接來到get-update.php頁面:

PHP開發中csrf攻擊的簡單演示和防范

上面是正常的請求流程,下面來看B站點是如何實現csrf攻擊的。

2,csrf攻擊的最簡單實現

B站點域名為test.yang.com,它有一個頁面csrf.php,只要用戶在維持A站點會話的同時打開了這個頁面,那么B站點就可以實現csrf攻擊。至于為什么會打開......,其實這種情景在我們瀏覽網頁時是很常見的,比如我在寫這篇博客時,寫著寫著感覺對csrf某個地方不懂,然后就百度了,結果百度出來好多結果,假如說有個網站叫csrf百科知識,這個網站對csrf介紹的非常詳細、非常權威,那么我很可能會點進去看,但是這個網站其實是個釣魚網站,它在某個訪問頻率很高的頁面中嵌入了我博客編輯頁面的url地址,那么它就可以實現對我博客的csrf攻擊。好了,言歸正傳,下面來看下csrf.php腳本代碼:

<?php
?>
<img src="http://html5.yang.com/csrfdemo/get-update.php?uid=101&username=jsonp">
可以看到上面的代碼沒有php代碼,只有一個img標簽,img標簽的src就是A站點的那個更新用戶名的鏈接,只不過把username改為了jsonp,訪問站點B的csrf.php這個頁面:

PHP開發中csrf攻擊的簡單演示和防范

下面再來訪問下A站點的csrfdemo.php頁面:

PHP開發中csrf攻擊的簡單演示和防范

可以看到用戶名被修改為了jsonp。

簡單分析下:B站點的這個csrf.php利用了html中的img標簽,我們都知道img標簽有個src屬性,屬性值指向需要加載的圖片地址,當頁面載入時,加載圖片就相當于向src指向的地址發起http請求,只要把圖片的地址修改為某個腳本地址,這樣自然就實現了最簡單的csrf攻擊。如此說來,其實csrf很容易實現,只不過大家都是“正人君子”,誰沒事會閑著去做這種“下三濫”的事情。但是害人之心不可有,防人之心不可無。下面看下如何簡單防范這種最簡單的csrf攻擊。

3,簡單防范措施

【網站聲明】本站除付費源碼經過測試外,其他素材未做測試,不保證完整性,網站上部分源碼僅限學習交流,請勿用于商業用途。如損害你的權益請聯系客服QQ:2655101040 給予處理,謝謝支持。

相關文檔推薦

適用范圍:全站任意地方均可使用 獲取當前tags值可用:{$get.tag} 1、調用指定欄目下的內容tags {pboot:tags scode=*,*} a href=[tags:link][tags:text]/a {/pboot:tags} 此處tags的鏈接指向所填scode分類下列表
我們在用pbootcms程序時候,需要在欄目頁調用當前欄目的文章,要怎么操作呢? 調用辦法: {pboot:list num=10 scode={sort:scode} page=0} li a href=[list:link][list:title lencn=20]/a /li {/pboot:list} 列表頁調
這篇文章主要給大家介紹了關于利用PHP如何實現訂單的延時處理的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨
最近在學習laravel的時候發現了一個有趣的地方,下面和大家分享下,這篇文章主要給大家介紹了關于Laravel路由中不固定數量的參數是如何實現的相關資料,文中通過示例代碼介紹的非常
本篇文章主要介紹了淺談PHP中如何實現Hook機制,詳細的介紹了Hook機制的原理和實現過程,具有一定的參考價值,有興趣的可以了解一下
以PHP+Apache服務器環境為例,給大家講解如何能夠隱藏Apache的版本號以及具體做法。
主站蜘蛛池模板: 免费九九视频 | 国产成人久久精品一区二区三区 | 日韩三级视频 | 97伦理最新伦理 | 免费在线观看一区二区三区 | 欧美日韩综合精品 | 欧美日韩视频在线 | 日韩在线电影 | 日本三级电影在线观看视频 | 久久久久久久久久久高潮一区二区 | www精品美女久久久tv | 91久久精品一区二区二区 | 国产日韩欧美综合 | 国产成人自拍av | 九一视频在线播放 | 欧美日韩国产一区二区 | 欧美色综合一区二区三区 | 亚洲成av人影片在线观看 | 美女视频h | 国产精品久久久久久久久久免费 | 日韩一区欧美一区 | 欧美一区免费 | 狠狠躁天天躁夜夜躁婷婷老牛影视 | 中文字幕在线播放第一页 | 特级丰满少妇一级aaaa爱毛片 | 国产精品99精品久久免费 | 日日摸日日碰夜夜爽亚洲精品蜜乳 | 久久一视频| 日日摸日日碰夜夜爽2015电影 | 在线观看国产91 | 日日日视频 | 福利视频一区二区 | 欧美性猛交一区二区三区精品 | 日韩成人中文字幕 | 欧美精品影院 | 人人草人人干 | 久久久久亚洲 | 国产高清精品在线 | 欧美一二三四成人免费视频 | 综合久久综合久久 | 成人福利视频 |