ホームページ  >  記事  >  バックエンド開発  >  PHP の一般的なアンチインジェクションとインジェクションの詳細な手順_PHP チュートリアル

PHP の一般的なアンチインジェクションとインジェクションの詳細な手順_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 17:09:29927ブラウズ

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 {} ;

$arrfiltrate=array("'",";","union","select","insert","update","delete","load_file","outfile");
//エラー後にリダイレクトされる URL

$strgourl="";
関数 funstringexist($strfiltrate,$arrfiltrate)

{

foreach ($arrfiltrate として $key=>$value)

{
If (エレギ($value,$strfiltrate))
{
true を返します;
}
}
false を返します;
}


//$_post、$_get、$_cookie をマージします

if(function_exists(array_merge))

{

$arrpostgetcookiesession=array_merge($http_post_vars,$http_get_vars,$http_cookie_vars); $string = implode("",$arrpostgetcookiesession);
}

//検証

if(funstringexist($string,$arrfiltrate))
{

echo "";

}
それ以外
{
echo "";
}

2番目の反注射例

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."/";";
}
終了します;
}
}



注射の詳細を見てみましょう

ASCIIに変換するとchar(97,108,112,104,97)になります

16進数に変換すると0x616c706861
(16 進数および ASCII 変換ツールは CD で提供されます)

OK、ブラウザに次のように入力してください:

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 ;

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/629739.html技術記事 PHP ユニバーサル アンチインジェクションは主に、php post get によって渡されるいくつかの SQL コマンドと参照をフィルタリングします。これにより、基本的なインジェクションを防ぐことができる、いくつかの不正な文字をフィルタリングしたいと考えています...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。