PHP melaksanakan pengaturcaraan selamat: serangan dan pertahanan CSRF

WBOY
Lepaskan: 2023-06-18 12:24:01
asal
1257 orang telah melayarinya

Dalam aplikasi Internet, isu keselamatan sentiasa menjadi isu penting. Antaranya, serangan Cross-Site Request Forgery (CSRF) adalah kelemahan biasa dan mudah dieksploitasi oleh penyerang. Jadi, bagaimana untuk melaksanakan pengaturcaraan selamat dalam pembangunan PHP? Artikel ini akan menumpukan pada serangan CSRF dan penyelesaian pertahanan.

1. Apakah serangan CSRF?

Serangan CSRF, pemalsuan permintaan merentas tapak, ialah kaedah serangan yang menggunakan status log masuk mangsa untuk menghantar permintaan berniat jahat ke tapak web sasaran tanpa pengetahuan mangsa. Penyerang boleh mendapatkan status log masuk mangsa melalui pelbagai kaedah, dan kemudian memulakan permintaan palsu ke tapak web sasaran tanpa disedari, dengan itu melakukan serangan. Penyerang boleh mendorong mangsa untuk melakukan operasi dengan membenarkan mangsa melawat tapak web pihak ketiga, melalui pautan dalam e-mel atau perisian sembang, atau dengan menyiarkan pautan pada rangkaian sosial, dengan itu mencetuskan serangan.

Dalam contoh berikut, penyerang boleh membenarkan mangsa melawat tapak web berniat jahat, menjana permintaan POST, menyamar sebagai permintaan daripada tapak web sasaran dan mendapatkan kebenaran mangsa untuk log masuk, iaitu , serahkan ulasan:

<form action="https://www.targetwebsite.com/comment" method="post">
<input type="hidden" name="comment" value="harmful comment" />
<input type="submit" value="Submit Comment" />
</form>
<script>
document.forms[0].submit();
</script>
Salin selepas log masuk

Kaedah serangan ini sangat halus, kerana penyerang tidak menyerang tapak web sasaran secara langsung, tetapi mengambil kesempatan daripada kelemahan tapak web sasaran untuk mencapai serangan. Oleh kerana mangsa tidak sedar, sukar untuk mengesan serangan itu. Jika tapak web sasaran gagal menghalang serangan CSRF, ia mungkin membawa kepada risiko seperti kebocoran data dan operasi berniat jahat.

2. Bagaimana untuk bertahan menentang CSRF?

Memandangkan serangan CSRF sangat berbahaya, bagaimana untuk bertahan menentangnya? Berikut ialah beberapa strategi pertahanan biasa:

1 Tambah pengesahan token

Apabila pengguna log masuk, pelayan bahagian belakang menjana token dan menghantarnya semula ke bahagian hadapan dan menyimpan token. ke pelayan. Dalam interaksi seterusnya dengan pelayan, bahagian hadapan perlu membawa token ke pelayan bersama-sama dengan permintaan. Pelayan boleh menentukan sama ada permintaan itu sah melalui pengesahan token.

Berikut ialah contoh kod ringkas:

<!-- 后端代码 -->
<?php
session_start();
if(!isset($_SESSION['token'])){
$_SESSION['token'] = md5(uniqid(rand(), true));
}
$token = $_SESSION['token'];
?>

<!-- 前端代码 -->
<form method="post" action="/some/url">
<?php echo "<input type='hidden' name='token' value='".$token."' />"; ?>
<input type="text" name="username" />
<input type="text" name="password" />
<input type="submit" value="Submit" />
</form>
Salin selepas log masuk

Dalam contoh ini, kami menjana token rawak di latar belakang dan menyerahkannya kembali ke bahagian hadapan. Seterusnya, token dilampirkan pada teg input tersembunyi. Apabila bahagian hadapan menyerahkan permintaan, token juga akan diserahkan, dan kod pada pelayan akan mengesahkan sama ada permintaan itu sah berdasarkan token yang diserahkan.

2. Pengesahan Tambah Perujuk

Perujuk ialah sebahagian daripada pengepala HTTP, yang mengandungi halaman dari mana pengguna dialihkan ke halaman semasa. Dengan menyemak Perujuk dalam pengepala HTTP, pelayan boleh menentukan sama ada permintaan itu datang daripada halaman yang sah. Jika Perujuk dikesan tidak betul, pelayan akan menolak untuk membalas permintaan tersebut.

Berikut ialah contoh kod ringkas:

<?php
$referer = $_SERVER['HTTP_REFERER'];
if(parse_url($referer, PHP_URL_HOST) != 'www.validwebsite.com') {
die("Invalid Referer");
}
// 处理正常的请求
?>
Salin selepas log masuk

Dalam contoh ini, kami mendapat Perujuk dalam pengepala HTTP dan menyemak sama ada permintaan itu datang daripada tapak web bernama "www.validwebsite.com" tapak web . Jika permintaan tidak datang dari laman web ini, pelayan akan menolak respons dan memaparkan mesej "Perujuk Tidak Sah".

3. Tambahkan kuki penyemak imbas

Serangan CSRF berasaskan kuki ialah kaedah serangan yang menggunakan status log masuk pengguna dan menghantar kuki pengguna ke tapak web penyerang. Kita boleh melakukan ini dengan menetapkan kuki jangka pendek untuk halaman sensitif dan kemudian menyemak kewujudan kuki apabila melakukan tindakan yang berkaitan dengan halaman tersebut.

Berikut ialah contoh kod ringkas:

header('Set-Cookie: csrf_cookie=' . uniqid(rand(), true) . '; path=/; HttpOnly');
Salin selepas log masuk

Dalam contoh ini, kami menghasilkan csrf_cookie rawak dan menetapkannya kepada HttpOnly, yang bermaksud kuki hanya boleh lulus pemindahan protokol HTTP dan tidak boleh diakses melalui JavaScript. Apabila permintaan itu sampai ke pelayan, kami boleh menyemak sama ada kukinya sepadan dengan halaman itu, mengenal pasti kemungkinan serangan.

Ringkasan

Serangan CSRF ialah kaedah serangan yang sangat berbahaya. Mempertahankan serangan CSRF bukan sahaja membantu melindungi keselamatan data, tetapi juga merupakan keperluan asas untuk melaksanakan pengaturcaraan selamat. Dalam persekitaran pembangunan PHP, kami boleh mengambil beberapa langkah untuk menghalang serangan CSRF, seperti menetapkan pengesahan token, Pengesahan perujuk, menambah kuki penyemak imbas, dsb. Melalui langkah-langkah ini, kami boleh melindungi keadaan log masuk pengguna dan halaman yang melibatkan data sensitif daripada serangan dengan berkesan.

Atas ialah kandungan terperinci PHP melaksanakan pengaturcaraan selamat: serangan dan pertahanan 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