偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

從開發(fā)角度淺談CSRF攻擊及防御

安全 終端安全
CSRF可以叫做(跨站請求偽造),咱們可以這樣子理解CSRF,攻擊者可以利用你的身份你的名義去發(fā)送(請求)一段惡意的請求,從而導(dǎo)致可以利用你的賬號(名義)去--購買商品、發(fā)郵件,惡意的去消耗賬戶資源,導(dǎo)致的一些列惡意行為.CSRF可以簡單分為Get型和Post型兩種。

[[172701]]

什么是CSRF

CSRF可以叫做(跨站請求偽造),咱們可以這樣子理解CSRF,攻擊者可以利用你的身份你的名義去發(fā)送(請求)一段惡意的請求,從而導(dǎo)致可以利用你的賬號(名義)去--購買商品、發(fā)郵件,惡意的去消耗賬戶資源,導(dǎo)致的一些列惡意行為.CSRF可以簡單分為Get型和Post型兩種。

Get型CSRF:

看到這個名字,很明顯是發(fā)送GET請求導(dǎo)致的。我這里簡單的說一下:GET型的CSRF利用非常簡單,通常只要發(fā)送一段HTTP請求。簡單的說,如果一個網(wǎng)站某個地方的功能,比如(用戶修改自己郵箱)是通過GET進(jìn)行請求修改的話。

如下例:

/user.php?id=226&email=226@226.com //這里我們可以看出這個網(wǎng)址是通過get型去對用戶的郵箱進(jìn)行修改。后面&email=226@226.com 是關(guān)鍵的地方。當(dāng)我們發(fā)現(xiàn)沒有做任何處理之后,我們將可以去構(gòu)造一段代碼。

只要把它email參數(shù)后面的值進(jìn)行修改。。之后構(gòu)造一個代碼,或者直接一串URL發(fā)過去(正常人應(yīng)該不會這樣)。如下例:

/user.php?id=226&email=226@qq.com //只要這個id的用戶觸發(fā)了這URL即可成功修改。攻擊者可自行修改id,發(fā)送該id用戶也可以修改。觸發(fā)后即可成功修改到這個用戶的email。

POST型CSRF

POST型CSRF簡單來說,通過POST請求去觸發(fā)代碼造成漏洞。還是一樣,舉個例子 比如在一個教育視頻網(wǎng)站平臺。在普通用戶的眼中,點擊網(wǎng)頁->打開試看視頻->購買視頻 是一個很正常的一個流程??墒窃诠粽叩难壑锌梢运阏?,但又不正常的,當(dāng)然不正常的情況下,是在開發(fā)者安全意識不足沒有進(jìn)行處理所造成。攻擊者在購買處抓到購買時候網(wǎng)站處理購買(扣除)用戶余額的地址。

比如:/coures/user/handler/25332/buy.php //通過buy.php處理購買(購買成功)的信息,這里的25532為視頻ID

那么攻擊者現(xiàn)在構(gòu)造一個表單(form.html),如:

document.forms[0].submit(); //自動提交

構(gòu)造好form表單后,那么攻擊者將form.html上傳至一臺服務(wù)器上,將該頁面 如:/form.html

發(fā)送給受害者,只要受害者正在登陸當(dāng)前教育網(wǎng)站的時候,打開攻擊者發(fā)送的頁面,那么代碼則自動觸發(fā),自動購買了id為25332的視頻。從而導(dǎo)致受害者余額扣除,被攻擊者惡意消耗用戶余額。如果網(wǎng)站很不嚴(yán)謹(jǐn),那么只要把id改了,就可以任意的去惡意購買任何視頻。消耗受害者的財產(chǎn),從而導(dǎo)致用戶財產(chǎn)安全受影響。

CSRF的原理

發(fā)現(xiàn)漏洞可利用處->構(gòu)造(搭建)搭建代碼->發(fā)送給用戶(管理員)->觸發(fā)代碼(發(fā)送請求).........

從這個利用的一個流程中,我們可以發(fā)現(xiàn),攻擊者僅僅只是做了兩處工作.第一處是:發(fā)現(xiàn)漏洞利用處,,第二處就是構(gòu)造利用代碼以及發(fā)送至用戶(管理員)。至于利用,你會發(fā)現(xiàn)CSRF與XSS不同,XSS是攻擊者自己提交,等待結(jié)果,而CSRF呢,是由用戶(管理員)自身提交。甚至可以說攻擊者只做了構(gòu)造代碼的工作。

在開發(fā)中如何簡單防御CSRF(PHP)

其實防御CSRF有很多種 如:驗證碼、驗證Refer、以及驗證token,對特殊參數(shù)進(jìn)行加密。

但是如果使用驗證碼去避免CSRF的話,那么這樣會驗證的影響用戶的體驗,因為用戶不會每個操作都去輸入驗證碼(會很煩)。

Refer的話在特殊情況下也是不靠譜的(服務(wù)器端出的問題)。

那么目前只有token是被大多網(wǎng)站去使用的。因為可以避免用戶體驗的問題發(fā)生。同樣服務(wù)器邊問題也發(fā)生也不會很多。

那么接下來就開始介紹在PHP開發(fā)中如何去簡單的生成token,避免CSRF。我們可以通過PHP中函數(shù)(rand生成隨機數(shù)+uniqid生成一個唯一id+time時間戳)最后在講這幾個生成的值用md5加密。接下來來說說如何去生產(chǎn):

首先先開啟session會話

session_start(); //開啟session會話

然后我們?nèi)ルS機生成一段值(這個值就是我們的token值) 備注:其實這樣子生成不是最嚴(yán)謹(jǐn)?shù)?此次只是大家一起交流。大家可以去嘗試各種方式。)

$safe226 = md5(time() . uniqid() . rand(1,99999)); //輸入一個隨機數(shù)值

我們輸出看看

接下來,我們需要做的就是把生成出來的token丟進(jìn)咱們的session里面。

接下來你們應(yīng)該知道了,我們驗證的其實是我們存到session里面的token是否與用戶提交上來的token值一致。如果一致則成功,否則則失敗。我們準(zhǔn)備一個表單,用于傳遞用戶提交請求的一個token。

">

我們把token提交到test.php里去處理!

其實就是將我們丟進(jìn)session里面的值丟進(jìn)隱藏表單里面。當(dāng)用戶提交的時候一起提交過來驗證,驗證是否與session里面的token相同。

我們來感受下。

{C}

Ok,接下來我們只需要去判斷用戶傳遞過來的token值是否和session里面的值一致(這里使用簡單判斷,if(isset($_SESSION['226_token']) && isset($_POST['token'])){

if($_SESSION['226_token'] === $_POST['token']){

//這里是驗證成功后所寫代碼

echo '購買成功';

}else{

echo '請勿非法操作!判斷是否一致';

}

}else{

echo '請勿非法操作!判斷是否存在';

}

接下來,我們利用下。這里已知道結(jié)構(gòu)。所以直接構(gòu)造一個表單。

根據(jù)代碼情況 就是當(dāng)我們構(gòu)造的利用代碼,沒有傳遞token或者token不一致的時候:

這里兩個打印是在test.php里面打印 沒有去掉print_r(無視就好),當(dāng)利用時候會發(fā)現(xiàn)沒有傳遞token過去。會提示。錯誤!

接下來我們來看,完全一致的時候。會提示的是什么:

當(dāng)我們通過驗證的時候。你會發(fā)現(xiàn)已經(jīng)驗證成功。購買成功。

責(zé)任編輯:武曉燕 來源: 紅黑聯(lián)盟
相關(guān)推薦

2021-06-03 10:16:12

CSRF攻擊SpringBoot

2012-11-30 14:35:17

2012-11-30 14:54:48

2012-02-14 09:43:08

2015-05-18 13:51:08

2013-07-27 20:19:14

2010-09-30 15:20:01

2021-01-06 09:47:51

內(nèi)存Go語言

2017-05-16 10:39:02

2023-03-06 08:00:00

2021-06-30 07:25:35

開發(fā)JavaXSS

2017-06-08 19:19:10

2015-05-13 10:36:43

2024-06-28 08:00:00

端口掃描安全

2013-04-24 15:56:40

2023-11-10 09:54:32

2009-07-08 19:44:56

2021-06-07 14:06:19

Spring SecuCSRF防御

2011-11-09 10:53:54

2014-09-18 09:42:15

點贊
收藏

51CTO技術(shù)棧公眾號