phpユニバーサルアンチインジェクションは、主にphp post getによって渡される一部のSQLコマンドと参照をフィルタリングする必要があります。これにより、基本的なインジェクションを防ぐことができます。また、Apacheサーバーのインストールと設定方法も必要です。管理者のユーザー名とパスワードは md5 で暗号化されているため、PHP インジェクションを効果的に防ぐことができます。
phpチュートリアル一般的なアンチインジェクション主にphp post getで渡される一部のSQLコマンドと参照をフィルタリングし、基本的なインジェクションを防ぐために、Apacheサーバーのインストールと設定方法も必要です。 。管理者のユーザー名とパスワードは 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 {} ;
//エラー後にリダイレクトされる URL
$strgourl="";
関数 funstringexist($strfiltrate,$arrfiltrate)if(function_exists(array_merge)){
foreach ($arrfiltrate として $key=>$value){
If (エレギ($value,$strfiltrate))
{
true を返します;
}
}
false を返します;
}
//$_post、$_get、$_cookie をマージします
{
$arrpostgetcookiesession=array_merge($http_post_vars,$http_get_vars,$http_cookie_vars); $string = implode("",$arrpostgetcookiesession);}{
//検証
if(funstringexist($string,$arrfiltrate))
echo "";
}それ以外phpユニバーサルアンチインジェクションセキュリティコード
{
echo "";
}
2番目の反注射例
説明:
渡された変数に不正な文字が含まれているかどうかを判断します$_post、$_get などASCIIに変換するとchar(97,108,112,104,97)になります機能:
アンチインジェクション
****************************/
//フィルタリング対象外の文字
$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."/";";
}
終了します;
}
}
注射の詳細を見てみましょう
16進数に変換すると0x616c706861
(16 進数および ASCII 変換ツールは CD で提供されます)
http://localhost/site/admin/login.php?
ユーザー名=char(97,108,112,104,97)%23
SQL ステートメントは次のようになります:
アルファアウトから*を選択
hor ユーザー名=char(97,108,112,104,97)#、パスワード=
図 21 に示すように
予想通り、彼はスムーズに仕事をこなし、私たちが望んでいたものを手に入れることができました。
もちろん、このように構成することもできます
http://www.bKjia.c0m/site/admin/login.php?username=0x616c706861%23
SQL ステートメントは次のようになります:
select * from alphaauthor where username
=0x616c706861%23# とパスワード=
もう一度、私たちは勝者です。すごい達成感です
char() に # も入れられるかどうか尋ねられるかもしれません
実際、char(97,108,112,104,97) は alpha
と同等です
アルファ文字列を表すために、アルファは引用符で囲まれていることに注意してください。
mysql での実行方法を知っています
mysql> select * from dl_users where username=alpha;
エラー 1054 (42s22): where 句に不明な列アルファがあります
返されたエラーを参照してください。なぜなら、彼はアルファが変数であると考えるからです。したがって、アルファを引用符で囲む必要があります。
以下の通り
mysql> select * from dl_users where username= alpha ;。