Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Serangan balas, tukar kekalahan kepada kemenangan: Rahsia serangan balas pemalsuan permintaan silang tapak (CSRF) PHP

Serangan balas, tukar kekalahan kepada kemenangan: Rahsia serangan balas pemalsuan permintaan silang tapak (CSRF) PHP

PHPz
PHPzke hadapan
2024-02-25 16:07:201192semak imbas

editor php Strawberry mendedahkan kepada anda rahsia untuk mencegah pemalsuan permintaan merentas tapak PHP (CSRF). Serangan CSRF ialah ancaman keselamatan rangkaian biasa, tetapi melalui beberapa langkah pencegahan yang mudah dan berkesan, kita boleh menukar kekalahan kepada kemenangan dan melindungi keselamatan tapak web dan pengguna. Artikel ini akan memperkenalkan prinsip dan bahaya serangan CSRF, dan cara menggunakan pengesahan token, Kuki SameSite dan teknologi lain untuk mencegah serangan sedemikian dengan berkesan dan menjadikan tapak web anda lebih selamat dan boleh dipercayai.

Token CSRF ialah rentetan rawak yang digunakan untuk mengesahkan bahawa permintaan datang daripada sumber yang sah. Anda boleh melaksanakan perlindungan CSRF dengan menyimpan token CSRF dalam sesi pengguna dan menyertakan token dengan setiap permintaan. Apabila pelayan menerima permintaan, ia membandingkan token dalam permintaan dengan token yang disimpan dalam sesi. Jika tiada padanan, pelayan menolak permintaan.

<?PHP
// 生成 CSRF 令牌
$csrfToken = bin2hex(random_bytes(32));

// 将 CSRF 令牌存储在用户的会话中
$_SESSioN["csrfToken"] = $csrfToken;

// 将 CSRF 令牌包含在每个请求中
<fORM action="submit.php" method="post">
<input type="hidden" name="csrfToken" value="<?php echo $csrfToken; ?>">
<input type="submit" value="Submit">
</form>

Sahkan sumber permintaan

Anda boleh menghalang serangan CSRF dengan mengesahkan asal permintaan. Anda boleh melakukan ini dengan menyemak pengepala Http Origin permintaan. Jika pengepala Asal permintaan bukan URL aplikasi anda, anda harus menolak permintaan tersebut.

<?php
// 检查请求的 HTTP 来源头
$referer = $_SERVER["HTTP_REFERER"];
if (strpos($referer, "https://example.com") !== 0) {
// 请求不是来自您的应用程序
header("HTTP/1.1 403 Forbidden");
exit;
}

Gunakan pengepala keselamatan

Anda boleh menghalang serangan CSRF dengan menggunakan pengepala Security. Pengepala keselamatan memberitahu pelayar cara berkelakuan untuk membantu mencegah serangan CSRF. Anda boleh menggunakan pengepala keselamatan berikut:

  • Content-Security-Policy: Pengepala ini boleh mengehadkan sumber yang boleh dimuatkan oleh penyemak imbas.
  • X-Frame-Options: Pengepala ini menghalang apl anda daripada dimuatkan dalam tapak web lain.
  • X-XSS-Protection: Pengepala ini boleh membantu menghalang serangan skrip silang tapak (XSS).
<?php
// 设置安全标头
header("Content-Security-Policy: default-src "self";");
header("X-Frame-Options: SAMEORIGIN");
header("X-XSS-Protection: 1; mode=block");

Hadkan skop operasi sensitif

Anda boleh menghalang serangan CSRF dengan mengehadkan skop operasi sensitif. Anda boleh melakukan ini dengan mengehadkan tindakan sensitif kepada halaman yang hanya boleh diakses oleh pengguna yang disahkan. Anda juga boleh mencapai ini dengan meminta pengguna memasukkan kata laluan sebelum melakukan tindakan sensitif.

<?php
// 将敏感操作限制在经过身份验证的用户才能访问的页面
if (!isset($_SESSION["authenticated"])) {
// 用户未经身份验证
header("HTTP/1.1 403 Forbidden");
exit;
}

// 要求用户在执行敏感操作之前输入密码
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (!isset($_POST["passWord"]) || $_POST["password"] != "secret") {
// 密码不正确
header("HTTP/1.1 403 Forbidden");
exit;
}
}

Kesimpulan

Dengan menggunakan teknik di atas, anda boleh menghalang serangan CSRF dan melindungi aplikasi PHP anda.

Atas ialah kandungan terperinci Serangan balas, tukar kekalahan kepada kemenangan: Rahsia serangan balas pemalsuan permintaan silang tapak (CSRF) PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:lsjlt.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam