Pencegahan Keamanan Injeksi Php Melalui proses di atas, kita dapat memahami prinsip dan metode injeksi Php. Tentu saja, kita juga dapat mengembangkan metode pencegahan yang sesuai:
Yang pertama adalah pengaturan keamanan server. Kami telah membicarakan tentang pengaturan keamanan server windows sebelumnya dan tidak akan mengulanginya lagi. Yang utama di sini adalah pengaturan keamanan php+mysql dan pengaturan keamanan host Linux . Untuk mencegah injeksi php+mysql, pertama-tama setel magic_quotes_gpc ke On dan display_errors ke Off. Jika ini adalah tipe id, kami menggunakan fungsi intval() untuk mengubahnya menjadi tipe integer, seperti yang ditunjukkan dalam kode:
$id=intval($id);
mysql_query="pilih *dari contoh di mana articieid='$id'"; Atau tulis seperti ini: mysql_query("SELECT * FROM article WHERE articleid=".intval($id)."")
Jika itu adalah tipe karakter, gunakan addlashes() Filter, lalu filter "%" dan "_" seperti:
$pencarian=tambahkan garis miring($pencarian);
$pencarian=str_replace(“_”,”_”,$pencarian);
$pencarian=str_replace(“%”,”%”,$pencarian);
Tentu saja, Anda juga dapat menambahkan kode anti-injeksi umum PHP:
/******************************
Deskripsi kode keamanan anti-injeksi umum PHP:
Tentukan apakah variabel yang diteruskan berisi karakter ilegal seperti $_POST, $_GET
Fungsi:
Anti-injeksi
******************************/
//Karakter ilegal yang akan difilter
$ArrFiltrate=array("'",";","union");
//URL yang akan dituju setelah terjadi kesalahan. Jika tidak diisi, halaman sebelumnya akan menjadi default.
$StrGoUrl="";
//Apakah ada nilai dalam array
fungsi FunStringExist($StrFiltrate,$ArrFiltrate){
foreach ($ArrFiltrate sebagai $key=>$nilai){
if (eregi($nilai,$StrFiltrate)){
kembali benar;
}
}
kembali salah;
}
//Gabungkan $_POST dan $_GET
if(fungsi_ada(array_merge)){
$ArrPostAndGet=array_merge($HTTP_POST_VARS,$HTTP_GET_VARS);
}kalau tidak{
foreach($HTTP_POST_VARS sebagai $kunci=>$nilai){
$ArrPostAndGet[]=$nilai;
}
foreach($HTTP_GET_VARS sebagai $kunci=>$nilai){
$ArrPostAndGet[]=$nilai;
}
}
//Verifikasi dimulai
foreach($ArrPostAndGet sebagai $key=>$nilai){
if (FunStringExist($nilai,$ArrFiltrate)){
echo "alert(/"Neeao prompt, karakter ilegal/");";;
if (kosong($StrGoUrl)){
echo "sejarah.pergi(-1);";
}kalau tidak{
echo "jendela.lokasi=/"".$StrGoUrl."/";";
}
KELUAR;
}
}
?>
/******************************
Simpan sebagai checkpostandget.php www.devdao.com
Kemudian tambahkan include("checkpostandget.php"); di depan setiap file php.
******************************/
Selain itu, nama pengguna dan kata sandi administrator dienkripsi md5, yang secara efektif dapat mencegah injeksi PHP.
Ada juga beberapa tindakan pencegahan keamanan yang perlu diperkuat pada server dan mysql.
Untuk pengaturan keamanan server linux:
Untuk mengenkripsi kata sandi, gunakan alat "/usr/sbin/authconfig" untuk mengaktifkan fungsi bayangan kata sandi dan mengenkripsi kata sandi.
Untuk melarang akses ke file penting, masuk ke antarmuka perintah Linux dan masukkan saat diminta:
#chmod 600 /etc/inetd.conf //Ubah atribut file menjadi 600
#chattr +I /etc/inetd.conf // Pastikan pemilik file adalah root
#chattr –I /etc/inetd.conf // Batasi perubahan pada file ini
Untuk melarang pengguna mana pun mengubah ke pengguna root melalui perintah su, tambahkan dua baris berikut di awal file konfigurasi su, yaitu direktori /etc/pam.d/:
Cukup autentikasi /lib/security/pam_rootok.so debug
Diperlukan autentikasi /lib/security/pam_whell.so group=wheel
Hapus semua akun khusus
#userdel lp dll. hapus pengguna
#groupdel lp, dll. Hapus grup untuk melarang program suid/sgid yang tidak digunakan
#find / -type f (-perm -04000 - o –perm -02000 ) -execls –lg {} ;