SQL インジェクションの防止は、プログラムを開発するときに実行する必要があるステップです。ここで、php および mysql 開発で SQL インジェクションを防止するために mysql_real_escape_string を使用するいくつかの方法を紹介します。
mysql_real_escape_string() 関数は、SQL ステートメントで使用される文字列内の特殊文字をエスケープします。次の文字が影響を受けます:
コードは次のとおりです |
コードをコピー |
x00
ん
「
x1a |
成功した場合、関数はエスケープされた文字列を返します。失敗した場合は false を返します。
以下の機能を使って効果的にフィルタリングするのが簡単です。
コードは次のとおりです |
コードをコピー |
function safety($s){ //安全なフィルター関数
if(get_magic_quotes_gpc()){ $s=ストリップスラッシュ($s) }
$s=mysql_real_escape_string($s);
$s を返します;
}
|
または、conn パブリック接続ファイルに追加すると、コードを変更する必要がなくなります。
コードは次のとおりです |
コードをコピー |
if(get_magic_quotes_gpc()) {
$_REQUEST = array_map( 'ストリップスラッシュ', $_REQUEST);
$_REQUEST = array_map( 'mysql_real_escape_string', $_REQUEST);
|
mysql_real_escape_string の SQL インジェクション対策は最も基本的な保護にすぎません。より強力な SQL インジェクション対策が必要な場合は、次の方法を参照してください。
最初はサーバーのセキュリティ設定です。ここでは主に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 articid=”.intval($id).””)
| それが文字タイプの場合は、addslashes() を使用してフィルターし、次に「%」と「_」をフィルターします。
コードは次のとおりです
コードをコピー
|
$search=スラッシュを追加($search); |
$search=str_replace("_","_",$search);
$search=str_replace("%","%",$search);
もちろん、PHP ユニバーサル アンチインジェクション コードを追加することもできます:
/*****************************
PHP ユニバーサル アンチインジェクション セキュリティ コード
説明:
渡された変数に不正な文字が含まれているかどうかを判断します
$_POST、$_GET など
機能:
アンチインジェクション
コードは次のとおりです |
コードをコピー |
*************************/
//フィルタ対象外の文字
$ArrFiltrate=array(”‘”,”;”,”union”);
//エラー発生後にジャンプするURL。入力しない場合は、前のページがデフォルトになります
$StrGoUrl=””;
//配列に値があるかどうか
関数 FunStringExist($StrFiltrate,$ArrFiltrate){
foreach ($ArrFiltrate as $key=>$value){
if (エレギ($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 (空($StrGoUrl)){
echo “history.go(-1);”;
}その他{
echo “window.location=/””.$StrGoUrl.”/”;”;
}
終了します;
}
}
?>
|
/*****************************
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 行を追加します。
十分な認証 /lib/security/pam_rootok.so デバッグ
認証が必要です /lib/security/pam_whell.so group=wheel
特別なアカウントをすべて削除します
#userdel lp など ユーザーを削除します
#groupdel lpetc グループを削除します
未使用の suid/sgid プログラムを禁止します
#find / -type f (-perm -04000 - o –perm -02000 ) -execls –lg {} ;
|
http://www.bkjia.com/PHPjc/629620.html
www.bkjia.comtruehttp://www.bkjia.com/PHPjc/629620.html技術記事 SQL インジェクションの防止は、プログラムを開発するときに実行する必要がある手順です。php および mysql 開発で SQL インジェクションを防止するために mysql_real_escape_string を使用する方法をいくつか紹介します。も...