Php インジェクションのセキュリティ防止 上記のプロセスを通じて、Php インジェクションの原理と方法を理解することができます。 もちろん、対応する防止方法を開発することもできます。
1 つ目は、Windows サーバーのセキュリティ設定についてはすでに説明したので、ここでの主な設定は php+mysql のセキュリティ設定と Linux ホストのセキュリティ設定です。 。 php+mysql インジェクションを防ぐには、まず、magic_quotes_gpc を On に設定し、display_errors を Off に設定します。ID 型の場合は、コードに示すように intval() 関数を使用して整数型に変換します。
$id=intval($id);
mysql_query="select *from example where articieid='$id'"; または、次のように記述します: mysql_query("SELECT * FROMarticle WHERE Articleid=".intval($id)."")
文字型の場合は、次のように記述します。 addslashes() フィルタリングしてから、次のように「%」と「_」をフィルタリングします。
$search=addslashes($search);
$search=str_replace("_","_",$search);
$search=str_replace("%","%",$search);
もちろん、PHP の一般的なアンチインジェクション コードを追加することもできます。
/******************************
PHP の一般的なアンチインジェクション セキュリティ コードの説明:
渡された変数に $_POST、$_GET などの不正な文字が含まれているかどうかを確認します。
関数:
抗注射
******************************/
//フィルタ対象となる不正な文字
$ArrFiltrate=array("'",";","union");
//エラー発生後にジャンプする URL。入力しない場合は、デフォルトで前のページが使用されます。
$StrGoUrl="";
//配列に値があるかどうか
function FunStringExist($StrFiltrate,$ArrFiltrate){
foreach ($ArrFiltrate as $key=>$value){
if (eregi($value,$StrFiltrate)){
true を返します。
}
}
false を返します。
}
// $_POST と $_GET をマージします
if(function_exists(array_merge)){
$ArrPostAndGet=array_merge($HTTP_POST_VARS,$HTTP_GET_VARS);
}それ以外{
foreach($HTTP_POST_VARS as $key=>$value){
$ArrPostAndGet[]=$value;
}
foreach($HTTP_GET_VARS as $key=>$value){
$ArrPostAndGet[]=$value;
}
}
//検証開始
foreach($ArrPostAndGet as $key=>$value){
if (FunStringExist($value,$ArrFiltrate)){
echo "alert(/"Neeao プロンプト、不正な文字/");";
if (empty($StrGoUrl)){
エコー "history.go(-1);";
}それ以外{
echo "window.location=/"".$StrGoUrl."/";";
}
出口;
}
}
?>
/******************************
checkpostandget.php www.devdao.comという名前で保存します
次に、各 php ファイルの前に include("checkpostandget.php"); を追加します。
*******************************/
さらに、管理者のユーザー名とパスワードは md5 で暗号化されているため、PHP インジェクションを効果的に防ぐことができます。
サーバーと mysql 上で強化する必要があるセキュリティ予防措置もいくつかあります。
Linuxサーバーのセキュリティ設定については、次のとおりです。
パスワードを暗号化するには、「/usr/sbin/authconfig」ツールを使用してパスワードシャドウ機能をオンにし、パスワードを暗号化します。
重要なファイルへのアクセスを禁止するには、Linux コマンド インターフェイスに入り、プロンプトで次のように入力します。
#chmod 600 /etc/inetd.conf //ファイル属性を 600 に変更
#chattr +I /etc/inetd.conf // ファイル所有者が root であることを確認します
#chattr –I /etc/inetd.conf // このファイルへの変更を制限します
su コマンドを使用してユーザーが root ユーザーに変更できないようにするには、su 構成ファイル、つまり /etc/pam.d/ ディレクトリの先頭に次の 2 行を追加します。
十分な認証 /lib/security/pam_rootok.so デバッグ
認証が必要です /lib/security/pam_whell.so group=wheel
特別なアカウントをすべて削除する
#userdel lp など ユーザーを削除します
#groupdel lp など 未使用の suid/sgid プログラムを禁止するにはグループを削除します
#find / -type f (-perm -04000 - o –perm -02000 ) -execls –lg {} ;