ホームページ >バックエンド開発 >PHPチュートリアル >php アンチインジェクション
PHP Web サイトでの SQL インジェクションを防ぐにはどうすればよいですか?
Web サイトの運用セキュリティは、すべての Web マスターが考慮すべき問題であることは間違いありません。ご存知のとおり、ほとんどのハッカーは SQL インジェクションを使用して Web サイトを攻撃します。これが、最もオリジナルな静的な Web サイトが最も安全であると言われる理由です。 今日は、Web サイトへの SQL インジェクションを防ぐための PHP インジェクションのセキュリティ仕様について説明します。
現在、主流のウェブサイト開発言語は依然として php です。それでは、php ウェブサイトでの SQL インジェクションを防ぐ方法から始めましょう:
php インジェクションのセキュリティ防止 上記のプロセスを通じて、php インジェクションの原理とテクニックを理解することができます。もちろん、対応する防止方法も策定できます。
1 つ目はサーバーのセキュリティ設定です。ここでは主に 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)){
return true;
}
}
return false;
}
// $_POST と $_GET をマージします
if(function_exists(array_merge)){
$ArrPostAndGet=array_merge($HTTP_POST_VARS,$HTTP_GET_VARS);
}else{
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)){
echo "history.go(-1);";
}else{
echo "window.location=/"".$StrGoUrl."/";" ;
}
exit;
}
}
?>
/* **************************
checkpostandget.phpとして保存します
そして、各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 行を追加します。
Auth fully /lib/security/pam_rootok.so debug
Auth required /lib/security/pam_whell.so group=wheel
特殊なものをすべて削除しますaccounts
#userdel lpなどでユーザーを削除
#groupdel lp グループの削除を待つ
未使用のsuid/sgidプログラムをブロック
#find / -type f (-perm -04000 - o ?perm -02000 ) -execls ?lg {} ;