Web安全與防護(hù) (微課版) 課件 項(xiàng)目五 安全的個(gè)人信息修改:任務(wù)一 博客系統(tǒng)的功能實(shí)現(xiàn)、任務(wù)二 跨站請(qǐng)求偽造攻擊的原理、任務(wù)三四 跨站請(qǐng)求偽造漏洞修復(fù)與防范_第1頁(yè)
Web安全與防護(hù) (微課版) 課件 項(xiàng)目五 安全的個(gè)人信息修改:任務(wù)一 博客系統(tǒng)的功能實(shí)現(xiàn)、任務(wù)二 跨站請(qǐng)求偽造攻擊的原理、任務(wù)三四 跨站請(qǐng)求偽造漏洞修復(fù)與防范_第2頁(yè)
Web安全與防護(hù) (微課版) 課件 項(xiàng)目五 安全的個(gè)人信息修改:任務(wù)一 博客系統(tǒng)的功能實(shí)現(xiàn)、任務(wù)二 跨站請(qǐng)求偽造攻擊的原理、任務(wù)三四 跨站請(qǐng)求偽造漏洞修復(fù)與防范_第3頁(yè)
Web安全與防護(hù) (微課版) 課件 項(xiàng)目五 安全的個(gè)人信息修改:任務(wù)一 博客系統(tǒng)的功能實(shí)現(xiàn)、任務(wù)二 跨站請(qǐng)求偽造攻擊的原理、任務(wù)三四 跨站請(qǐng)求偽造漏洞修復(fù)與防范_第4頁(yè)
Web安全與防護(hù) (微課版) 課件 項(xiàng)目五 安全的個(gè)人信息修改:任務(wù)一 博客系統(tǒng)的功能實(shí)現(xiàn)、任務(wù)二 跨站請(qǐng)求偽造攻擊的原理、任務(wù)三四 跨站請(qǐng)求偽造漏洞修復(fù)與防范_第5頁(yè)
已閱讀5頁(yè),還剩33頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

項(xiàng)目五

安全的個(gè)人信息修改Web安全與防護(hù)本任務(wù)要點(diǎn)學(xué)習(xí)目標(biāo)利用PHP實(shí)現(xiàn)賬戶密碼修改功能熟悉數(shù)據(jù)庫(kù)增刪查改的操作方法熟悉PHP數(shù)據(jù)庫(kù)交互的功能編寫(xiě)方法任務(wù)一

博客系統(tǒng)的功能實(shí)現(xiàn)目錄CONTENTS01/創(chuàng)建表單02/處理表單提交創(chuàng)建表單01<form

method="post"

action="password_change.php">

<label

for="new_password">新密碼</label>

<input

type="password"

name="new_password"

id="new_password"

required>

<br>

<label

for="confirm_password">確認(rèn)新密碼</label>

<input

type="password"

name="confirm_password"

id="confirm_password"

required>

<br>

<button

type="submit">修改口令</button></form>在前端頁(yè)面上添加一個(gè)口令修改表單,其中包括原口令、新密碼和確認(rèn)新密碼等字段,用戶可以在表單中輸入相關(guān)信息。處理表單提交02<?phpsession_start();//

驗(yàn)證用戶是否已登錄if

(!isset($_SESSION['user_id']))

{

header('Location:

login.php');

exit();}

//

處理表單提交if

(isset($_POST['new_password'])

&&

isset($_POST['confirm_password']))

{

$new_password

=

$_POST['new_password'];

$confirm_password

=

$_POST['confirm_password'];//

連接數(shù)據(jù)庫(kù)$db

=

new

PDO('mysql:host=localhost;dbname=blog',

'username',

'password');//

檢查新密碼是否匹配確認(rèn)密碼if

($new_password

===

$confirm_password)

{

//

更新用戶的密碼

$stmt

=

$db->prepare('UPDATE

users

SET

password

=

?

WHERE

id

=

?');

$stmt->execute([password_hash($new_password,

PASSWORD_DEFAULT),

$_SESSION['user_id']]);

echo

'密碼已更新!';}

else

{

echo

'新密碼與確認(rèn)密碼不匹配。';}?>在后端服務(wù)器端,接收前端發(fā)送的口令修改請(qǐng)求,并對(duì)用戶提交的表單數(shù)據(jù)進(jìn)行驗(yàn)證,比如檢查新密碼和確認(rèn)新密碼是否一致。如果數(shù)據(jù)驗(yàn)證失敗,則返回錯(cuò)誤提示;否則,更新用戶的密碼信息。再將用戶輸入的新密碼進(jìn)行加密處理,然后更新到數(shù)據(jù)庫(kù)中,用于下次用戶登錄時(shí)進(jìn)行驗(yàn)證。課堂實(shí)踐一、任務(wù)名稱(chēng):完成博客系統(tǒng)賬戶密碼修改功能二、任務(wù)內(nèi)容:使用PHP開(kāi)發(fā)語(yǔ)言,根據(jù)老師講授的開(kāi)發(fā)思路開(kāi)發(fā)博客系統(tǒng)的賬戶密碼修改功能。三、工具需求:瀏覽器、Vscode、Apache、MySQL、PHP四、任務(wù)要求:完成實(shí)踐練習(xí)后,由老師檢查完成情況。課堂思考一、修改密碼的功能如何鑒別操作者的身份?二、鑒別操作者的身份后攻擊者是否還能操控修改密碼的過(guò)程?課后拓展:跨站請(qǐng)求偽造請(qǐng)同學(xué)們通過(guò)互聯(lián)網(wǎng)檢索跨站請(qǐng)求偽造的相關(guān)資料,學(xué)習(xí)并研究跨站請(qǐng)求偽造的原理,下節(jié)課會(huì)抽點(diǎn)部分同學(xué)上來(lái)給大家講解自己研究的成果。THANK

YOUToBeContinued項(xiàng)目五

安全的個(gè)人信息修改Web安全與防護(hù)本任務(wù)要點(diǎn)學(xué)習(xí)目標(biāo)理解跨站請(qǐng)求偽造攻擊的原理熟悉跨站請(qǐng)求偽造攻擊的步驟熟悉跨站請(qǐng)求偽造攻擊的特點(diǎn)任務(wù)二

跨站請(qǐng)求偽造攻擊的原理目錄CONTENTS01/CSRF攻擊步驟02/CSRF的特點(diǎn)CSRF攻擊步驟01(1)攻擊者創(chuàng)建一個(gè)偽造的請(qǐng)求,該請(qǐng)求在運(yùn)行時(shí)會(huì)將10,000美元從特定銀行轉(zhuǎn)入攻擊者的賬戶;(2)攻擊者將偽造的請(qǐng)求嵌入到超鏈接中,以批量電子郵件的形式發(fā)送出去,并將其嵌入到網(wǎng)站中;(3)受害者點(diǎn)擊攻擊者放置的電子郵件或網(wǎng)站鏈接,導(dǎo)致受害者向銀行提出轉(zhuǎn)賬10,000美元的請(qǐng)求;(4)銀行服務(wù)器接收到請(qǐng)求,并且由于受害者得到了適當(dāng)?shù)氖跈?quán),它將請(qǐng)求視為合法并轉(zhuǎn)移資金。CSRF漏洞成因通常是因?yàn)檎军c(diǎn)Cookie沒(méi)有過(guò)期,網(wǎng)站沒(méi)有沒(méi)有進(jìn)行進(jìn)一步的驗(yàn)證用戶信息,用戶在沒(méi)有任何安全意識(shí)的情況下訪問(wèn)了惡意站點(diǎn)。CSRF的特點(diǎn)02CSRF通常是跨域的,因?yàn)橥庥蛲ǔ8菀妆还粽哒瓶?。但是如果本域下有容易被利用的功能,比如可以發(fā)圖和鏈接的論壇和評(píng)論區(qū),攻擊可以直接在本域下進(jìn)行,而且這種攻擊更加危險(xiǎn)。(1)攻擊一般發(fā)起在第三方網(wǎng)站,而不是被攻擊的網(wǎng)站。被攻擊的網(wǎng)站無(wú)法防止攻擊發(fā)生。(2)攻擊利用受害者在被攻擊網(wǎng)站的登錄憑證,冒充受害者提交操作;而不是直接竊取數(shù)據(jù)。(3)整個(gè)過(guò)程攻擊者并不能獲取到受害者的登錄憑證,僅僅是“冒用”。(4)跨站請(qǐng)求可以用各種方式:圖片URL、超鏈接、CORS、Form提交等等。部分請(qǐng)求方式可以直接嵌入在第三方論壇、文章中,難以進(jìn)行追蹤。課堂實(shí)踐一、任務(wù)名稱(chēng):理解跨站請(qǐng)求偽造攻擊的原理與特點(diǎn)二、任務(wù)內(nèi)容:回顧上一節(jié)課的代碼是否存在問(wèn)題三、工具需求:瀏覽器、Vscode、Apache、MySQL、PHP四、任務(wù)要求:小組討論后輪流進(jìn)行發(fā)言,老師進(jìn)行點(diǎn)評(píng)。課堂思考一、跨站請(qǐng)求偽造屬于前端安全問(wèn)題還是后端安全問(wèn)題?二、跨站請(qǐng)求偽造能造成什么樣的危害?三、跨站請(qǐng)求偽造攻擊如何防范?課后拓展:CSRF檢測(cè)修復(fù)請(qǐng)同學(xué)們通過(guò)互聯(lián)網(wǎng)檢索跨站請(qǐng)求偽造攻擊的檢測(cè)和修復(fù)手段,學(xué)習(xí)并研究跨站請(qǐng)求偽造攻擊的檢測(cè)和修復(fù)手段,下節(jié)課會(huì)抽點(diǎn)部分同學(xué)上來(lái)給大家講解自己研究的成果。THANK

YOUToBeContinued項(xiàng)目五

安全的個(gè)人信息修改Web安全與防護(hù)本任務(wù)要點(diǎn)學(xué)習(xí)目標(biāo)檢測(cè)和驗(yàn)證跨站請(qǐng)求偽造漏洞熟悉跨站請(qǐng)求偽造漏洞的檢測(cè)方法熟悉跨站請(qǐng)求偽造漏洞的利用方法任務(wù)三

跨站請(qǐng)求偽造漏洞檢測(cè)與驗(yàn)證目錄CONTENTS01/跨站請(qǐng)求偽造漏洞檢測(cè)與驗(yàn)證跨站請(qǐng)求偽造漏洞檢測(cè)與驗(yàn)證01從任務(wù)二可知,CSRF攻擊是攻擊者借助受害者的cookie騙取服務(wù)器的信任,但是攻擊者并不能拿到cookie,也看不到cookie的內(nèi)容。另外,對(duì)于服務(wù)器返回的結(jié)果,由于瀏覽器同源策略的限制,攻擊者也無(wú)法進(jìn)行解析。因此,攻擊者無(wú)法從返回的結(jié)果中得到任何東西,他所能做的就是給服務(wù)器發(fā)送請(qǐng)求,以執(zhí)行請(qǐng)求中所描述的命令,在服務(wù)器端直接改變數(shù)據(jù)的值,而非竊取服務(wù)器中的數(shù)據(jù)。在本書(shū)第2.1章節(jié)開(kāi)發(fā)的代碼中,代碼僅僅驗(yàn)證用戶是否已登錄,若登記即可以修改口令,也沒(méi)有驗(yàn)證原口令,所有這里明顯存在CSRF漏洞項(xiàng)目五

安全的個(gè)人信息修改Web安全與防護(hù)本任務(wù)要點(diǎn)學(xué)習(xí)目標(biāo)對(duì)跨站請(qǐng)求偽造漏洞進(jìn)行修復(fù)和防范熟悉跨站請(qǐng)求偽造漏洞的修復(fù)防范方法任務(wù)四

跨站請(qǐng)求偽造漏洞修復(fù)與防范目錄CONTENTS01/同源檢測(cè)02/Samesite

Cookie03/CSRF

Token04/特定情況下的必要驗(yàn)證同源檢測(cè)01既然CSRF大多來(lái)自第三方網(wǎng)站,那么我們就直接禁止外域(或者不受信任的域名)對(duì)我們發(fā)起請(qǐng)求。在HTTP協(xié)議中,每一個(gè)異步請(qǐng)求都會(huì)攜帶兩個(gè)Header,用于標(biāo)記來(lái)源域名:OriginHeader和RefererHeader。通過(guò)Header的驗(yàn)證,我們可以知道發(fā)起請(qǐng)求的來(lái)源域名,這些來(lái)源域名可能是網(wǎng)站本域,或者子域名,或者有授權(quán)的第三方域名,又或者來(lái)自不可信的未知域名。在Web應(yīng)用中檢查請(qǐng)求頭中的Header字段,確保請(qǐng)求來(lái)自合法的來(lái)源。但是,這種方式并不是完全可靠的,因?yàn)楣粽呖梢酝ㄟ^(guò)篡改HTTP請(qǐng)求頭的方式繞過(guò)Header檢查。Samesite

Cookie02為了從源頭上解決CSRF攻擊,Google起草了一份草案來(lái)改進(jìn)HTTP協(xié)議,那就是為Set-Cookie響應(yīng)頭新增Samesite屬性,它用來(lái)標(biāo)明這個(gè)Cookie是個(gè)“同站Cookie”,同站Cookie只能作為第一方Cookie,不能作為第三方Cookie,Samesite有兩個(gè)屬性值,分別是Strict和Lax。Strict最為嚴(yán)格,完全禁止第三方Cookie,跨站點(diǎn)時(shí),任何情況下都不會(huì)發(fā)送Cookie。換言之,只有當(dāng)前網(wǎng)頁(yè)的URL與請(qǐng)求目標(biāo)一致,才會(huì)帶上Cookie

:Set-Cookie:CookieName=CookieValue;SameSite=Strict;

這個(gè)規(guī)則過(guò)于嚴(yán)格,可能造成非常不好的用戶體驗(yàn)。比如,當(dāng)前網(wǎng)頁(yè)有一個(gè)GitHub鏈接,用戶點(diǎn)擊跳轉(zhuǎn)就不會(huì)帶有GitHub的Cookie,跳轉(zhuǎn)過(guò)去總是未登陸狀態(tài)。Lax規(guī)則稍稍放寬,大多數(shù)情況也是不發(fā)送第三方Cookie,但是導(dǎo)航到目標(biāo)網(wǎng)址的Get請(qǐng)求除外。

Set-Cookie:CookieName=CookieValue;SameSite=Lax;

CSRF

Token03<?php//

生成CSRF

Tokensession_start();if

(!isset($_SESSION['csrf_token']))

{

$_SESSION['csrf_token']

=

md5(uniqid(mt_rand(),

true));}$csrf_token

=

$_SESSION['csrf_token'];//

驗(yàn)證CSRF

Tokenif

($_SERVER['REQUEST_METHOD']

===

'POST')

{

if

(!isset($_POST['csrf_token'])

||

$_POST['csrf_token']

!==

$csrf_token)

{

die('Invalid

CSRF

token');

}

//

處理表單請(qǐng)求}?><!--

表單中包含CSRF

Token

--><form

action="submit.php"

method="post">

<input

type="hidden"

name="csrf_token"

value="<?php

echo

$csrf_token;

?>">

<!--

其他表單字段

-->

<input

type="submit"

value="提交"></form>在應(yīng)用程序中使用CSRFToken可以有效地防止CSRF攻擊。CSRFToken是在服務(wù)器端生成的一段隨機(jī)字符串,該字符串與用戶會(huì)話相關(guān)聯(lián),作為表單隱藏字段或請(qǐng)求參數(shù)的一部分,一起發(fā)送給客戶端瀏覽器。當(dāng)客戶端提交表單或請(qǐng)求時(shí),服務(wù)器端會(huì)驗(yàn)證請(qǐng)求中的Token是否與用戶會(huì)話中的Token一致,如果一致則認(rèn)為請(qǐng)求是合法的,否則拒絕請(qǐng)求。這樣,即使攻擊者成功偽造了請(qǐng)求,也無(wú)法獲取有效的令牌信息,從而無(wú)法完成攻擊。特定情況下的必要驗(yàn)證04<?phpsession_start();

//

驗(yàn)證用戶是否已登錄if

(!isset($_SESSION['user_id']))

{header('Location:

login.php');exit();}

//

處理表單提交if

(isset($_POST['old_password'])

&&

isset($_POST['new_password'])

&&

isset($_POST['confirm_password']))

{$old_password

=

$_POST['old_password'];$new_password

=

$_POST['new_password'];$confirm_password

=

$_POST['confirm_password'];

//

連接數(shù)據(jù)庫(kù)$db

=

new

PDO('mysql:host=localhost;dbname=blog',

'username',

'password');

//

查詢(xún)用戶的密碼$stmt

=

$db->prepare('SELECT

password

FROM

users

WHERE

id

=

?');$stmt->execute([$_SESSION['user_id']]);$user

=

$stmt->fetch();

//

檢查舊密碼是否正確if

(password_verify($old_password,

$user['password']))

{//

檢查新密碼是否匹配確認(rèn)密碼if

($new_password

===

$confirm_password)

{//

更新用戶的密碼$stmt

=

$db->prepare('UPDATE

users

SET

password

=

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論