欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

csrf和php

<四川話>棕熊板磚,我來講講PHP里面經(jīng)常用到的CSRF攻擊,CSRF是Cross-Site Request Forgery,中文叫跨站請(qǐng)求偽造。假設(shè)小明登錄了一個(gè)網(wǎng)站,然后他在這個(gè)網(wǎng)站內(nèi)切換不同的頁面時(shí),突然跳轉(zhuǎn)到另一個(gè)網(wǎng)站,在不知不覺中,這第二個(gè)網(wǎng)站就發(fā)出了對(duì)小明原本訪問的網(wǎng)站的請(qǐng)求。這個(gè)過程就被稱為CSRF攻擊。攻擊者可以通過這種方式模擬用戶在另外網(wǎng)站的請(qǐng)求。因此,如果您是PHP程序員,必須了解如何避免CSRF攻擊,這是保護(hù)您網(wǎng)站安全的一部分。

如何避免呢?首先,我們有一些原則。第一,不要給游客任何提權(quán)的機(jī)會(huì)。第二,不要惡意限制游客使用網(wǎng)站上的功能。我們來看下面這個(gè)例子:

這個(gè)表單提交會(huì)請(qǐng)求example.com這個(gè)網(wǎng)站的一個(gè)API接口,傳遞了一個(gè)參數(shù)email。這就是一個(gè)極為簡單且典型的跨域請(qǐng)求。假設(shè)你已經(jīng)登錄到example.com,并在這個(gè)網(wǎng)站上已經(jīng)有了一些朋友了,那么你將要把這個(gè)新的朋友添加到該網(wǎng)站。然而,這個(gè)時(shí)候你訪問了一個(gè)帶有惡意代碼的第三方網(wǎng)站,從而使其迫使產(chǎn)生上面這個(gè)請(qǐng)求。

那么該怎么辦呢?方法之一就是給表單添加token。Token是一個(gè)在服務(wù)器上生成的隨機(jī)字符串,用于驗(yàn)證某個(gè)用戶是否有權(quán)請(qǐng)求API或操作網(wǎng)站上的某個(gè)動(dòng)作。重要的是,這個(gè)token必須和表單一同發(fā)送到服務(wù)器中,服務(wù)器將進(jìn)行驗(yàn)證后才允許請(qǐng)求執(zhí)行。在PHP中,可以使用內(nèi)置函數(shù)uniqid()生成一個(gè)唯一的token。例如:

<?php
session_start();
if (! isset($_SESSION['csrf_token'])) {
$_SESSION['csrf_token'] = uniqid();
}
?>

此片段生成一個(gè)唯一的token值,并將其存儲(chǔ)在會(huì)話中。接下來,我們將在表單中添加這個(gè)token值:

<form action="http://example.com/api/add_friend" method="post"><input type="hidden" name="email" value="victim@example.com"><input type="hidden" name="csrf_token" value=""><input type="submit" value="Add Friend"></form>

這段代碼將會(huì)生成一個(gè)類似下面這樣的隱藏input,以及我們的輸入email字段:

<input type="hidden" name="csrf_token" value="our_token_value"><input type="hidden" name="email" value="victim@example.com">

最后,請(qǐng)注意,這個(gè)token只能一個(gè)請(qǐng)求中有效。每當(dāng)我們提交一個(gè)請(qǐng)求時(shí),都應(yīng)當(dāng)生成一個(gè)新的token。所以我們通常把提交表單的邏輯提取到一個(gè)單獨(dú)的文件中,以便我們可以在每個(gè)請(qǐng)求之后生成新的token值。例如:

<form action="submit.php" method="post"><input type="hidden" name="csrf_token" value=""><input type="submit" value="Submit"></form>

我們的PHP腳本將是這樣的:

<?php
session_start();
if ($_POST['csrf_token'] !== $_SESSION['csrf_token']) {
header('HTTP/1.0 403 Forbidden');
echo 'CSRF Token Validation Failed.';
exit;
}
// 繼續(xù)處理表單提交
?>

你已經(jīng)看到了,PHP中避免CSRF攻擊的辦法相對(duì)簡單,但很有效。遵循一個(gè)基規(guī)則:不接受來自站外的參數(shù)。可以使用$_SESSION等變量,該方法可以在程序中實(shí)現(xiàn)。總之,在我們的服務(wù)器端進(jìn)行一些簡單地查找和替換,以確保您的站點(diǎn)不可能成為數(shù)據(jù)盜竊的對(duì)象。

下一篇css php