Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Petua perlindungan borang PHP: Bagaimana untuk mengelakkan penyerahan borang berulang

Petua perlindungan borang PHP: Bagaimana untuk mengelakkan penyerahan borang berulang

WBOY
WBOYasal
2023-06-24 11:50:131862semak imbas

Apabila menggunakan borang PHP untuk penyerahan data, masalah penyerahan borang berulang sering berlaku. Ini boleh menyebabkan data tidak tepat atau, lebih teruk, ranap sistem. Oleh itu, adalah sangat penting untuk memahami cara mengelakkan penyerahan pendua. Dalam artikel ini, saya akan memperkenalkan beberapa teknik perlindungan borang PHP untuk membantu anda mencegah masalah penyerahan borang berulang dengan berkesan.

1. Tambahkan token pada borang

Menambah token pada borang ialah cara biasa untuk mengelakkan penyerahan berulang. Kaedah ini berfungsi dengan menambah medan tersembunyi pada borang yang mengandungi nilai rawak unik. Apabila borang diserahkan, kod PHP akan menyemak sama ada nilai ini sepadan dengan nilai yang disimpan pada pelayan. Jika tidak sepadan, ini bermakna borang telah dihantar berulang kali dan data tidak akan diproses. Berikut ialah contoh asas penggunaan token:

<?php
  session_start();
  if ($_SERVER['REQUEST_METHOD'] === 'POST' && !empty($_POST['token'])) {
    $token = $_POST['token'];
    if ($_SESSION['token'] === $token) {
      //处理表单数据
      //...
      unset($_SESSION['token']);
    } else {
      echo '表单已提交!';
    }
  } else {
    $token = md5(uniqid(rand(), true));
    $_SESSION['token'] = $token;
?>
  <form method="post">
    <input type="hidden" name="token" value="<?php echo $token; ?>" />
    <!--其他表单元素-->
    <button type="submit">提交</button>
  </form>
<?php } ?>

Dalam contoh ini, kami mula-mula menyemak sama ada permintaan itu adalah POST dan jika ya, semak sama ada nilai token dalam borang sepadan. Jika token sepadan, proses data borang. Selepas memproses data, kami menggunakan fungsi tidak ditetapkan untuk mengalih keluar token daripada SESI kerana token ini tidak diperlukan lagi. Jika token tidak sepadan, borang telah dihantar dua kali dan data borang tidak akan diproses. Jika permintaan itu bukan POST, kami menjana token baharu, menyimpannya dalam SESI dan menambahkannya pada borang.

2. Gunakan ubah hala

Selepas menyerahkan borang, jika anda masih menggunakan URL yang sama, ia akan menyebabkan borang dihantar berulang kali. Untuk mengelakkan ini, anda boleh menggunakan ubah hala. Teknik ini melibatkan halaman perantara yang mengubah hala pengguna ke halaman lain selepas borang diserahkan, bukannya halaman borang asal. Berikut ialah contoh penggunaan ubah hala untuk mengelakkan penyerahan borang berulang:

<?php
  if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    //处理表单数据
    //...
    header('Location: success.php');
    exit;
  }
?>

Dalam contoh ini, kami menggunakan fungsi pengepala untuk mengubah hala pengguna ke halaman success.php selepas memproses data borang. Halaman ini ialah halaman yang dipaparkan selepas penyerahan berjaya Ia tidak mengandungi sebarang borang, jadi pengguna tidak boleh menghantar semula borang menggunakan butang "kembali" pelayar atau memuatkan semula halaman.

3. Lumpuhkan cache penyemak imbas

Cache borang dalam penyemak imbas, yang boleh menyebabkan borang diserahkan berulang kali. Oleh kerana penyemak imbas boleh cache halaman Web tapak, borang mungkin diserahkan semula apabila pengguna mengklik butang Kembali penyemak imbas. Untuk mengelakkan ini, anda perlu melumpuhkan cache penyemak imbas. Berikut ialah contoh asas untuk melumpuhkan cache penyemak imbas:

<?php
  header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");         // Date in the past
  header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); // always modified
  header("Cache-Control: no-store, no-cache, must-revalidate");  // HTTP/1.1
  header("Cache-Control: post-check=0, pre-check=0", false);
  header("Pragma: no-cache");                                // HTTP/1.0
?>

Dalam contoh ini, kami menggunakan beberapa pengepala HTTP untuk memaklumkan penyemak imbas supaya tidak membuat cache halaman semasa. Ini termasuk pengepala "Tamat tempoh" untuk tarikh pada masa lalu dan beberapa pengepala lain tentang cara mengendalikan halaman.

Kesimpulan

Apabila menggunakan borang PHP, adalah sangat penting untuk mengelakkan penyerahan berulang. Kaedah di atas menerangkan beberapa teknik berkesan yang boleh membantu anda mengelakkan penyerahan borang berulang dan melindungi keselamatan data anda. Jika anda ingin mengetahui lebih lanjut tentang pertahanan borang PHP, lihat dokumentasi PHP atau rujuk blog dan artikel daripada pembangun PHP lain.

Atas ialah kandungan terperinci Petua perlindungan borang PHP: Bagaimana untuk mengelakkan penyerahan borang berulang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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