人人人妻人人人妻人人人,99精品国产综合久久久久五月天 ,欧美白人最猛性XXXXX,日韩AV无码免费播放

News新聞

業(yè)界新聞動(dòng)態(tài)、技術(shù)前沿
Who are we?

您的位置:首頁(yè)      樂(lè)道系統(tǒng)FAQ      PHP開(kāi)發(fā)中csrf攻擊的簡(jiǎn)單演示和防范

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

標(biāo)簽: 發(fā)布日期:2017-05-07 00:00:00 254

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ì)話(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ì)話(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('更新失敗');
}