久久www免费人成看片老司机_母亲4在线观看完整版 百度_波多野结衣久久_亚洲午夜成人片_天美传媒国产精品果冻

 
您現(xiàn)在的位置:首頁 ? 知識庫 ? 軟件開發(fā) 軟件開發(fā)
php web開發(fā)安全之csrf攻擊的簡單演示和防范
發(fā)布日期:2017-09-06

       csrf攻擊,即cross site request forgery跨站(域名)請求偽造,這里的forgery就是偽造的意思。網(wǎng)上有很多關于csrf的介紹,比如一位前輩的文章淺談CSRF攻擊方式,參考這篇文章簡單解釋下:csrf 攻擊能夠實現(xiàn)依賴于這樣一個簡單的事實:我們在用瀏覽器瀏覽網(wǎng)頁時通常會打開好幾個瀏覽器標簽(或窗口),假如我們登錄了一個站點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頁面可以觸發(fā)這個url地址(請求A站點的url資源)就實現(xiàn)了csrf攻擊。

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

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

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

1 <?php 2 // 這里簡便起見, 從data.json中取出數(shù)據(jù)代替請求數(shù)據(jù)庫 3 $str = file_get_contents('data.json'); 4 $data = json_decode($str, true); 5 6 // 檢查cookie和請求更改的uid, 實際應檢查數(shù)據(jù)庫中的用戶是否存在 7 empty($_COOKIE['uid']) ||empty($_GET['uid']) || $_GET['uid'] != $data['id'] ? die('非法用戶') : ''; 8 // 檢查username參數(shù) 9 $data['username'] = empty($_GET['username']) ? die('用戶名不能為空') : $_GET['username']; 10 11 // 更新數(shù)據(jù) 12 $data['username'] = $_GET['username']; 13 if(file_put_contents('data.json', json_encode($data))) { 14 echo "用戶名已更改為{$data['username']}<br>"; 15 } else { 16 die('更新失敗'); 17 }

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

1 <?php 2 // 這里用一個data.json文件保存用戶數(shù)據(jù),模擬數(shù)據(jù)庫中的數(shù)據(jù) 3 // 先初始化data.json中的數(shù)據(jù)為{"id":101,"username":"jack"}, 注意這句只讓它執(zhí)行一次, 然后把它注釋掉 4 // file_put_contents('data.json','{"id":101,"username":"jack"}'); 5 6 $data = json_decode(file_get_contents('data.json'), true); 7 8 // 這里為了簡便, 省略了用戶身份驗證的過程 9 if ($data['username']) { 10 // 設置cookie 11 setcookie('uid', $data['id'], 0); 12 echo "登錄成功, {$data['username']}<br>"; 13 } 14 ?> 15 16 <a > 17 更新用戶名為json 18 </a>

加載這個頁面如下:

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

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

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

       B站點域名為test.yang.com,它有一個頁面csrf.php,只要用戶在維持A站點會話的同時打開了這個頁面,那么B站點就可以實現(xiàn)csrf攻擊。至于為什么會打開......,其實這種情景在我們?yōu)g覽網(wǎng)頁時是很常見的,比如我在寫這篇博客時,寫著寫著感覺對csrf某個地方不懂,然后就百度了,結果百度出來好多結果,假如說有個網(wǎng)站叫csrf百科知識,這個網(wǎng)站對csrf介紹的非常詳細、非常權威,那么我很可能會點進去看,但是這個網(wǎng)站其實是個釣魚網(wǎng)站,它在某個訪問頻率很高的頁面中嵌入了我博客編輯頁面的url地址,那么它就可以實現(xiàn)對我博客的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這個頁面:

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

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

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

3,簡單防范措施

其實防范措施也比較簡單,A站點可以在get-update.php腳本中判斷請求頭的來源,如果來源不是A站點就可以截斷請求,下面在get-update.php增加些代碼:

1 <?php 2 // 檢查上一頁面是否為當前站點下的頁面 3 if (!empty($_SERVER['HTTP_REFERER'])) { 4 if (parse_url($_SERVER['HTTP_REFERER'], PHP_URL_HOST) != 'html5.yang.com') { 5 // 可以設置http錯誤碼或者指向一個無害的url地址 6 //header('HTTP/1.1 404 not found'); 7 //header('HTTP/1.1 403 forbiden'); 8 header('Location: http://html5.yang.com/favicon.ico'); 9 // 這里需要注意一定要exit, 否則腳本會接著執(zhí)行 10 exit; 11 } 12 } 13 14 $str = file_get_contents('data.json'); 15 // 代碼省略
  • 1.公司登記注冊于2003年1月27日,清遠市桑達電子網(wǎng)絡媒體有限公司
    2.公司2006年起成為清遠市政府定點協(xié)議供貨商,電子采購供貨商
    3.公司2007年被清遠市相關政府部門評為安防行業(yè)狀元
    4.公司2007年起成為長城電腦清遠如意服務站(SP368)
    5.公司2007年承建清遠市橫河路口電子警察工程,開創(chuàng)清遠電子警察先河。
  • 6.公司2007年起成為IBM合作伙伴、公司2010年底成為金蝶軟件清遠金牌代理(伙伴編號:30030013)
    7.公司組團隊參加南方都市報組織的創(chuàng)富評選,獲廣東80強。公司申請多項軟件著作權、專利權
    8.2016年起公司成為粵東西北地區(qū)為數(shù)不多的雙軟企業(yè),確立“讓軟件驅動世界,讓智能改變生活!"企業(yè)理想
    9.2016-01-29更名為廣東互動電子網(wǎng)絡媒體有限公司
    10.2021-01-13更名為廣東互動電子有限公司
  • 投資合作咨詢熱線電話:0763-3391888 3323588
  • 做一個負責任的百年企業(yè)! 天行健,君子以自強不息;地勢坤,君子以厚德載物;
    為用戶創(chuàng)造價值! 讓軟件驅動世界; 讓智能改變生活; 超越顧客期望,幫助顧客成功;
    對客戶負責,對員工負責,對企業(yè)命運負責!幫助支持公司的客戶成功;幫助忠誠于公司的員工成功!
  • 聯(lián)系電話:0763-3391888 3323588 3318977
    服務熱線:18023314222 QQ:529623964
  • 工作QQ:2501204690 商務QQ: 602045550
    投資及業(yè)務投訴QQ: 529623964
    微信:小米哥 微信號:qysed3391888
    騰訊微博:桑達網(wǎng)絡-基石與起點
  • E-MAIL:222#QYSED.CN ok3391888#163.com (請用@替換#)
在線客服
  • 系統(tǒng)集成咨詢
    點擊這里給我發(fā)消息
  • 網(wǎng)站\微信\軟件咨詢
    點擊這里給我發(fā)消息
  • 售后服務
    點擊這里給我發(fā)消息
  • 投資合作
    點擊這里給我發(fā)消息