<?php class sqlsafe { private $getfilter = "'|(and|or)\b.+?(>|<|=|in|like)|\/\*.+?\*\/|<\s*script\b|\bEXEC\b|UNION.+?SELECT|UPDATE.+?SET|INSERT\s+INTO.+?VALUES|(SELECT|DELETE).+?FROM|(CREATE|ALTER|DROP|TRUNCATE)\s+(TABLE|DATABASE)"; private $postfilter = "\b(and|or)\b.{1,6}?(=|>|<|\bin\b|\blike\b)|\/\*.+?\*\/|<\s*script\b|\bEXEC\b|UNION.+?SELECT|UPDATE.+?SET|INSERT\s+INTO.+?VALUES|(SELECT|DELETE).+?FROM|(CREATE|ALTER|DROP|TRUNCATE)\s+(TABLE|DATABASE)"; private $cookiefilter = "\b(and|or)\b.{1,6}?(=|>|<|\bin\b|\blike\b)|\/\*.+?\*\/|<\s*script\b|\bEXEC\b|UNION.+?SELECT|UPDATE.+?SET|INSERT\s+INTO.+?VALUES|(SELECT|DELETE).+?FROM|(CREATE|ALTER|DROP|TRUNCATE)\s+(TABLE|DATABASE)"; public function __construct() { foreach($_GET as $key=>$value){$this->stopattack($key,$value,$this->getfilter);} foreach($_POST as $key=>$value){$this->stopattack($key,$value,$this->postfilter);} foreach($_COOKIE as $key=>$value){$this->stopattack($key,$value,$this->cookiefilter);} } public function stopattack($StrFiltKey, $StrFiltValue, $ArrFiltReq){ if(is_array($StrFiltValue))$StrFiltValue = implode($StrFiltValue); if (preg_match("/".$ArrFiltReq."/is",$StrFiltValue) == 1){ $this->writeslog($_SERVER["REMOTE_ADDR"]." ".strftime("%Y-%m-%d %H:%M:%S")." ".$_SERVER["PHP_SELF"]." ".$_SERVER["REQUEST_METHOD"]." ".$StrFiltKey." ".$StrFiltValue); showmsg('您提交的参数非法,系统已记录您的本次操作!','',0,1); } } public function writeslog($log){ $log_path = CACHE_PATH.'logs'.DIRECTORY_SEPARATOR.'sql_log.txt'; $ts = fopen($log_path,"a+"); fputs($ts,$log."\r\n"); fclose($ts); } }
Pustaka kelas ini mula-mula membina parameter fungsi, kemudian menyemak dan menulis log, dan akhirnya menyemak log suntikan SQL. Ia adalah perpustakaan kelas PHP yang sangat berguna untuk menghalang suntikan SQL
Semua sumber di laman web ini disumbangkan oleh netizen atau dicetak semula oleh tapak muat turun utama. Sila semak integriti perisian itu sendiri! Semua sumber di laman web ini adalah untuk rujukan pembelajaran sahaja. Tolong jangan gunakannya untuk tujuan komersial. Jika tidak, anda akan bertanggungjawab untuk semua akibat! Jika terdapat sebarang pelanggaran, sila hubungi kami untuk memadamkannya. Maklumat hubungan: admin@php.cn
Artikel Berkaitan
18Dec2024
Cara Mencegah Suntikan SQL Apabila Menggunakan BindValue dalam Klausa LIMITApabila cuba untuk melaksanakan pertanyaan SQL menggunakan kaedah bindValue untuk parametrize...
04Jan2025
Pembinaan String SQL dalam JavaMembina rentetan SQL untuk manipulasi pangkalan data boleh menjadi tugas yang membosankan dan mudah ralat apabila dilakukan melalui rentetan...
21Dec2024
Menggunakan Kad Liar SQL dan Operator LIKE dalam Format Rentetan PythonMemasukkan kad bebas SQL dan operator LIKE ke dalam format rentetan Python boleh...
12Dec2024
Pertanyaan MySQL Selamat dengan Sambungan MySQLPengenalanWalaupun kelaziman PDO, keluarga fungsi mysql_* kekal sebagai pilihan biasa untuk...
15Jan2025
Menghantar Nama Jadual ke Prosedur TersimpanDalam pengaturcaraan pangkalan data, selalunya perlu menulis pertanyaan yang merujuk jadual tertentu berdasarkan...
21Oct2024
Artikel ini membentangkan amalan terbaik untuk mengoptimumkan kenyataan yang disediakan PHP untuk menghalang suntikan SQL. Ia menekankan langkah penting untuk menyemak ralat, mengikat parameter dengan betul, mengelakkan pelarian manual dan menetapkan parameter selepas mengikat. Iklan
Hot Tools
Pustaka PHP untuk bekas suntikan kebergantungan
Pustaka PHP untuk bekas suntikan kebergantungan
Koleksi 50 algoritma PHP klasik yang sangat baik
Algoritma PHP klasik, pelajari idea yang sangat baik dan kembangkan pemikiran anda
Pustaka PHP kecil untuk mengoptimumkan imej
Pustaka PHP kecil untuk mengoptimumkan imej