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

PHP開(kāi)發(fā)中csrf攻擊的簡(jiǎn)單演示和防范

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

csrf攻擊,即cross site request forgery跨站(域名)請(qǐng)求偽造,這里的forgery就是偽造的意思。網(wǎng)上有很多關(guān)于csrf的介紹,比如一位前輩的文章CSRF的攻擊方式詳解,參考這篇文章簡(jiǎn)單解釋下:csrf 攻擊能夠?qū)崿F(xiàn)依賴(lài)于這樣一個(gè)簡(jiǎn)單的事實(shí):我們?cè)谟脼g覽器瀏覽網(wǎng)頁(yè)時(shí)通常會(huì)打開(kāi)好幾個(gè)瀏覽器標(biāo)簽(或窗口),假如我們登錄了一個(gè)站點(diǎn)A,站點(diǎn)A如果是通過(guò)cookie來(lái)跟蹤用戶(hù)的會(huì)話,那么在用戶(hù)登錄了站點(diǎn)A之后,站點(diǎn)A就會(huì)在用戶(hù)的客戶(hù)端設(shè)置cookie,假如站點(diǎn)A有一個(gè)頁(yè)面siteA-page.php(url資源)被站點(diǎn)B知道了url地址,而這個(gè)頁(yè)面的地址以某種方式被嵌入到了B站點(diǎn)的一個(gè)頁(yè)面siteB-page.php中,如果這時(shí)用戶(hù)在保持A站點(diǎn)會(huì)話的同時(shí)打開(kāi)了B站點(diǎn)的siteB-page.php,那么只要siteB-page.php頁(yè)面可以觸發(fā)這個(gè)url地址(請(qǐng)求A站點(diǎn)的url資源)就實(shí)現(xiàn)了csrf攻擊。

上面的解釋很拗口,下面舉個(gè)簡(jiǎn)單的例子來(lái)演示下。

1,背景和正常的請(qǐng)求流程

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

<?php
// 這里簡(jiǎn)便起見(jiàn), 從data.json中取出數(shù)據(jù)代替請(qǐng)求數(shù)據(jù)庫(kù)
$str = file_get_contents('data.json');
$data = json_decode($str, true);

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

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

正常情況下這個(gè)頁(yè)面的鏈接是放在站點(diǎn)A下面的,比如A站點(diǎn)的csrfdemo.php頁(yè)面,用戶(hù)登錄站點(diǎn)A以后可以通過(guò)點(diǎn)擊這個(gè)鏈接來(lái)發(fā)送請(qǐng)求,比如站點(diǎn)A有一個(gè)頁(yè)面腳本,包含了這個(gè)鏈接:

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

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

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

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

加載這個(gè)頁(yè)面如下:

PHP開(kāi)發(fā)中csrf攻擊的簡(jiǎn)單演示和防范

用點(diǎn)擊頁(yè)面中的鏈接來(lái)到get-update.php頁(yè)面:

PHP開(kāi)發(fā)中csrf攻擊的簡(jiǎn)單演示和防范

上面是正常的請(qǐng)求流程,下面來(lái)看B站點(diǎn)是如何實(shí)現(xiàn)csrf攻擊的。

2,csrf攻擊的最簡(jiǎn)單實(shí)現(xiàn)

B站點(diǎn)域名為test.yang.com,它有一個(gè)頁(yè)面csrf.php,只要用戶(hù)在維持A站點(diǎn)會(huì)話的同時(shí)打開(kāi)了這個(gè)頁(yè)面,那么B站點(diǎn)就可以實(shí)現(xiàn)csrf攻擊。至于為什么會(huì)打開(kāi)......,其實(shí)這種情景在我們?yōu)g覽網(wǎng)頁(yè)時(shí)是很常見(jiàn)的,比如我在寫(xiě)這篇博客時(shí),寫(xiě)著寫(xiě)著感覺(jué)對(duì)csrf某個(gè)地方不懂,然后就百度了,結(jié)果百度出來(lái)好多結(jié)果,假如說(shuō)有個(gè)網(wǎng)站叫csrf百科知識(shí),這個(gè)網(wǎng)站對(duì)csrf介紹的非常詳細(xì)、非常權(quán)威,那么我很可能會(huì)點(diǎn)進(jìn)去看,但是這個(gè)網(wǎng)站其實(shí)是個(gè)釣魚(yú)網(wǎng)站,它在某個(gè)訪問(wèn)頻率很高的頁(yè)面中嵌入了我博客編輯頁(yè)面的url地址,那么它就可以實(shí)現(xiàn)對(duì)我博客的csrf攻擊。好了,言歸正傳,下面來(lái)看下csrf.php腳本代碼:

<?php
?>
<img src="http://html5.yang.com/csrfdemo/get-update.php?uid=101&username=jsonp">
可以看到上面的代碼沒(méi)有php代碼,只有一個(gè)img標(biāo)簽,img標(biāo)簽的src就是A站點(diǎn)的那個(gè)更新用戶(hù)名的鏈接,只不過(guò)把username改為了jsonp,訪問(wèn)站點(diǎn)B的csrf.php這個(gè)頁(yè)面:

PHP開(kāi)發(fā)中csrf攻擊的簡(jiǎn)單演示和防范

下面再來(lái)訪問(wèn)下A站點(diǎn)的csrfdemo.php頁(yè)面:

PHP開(kāi)發(fā)中csrf攻擊的簡(jiǎn)單演示和防范

可以看到用戶(hù)名被修改為了jsonp。

簡(jiǎn)單分析下:B站點(diǎn)的這個(gè)csrf.php利用了html中的img標(biāo)簽,我們都知道img標(biāo)簽有個(gè)src屬性,屬性值指向需要加載的圖片地址,當(dāng)頁(yè)面載入時(shí),加載圖片就相當(dāng)于向src指向的地址發(fā)起http請(qǐng)求,只要把圖片的地址修改為某個(gè)腳本地址,這樣自然就實(shí)現(xiàn)了最簡(jiǎn)單的csrf攻擊。如此說(shuō)來(lái),其實(shí)csrf很容易實(shí)現(xiàn),只不過(guò)大家都是“正人君子”,誰(shuí)沒(méi)事會(huì)閑著去做這種“下三濫”的事情。但是害人之心不可有,防人之心不可無(wú)。下面看下如何簡(jiǎn)單防范這種最簡(jiǎn)單的csrf攻擊。

3,簡(jiǎn)單防范措施

【網(wǎng)站聲明】本站除付費(fèi)源碼經(jīng)過(guò)測(cè)試外,其他素材未做測(cè)試,不保證完整性,網(wǎng)站上部分源碼僅限學(xué)習(xí)交流,請(qǐng)勿用于商業(yè)用途。如損害你的權(quán)益請(qǐng)聯(lián)系客服QQ:2655101040 給予處理,謝謝支持。

相關(guān)文檔推薦

適用范圍:全站任意地方均可使用 獲取當(dāng)前tags值可用:{$get.tag} 1、調(diào)用指定欄目下的內(nèi)容tags {pboot:tags scode=*,*} a href=[tags:link][tags:text]/a {/pboot:tags} 此處tags的鏈接指向所填scode分類(lèi)下列表
我們?cè)谟胮bootcms程序時(shí)候,需要在欄目頁(yè)調(diào)用當(dāng)前欄目的文章,要怎么操作呢? 調(diào)用辦法: {pboot:list num=10 scode={sort:scode} page=0} li a href=[list:link][list:title lencn=20]/a /li {/pboot:list} 列表頁(yè)調(diào)
這篇文章主要給大家介紹了關(guān)于利用PHP如何實(shí)現(xiàn)訂單的延時(shí)處理的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨
最近在學(xué)習(xí)laravel的時(shí)候發(fā)現(xiàn)了一個(gè)有趣的地方,下面和大家分享下,這篇文章主要給大家介紹了關(guān)于Laravel路由中不固定數(shù)量的參數(shù)是如何實(shí)現(xiàn)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常
本篇文章主要介紹了淺談PHP中如何實(shí)現(xiàn)Hook機(jī)制,詳細(xì)的介紹了Hook機(jī)制的原理和實(shí)現(xiàn)過(guò)程,具有一定的參考價(jià)值,有興趣的可以了解一下
以PHP+Apache服務(wù)器環(huán)境為例,給大家講解如何能夠隱藏Apache的版本號(hào)以及具體做法。
主站蜘蛛池模板: 国产成人高清 | 久热伊人 | 请别相信他免费喜剧电影在线观看 | 亚洲久草视频 | 91麻豆精品国产91久久久久久 | 成人欧美一区二区三区黑人孕妇 | 中文字幕免费在线 | 国产亚洲精品久久yy50 | 精品国产乱码久久久久久牛牛 | 国产精品久久久久久久免费观看 | 欧美日本一区 | 国产精品一区二区av | 狠狠亚洲| 亚洲最大av| 久草在线 | 国产欧美精品区一区二区三区 | 久久99视频这里只有精品 | 91精品久久 | 91国在线高清视频 | 一区二区三区不卡视频 | 欧美激情欧美激情在线五月 | 亚洲欧美中文日韩在线v日本 | 国产精品毛片无码 | 99福利视频 | av看片| 天堂一区二区三区四区 | 99亚洲精品 | 中文字幕高清av | 日韩在线观看 | 欧美视频免费在线 | 丁香婷婷成人 | 久久久久久久久久久爱 | 久久久成人免费一区二区 | 中文字幕 国产 | 欧美视频免费 | 日韩欧美国产精品一区二区三区 | 亚洲国产一区二区视频 | 久久国产一区二区三区 | 在线激情视频 | 久久国产精品99久久久久久丝袜 | 精品伊人|