Bagaimana untuk melindungi fungsi PHP daripada serangan CSRF?

WBOY
Lepaskan: 2024-05-01 14:39:01
asal
364 orang telah melayarinya

Abstrak: Serangan CSRF dalam fungsi PHP boleh dipertahankan dengan menggunakan token: hasilkan token unik dan simpannya dalam sesi atau kuki. Sertakan token sebagai medan tersembunyi dalam borang yang dilindungi. Semasa memproses penyerahan borang, sahkan bahawa token sepadan dengan token yang disimpan. Jika tiada padanan, permintaan ditolak.

如何防止 PHP 函数受到 CSRF 攻击?

Cara mempertahankan daripada serangan CSRF dalam fungsi PHP

Pemalsuan permintaan merentas tapak (CSRF) ialah teknik berniat jahat yang membolehkan penyerang menghantar permintaan palsu melalui penyemak imbas mangsa. Untuk aplikasi PHP, ini boleh membenarkan penyerang melakukan operasi tanpa kebenaran menggunakan fungsi tertentu.

Kes praktikal:

Andaikan anda mempunyai aplikasi PHP yang mengandungi fungsi tukar_kata laluan yang membolehkan pengguna menukar kata laluan mereka. Fungsi ini menggunakan kod berikut: change_password。该函数使用以下代码:

<?php
if (isset($_POST['password'])) {
  $password = $_POST['password'];

  // 更新数据库中的密码...
}
?>
Salin selepas log masuk

此代码容易受到 CSRF 攻击,因为攻击者可以向受害者的浏览器发送一个 POST 请求,其中包含他们希望用于受害者密码的 password

<?php
session_start();

// 生成令牌并将其存储在会话中
$_SESSION['csrf_token'] = bin2hex(random_bytes(32));
?>
Salin selepas log masuk

Kod ini terdedah kepada serangan CSRF kerana penyerang boleh menghantar permintaan POST ke penyemak imbas mangsa yang mengandungi parameter kata laluan yang mereka ingin gunakan untuk kata laluan mangsa . Serangan ini boleh dilakukan melalui e-mel palsu, tapak web berniat jahat atau kaedah lain.

Langkah pertahanan:

Untuk mempertahankan diri daripada serangan CSRF, satu mekanisme perlu dilaksanakan untuk mengesahkan kesahihan permintaan. Satu kaedah biasa ialah menggunakan token.
  1. Jana token:

Buat token yang unik dan sukar diteka dan simpannya dalam sesi atau kuki.
    <form action="change_password.php" method="post">
      <input type="hidden" name="csrf_token" value="<?php echo $_SESSION['csrf_token']; ?>" />
      <!-- 其他表单字段 -->
    </form>
    Salin selepas log masuk
  1. Sertakan token dalam borang:

Dalam borang yang anda ingin lindungi, masukkan token sebagai medan tersembunyi.
    <?php
    if (!isset($_POST['csrf_token']) || $_POST['csrf_token'] !== $_SESSION['csrf_token']) {
      // 令牌验证失败,拒绝请求
      exit('Invalid request');
    }
    ?>
    Salin selepas log masuk
  1. Token Pengesahan:
  2. Apabila memproses penyerahan borang, sahkan bahawa token sepadan dengan token yang disimpan dalam sesi atau kuki. Jika tiada padanan, permintaan ditolak.

    rrreee

    Dengan melaksanakan pertahanan ini, anda boleh mengurangkan risiko serangan CSRF pada aplikasi PHP anda. 🎜

    Atas ialah kandungan terperinci Bagaimana untuk melindungi fungsi PHP daripada serangan CSRF?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan