Rumah >pembangunan bahagian belakang >masalah PHP >php ubah hala tersembunyi

php ubah hala tersembunyi

WBOY
WBOYasal
2023-05-24 20:38:37964semak imbas

Ubah hala tersembunyi PHP

Dalam pembangunan aplikasi web, ubah hala (ubah hala) ialah kaedah lompat yang biasa. Pengalihan semula bermakna apabila anda memasukkan URL dalam penyemak imbas, pelayan mengembalikan respons lompat 302 dan penyemak imbas secara automatik melompat ke URL baharu. Dalam pembangunan sebenar, kita mungkin perlu menggunakan ubah hala untuk melaksanakan lompatan halaman, pemindahan parameter dan fungsi lain.

Walau bagaimanapun, terdapat beberapa isu keselamatan dengan ubah hala. Penyerang boleh menggunakan kelemahan ubah hala untuk melaksanakan serangan pancingan data, serangan XSS, dsb. Oleh itu, pembangun perlu mengambil beberapa langkah untuk mengelakkan kelemahan pengalihan daripada berlaku.

Artikel ini akan memperkenalkan kaedah ubah hala tersembunyi yang dilaksanakan dalam PHP dan cara menggunakan kaedah ini untuk mengelakkan kelemahan ubah hala daripada berlaku.

Fungsi pengepala dalam PHP

Fungsi pengepala dalam PHP boleh menetapkan maklumat pengepala HTTP, termasuk Kuki, Jenis Kandungan, Kawalan Cache, dsb. Pada masa yang sama, fungsi pengepala juga boleh melaksanakan fungsi ubah hala. Contohnya, kod berikut melaksanakan fungsi ubah hala yang mudah:

<?php
header('Location: http://www.example.com/');
?>

Apabila penyemak imbas meminta skrip ini, pelayan mengembalikan respons lompat 302 dan menetapkan pengepala Lokasi kepada http://www.example .com/. Penyemak imbas akan melompat ke URL ini secara automatik.

Walau bagaimanapun, kaedah ini juga mempunyai beberapa isu keselamatan. Penyerang boleh mengubah hala ke tapak web berniat jahat dengan membina URL. Contohnya, kod berikut wujud dalam tapak web:

<?php
$redirect_url = $_GET['url'];
header("Location: $redirect_url");
?>

Penyerang boleh membina URL berikut:

http://www.example.com/redirect.php?url=http://www.bad-site.com/

Apabila pengguna mengklik URL ini, pelayan akan mengubah hala pengguna ke http:/ /www.bad-site.com/, dengan itu mencapai serangan pancingan data atau serangan XSS.

Pelaksanaan pengalihan tersembunyi PHP

Untuk menyelesaikan isu keselamatan di atas, kami boleh melaksanakan pengalihan pada bahagian pelayan. Secara khusus, kita boleh meletakkan URL yang diubah hala dalam pembolehubah sesi dan melompat ke halaman transit. Dalam halaman pemindahan, kami mengeluarkan URL ubah hala dalam pembolehubah sesi dan melompat. Dengan cara ini, penyerang tidak boleh membina URL secara langsung untuk melaksanakan pengalihan, dengan itu memastikan keselamatan.

Berikut ialah pelaksanaan khusus bagi penyelesaian ini.

Langkah pertama ialah menyimpan URL ubah hala dalam pembolehubah sesi. Kami boleh menetapkan butang ubah hala dalam halaman asal dan lulus URL yang perlu diubah hala ke pelayan:

session_start();
$_SESSION['redirect_url'] = 'http://www.example.com/';
?>

<form method="post" action="redirect.php">
  <input type="submit" value="redirect">
</form>

Langkah kedua ialah melompat ke halaman pemindahan. Dalam halaman pemindahan, kita boleh mengeluarkan URL ubah hala dalam pembolehubah sesi dan melompat:

session_start();
$redirect_url = $_SESSION['redirect_url'];

if (!empty($redirect_url)) {
  header('Location: ' . $redirect_url);
} else {
  echo 'Error: redirect_url not found';
}
?>

Perlu diingatkan bahawa kita perlu memanggil fungsi session_start pada permulaan setiap halaman untuk mencipta sesi pembolehubah. Pada masa yang sama, untuk memastikan keselamatan, kami perlu menapis dan mengesahkan URL ubah hala. Sebagai contoh, kita boleh menggunakan fungsi filter_var untuk menapis URL untuk menentukan sama ada ia adalah URL yang sah, kita juga boleh menggunakan fungsi parse_url untuk menghuraikan URL untuk menentukan sama ada hos itu sah, dsb.

Bagaimana untuk mencegah kelemahan pengalihan

Selain mengambil kaedah pengalihan tersembunyi di atas, kami juga perlu memberi perhatian kepada perkara berikut semasa menulis program untuk mengelakkan berlakunya kelemahan pengalihan:

  1. Tapis dan sahkan URL yang dimasukkan dengan ketat untuk memastikan bahawa hanya URL sah dibenarkan untuk melompat. Anda boleh menggunakan filter_var, parse_url, urlencode dan fungsi lain untuk mengesahkan dan memproses URL.
  2. Jangan gunakan URL atau parameter yang dimasukkan oleh pengguna sebagai nilai pengepala Lokasi untuk menghalang penyerang daripada membina URL berniat jahat untuk serangan.
  3. Cuba gunakan laluan relatif untuk ubah hala. Dengan cara ini, penyerang boleh dihalang daripada menggunakan laluan mutlak untuk melompat ke tapak web lain.
  4. Sahkan dan benarkan lompatan yang melibatkan operasi sensitif untuk memastikan bahawa hanya pengguna yang telah log masuk dan mempunyai kebenaran boleh membuat lompatan.

Ringkasan

Kerentanan ubah hala ialah salah satu isu keselamatan biasa dalam aplikasi web. Penyerang boleh menggunakan kelemahan ubah hala untuk melaksanakan serangan pancingan data, serangan XSS, dsb. Untuk mengelakkan berlakunya masalah keselamatan ini, kami boleh mengambil beberapa langkah, seperti menggunakan pengalihan tersembunyi dan kaedah lain pada masa yang sama, kami juga perlu memberi perhatian kepada isu keselamatan seperti penapisan, pengesahan dan kebenaran semasa menulis program.

Atas ialah kandungan terperinci php ubah hala tersembunyi. 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