PHP セキュリティ防止プログラム モデル
次のようにコードをコピーします。
/* PHP アンチインジェクション クロスサイト V1.0
普遍的な防止を実現するには、ページの先頭に require(“menzhi_injection.php”) を追加します。 SQL インジェクションと XSS のクロスサイト脆弱性。
##################欠陥と改善##################
プログラムにはまだ多くの欠陥がありますが、皆様も改善にご協力いただければ幸いです
##################参照と謝辞###################
Neeao'ASP SQLユニバーサルアンチインジェクションプログラム V3.0
コードの一部は Discuz! から参照しています
|select|delete|update|count|*|%|chr|mid|master|truncate|or|char|declare";
$menzhi_injection =explode("|",$menzhi_injection);
foreach(array('_GET' , '_POST', '_COOKIE','_REQUEST') as $_request) {
foreach($$_request as $_key => $ _value) {
//$_value = strto lower($_value);
$_key{ 0} != '_' && $$_key = maddslashes($_value)
foreach($menzhi_injection as $kill_key => $kill_value ) {
if(substr_count($_value,$kill_value)>0) {
echo "";
unset($_value)
}
}
///echo "
".$_value ;
}
}
function goddslashes($string) {
if(!MAGIC_QUOT ES_GPC) {
if(is_array($string)) {
foreach($string as $key => $val) {
$string[ $key] = daddslashes($val);
}
} else {
$string = addslashes ($string)
}
}
$string = preg_replace(((d{3,5}| x[a-fA-F0-9]{4}));)/', ' &\1',str_replace(array('&', '"', '<', '>'), array ('&', '"', '<', '>'), $ string));
return $string;
}
?>
使用手順
追加: "require("menzhi_injection.php SQL インジェクションと XSS 国境を越えたサイトの脆弱性を一般的に防止するには、ページの上部に「);」を追加します。このプログラムを呼び出すには、include() の代わりに require() を使用します。これは、require() がエラーでファイルを呼び出した場合、プログラムは終了し、include() はそれを無視するためです。そして、require() がファイルを呼び出すと、プログラムが実行されるとすぐに外部ファイルが最初に呼び出されます。 Inculde() は、この行に到達した場合にのみ実行を開始します。関数の特性に基づいて、require() を選択します。 実際のニーズに応じて $menzhi_injection 変数のフィルター文字を追加または削除して、より良い防御効果を実現することもできます。 さらに、コードを自分で変更すると、予期しない結果が得られる可能性があります。通常のインジェクションは防御できます。次のテストは単なる嘲笑のためのものです。次は 1 文のトロイの木馬のテスト効果です。 「require("menzhi_injection.php");」を覚えておいてください。これは皆さんの興味を引くための単なるギミックですので、ぜひご自身で試してみてください。
不具合と改善点
このプログラムは外部呼び出しのみであるため、外部から送信された変数を処理するだけであり、アプリケーションの体系的な分析は実行しませんので、多くの制限がありますので、注意して使用してください。 GBK エンコーディングを使用するプログラムには、2 バイト エンコーディングの脆弱性のリスクもありますが、このプログラムはこの脆弱性に対処できます。しかし、これらの抜け穴を防ぐには、やはり根本原因から始める必要があります。データベース接続ファイルを処理する必要がある場合は、character_set_client=binary を追加できます。 Discuz!7.0 のデータベース接続クラス db_mysql.class.php は非常によく書かれているので、参照してください。もちろん、これらはこの小さなプログラムの範囲ではありません。
このプログラムは非常に厄介ですので、どなたでもテストして使用してください。コメントや提案があれば、ディスカッション用にメッセージを残してください。
結論
最後に、皆さんの学業と仕事の成功をお祈りします。関連記事をさらに入手したい場合は、PHP 中国語 Web サイト (www.php.cn) に注目してください。