検索
ホームページバックエンド開発PHPチュートリアルphp SQL インジェクションと anti-injection_PHP チュートリアルの古典的なケース分析

SQL インジェクションとインジェクション防止は、実際には攻撃と防御の組み合わせです。今日は、最も基本的なインジェクションと防止方法を説明します。これらの原理はすべて、私たちが注意を払わずに PHP または MySQL の機能を使用することによって引き起こされます。

単純な SQL インジェクション攻撃ケース
会社の Web サイトがある場合、すべての顧客データとその他の重要な情報は Web サイトのバックエンド データベースに保存されます。 Web サイトのログイン ページのコードにユーザー情報を読み取るコマンドが含まれている場合。

コードは次のとおりです コードをコピー

$q = "SELECT `id` FROM `users` WHERE `username`= ' " .$_GET['username']. " ' AND `password`= ' " .$_GET['password']. ;

?>

今、あなたのデータベースを攻撃しようとしているハッカーが、このログイン ページのユーザー名入力ボックスに次のコードを入力しようとしています。

コードは次のとおりですコードをコピーログインボタンをクリックすると、このページにデータベース内のすべてのテーブルが表示されます。彼が次のコマンド行を使用するとします:
' ; テーブルを表示します。

コードは次のとおりです'; DROP TABLE [テーブル名];このようにして、テーブルを削除しました!
コードをコピー

もちろん、これは非常に単純な例にすぎません。実際の SQL インジェクション方法はこれよりもはるかに複雑で、ハッカーは喜んでコードを攻撃しようと多くの時間を費やします。 SQL インジェクション攻撃を自動的に継続的に試行できるソフトウェア プログラムがいくつかあります。 SQL インジェクションの攻撃原理を理解した後、SQL インジェクション攻撃を防ぐ方法を見てみましょう。

magic_quotes_gpc = Onの場合のインジェクション攻撃

magic_quotes_gpc = On の場合、攻撃者は文字フィールドに対して SQL インジェクションを実行できません。だからといって安全というわけではありません。現時点では、SQL インジェクションは数値フィールドを通じて実行できます。


最新バージョンのMYSQL 5.xでは、データ型の入力が厳格化され、自動型変換がデフォルトでオフになっています。数値フィールドを引用符でマークされた文字タイプにすることはできません。言い換えれば、uid が数値であると仮定すると、以前の mysql バージョンでは、このようなステートメントは正当です:

コードは次のとおりですINSERT INTO tbl_user SET uid="1"; 最新の MYSQL 5.x では、上記のステートメントは合法ではないため、次のように記述する必要があります:
コードをコピー
SELECT * FROM tbl_user WHERE uid="1";


コードは次のとおりですtbl_user SET uid=1 に挿入;

これは正しいと思います。開発者として、ルールに準拠した正しいデータ型をデータベースに送信することが最も基本的な要件だからです。

では、magic_quotes_gpc = Onの場合、攻撃者はどのように攻撃するのでしょうか?非常に簡単で、数値フィールドに対して SQL インジェクションを実行するだけです。次の php スクリプトを例として取り上げます:

コードをコピー
SELECT * FROM tbl_user WHERE uid=1;


コードは次のとおりです コードをコピー


if ( isset($_POST["f_login"] ) )
{
// データベースに接続します...
//...コードは省略されています...

// ユーザーが存在するかどうかを確認します
$t_strUid = $_POST["f_uid"];
$t_strPwd = $_POST["f_pwd"];
$t_strSQL = "SELECT * FROM tbl_users WHERE uid=$t_strUid AND パスワード = '$t_strPwd' LIMIT 0,1";
if ( $t_hRes = mysql_query($t_strSQL) )
{
// クエリが成功した後の処理 少し...
}

}
?>

サンプルテスト


ユーザー ID:

パスワード:


フォーム>


上記のスクリプトでは、ユーザーはログインするためにユーザー ID とパスワードを入力する必要があります。通常のステートメントでは、ユーザーは 1001 と abc123 を入力し、送信された SQL ステートメントは次のとおりです:

コードは次のとおりです コードをコピー
SELECT * FROM tbl_users WHERE userid=1001 AND パスワード = 'abc123' LIMIT 0,1

攻撃者が「1001 OR 1 =1 # at userid」と入力した場合、挿入される SQL ステートメントは次のようになります。

コードは次のとおりですコードをコピーSELECT * FROM tbl_users WHERE userid=1001 OR 1 =1 # AND パスワード = 'abc123' LIMIT 0,1

攻撃者は目的を達成した。

SQL インジェクションを防止 - mysql_real_escape_string() 関数を使用します

データベースオペレーションコードでこの関数 mysql_real_escape_string() を使用して、引用符などのコード内の特殊文字を除外します。例として:

コードは次のとおりですコードをコピー

SQL インジェクションを防止 - mysql_query() 関数を使用します

mysql_query() の特別な点は、SQL コードの最初の行のみが実行され、後続の行は実行されないことです。前の例で、ハッカーがコードを通じてバックグラウンドで複数の SQL コマンドを実行し、すべてのテーブルの名前を表示したことを思い出してください。したがって、mysql_query() 関数はさらなる保護を実現できます。今のコードをさらに進化させて、次のコードを取得します:

$q = "SELECT `id` FROM `users` WHERE `username`= ' " .mysql_real_escape_string( $_GET['username'] ) " ' AND `password`= ' " .mysql_real_escape_string( $_GET['password' ] )。

?>

コードは次のとおりです コードをコピー

//接続
$database = mysql_connect("localhost", "ユーザー名","パスワード");

//データベースの選択
mysql_select_db("データベース", $database);

$q = mysql_query("SELECT `id` FROM `users` WHERE `username`= ' " .mysql_real_escape_string( $_GET['username'] ). " ' AND `password`= ' " .mysql_real_escape_string( $_GET['パスワード'] )、$database);

?>

さらに、PHP コード内の入力値の長さを判断したり、関数を使用して入力値を確認したりすることもできます。したがって、ユーザー入力値が受け入れられる場合は、入力内容をフィルタリングしてチェックする必要があります。もちろん、意図的な防止を実現するために、最新の SQL インジェクション手法を学び理解することも非常に重要です。 WordPress などのプラットフォーム Web サイト システムを使用している場合は、必ず公式パッチを適用するか、適時に新しいバージョンにアップグレードしてください。何か間違っている場合や理解できない場合は、コメント欄にメッセージを残してください。

php.iniのdisplay_errorsオプションはdisplay_errors = offに設定する必要があります。これにより、php スクリプトでエラーが発生した後は、Web ページにエラーが出力されなくなり、攻撃者による有用な情報の分析が防止されます。

mysql_query などの mysql 関数を呼び出すときは、mysql エラーが出力されないように、先頭に @ を追加する必要があります (@mysql_query(...))。攻撃者が有益な情報を分析できないようにする場合も同様です。さらに、一部のプログラマーは、開発時に mysql_query エラーが発生したときにエラーと SQL ステートメントを出力することに慣れています。例:

コードは次のとおりですコードをコピー$t_strSQL = "b....から a を選択";
if ( mysql_query($t_strSQL) )
{
// 正しい取り扱い
}
それ以外
{
echo "エラー! SQL ステートメント: $t_strSQL rn エラー メッセージ".mysql_query();
終了します;
}
このやり方はかなり危険で愚かです。これを行う必要がある場合は、グローバル変数を設定するか、Web サイト設定ファイルでマクロを定義してデバッグ フラグを設定することをお勧めします。

グローバル設定ファイル内:

コードは次のとおりですコードをコピーdefine("DEBUG_MODE",0); // 1: デバッグモード 0: リリースモード; //呼び出しスクリプト内:

コードは次のとおりです$t_strSQL = "b....から a を選択"; if ( mysql_query($t_strSQL) )
コードをコピー
{
// 正しい取り扱い
}
それ以外は
{
if (デバッグ_モード)
echo "エラー! SQL ステートメント: $t_strSQL rnエラー メッセージ".mysql_query();
終了します;
}

SQL アンチインジェクションコンテンツについて http://www.bKjia.c0m/phper/phpanqn/37704.htm


www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/629669.html技術記事 SQL インジェクションとインジェクション防止は、実際には攻撃と防御の組み合わせです。今日は、最も基本的なインジェクションと防止方法について説明します。これらの原則はすべて、これまで注目していなかった PHP または MySQL のいくつかの機能に基づいています。 .
声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
PHPの継続的な使用:その持久力の理由PHPの継続的な使用:その持久力の理由Apr 19, 2025 am 12:23 AM

まだ人気があるのは、使いやすさ、柔軟性、強力なエコシステムです。 1)使いやすさとシンプルな構文により、初心者にとって最初の選択肢になります。 2)Web開発、HTTP要求とデータベースとの優れた相互作用と密接に統合されています。 3)巨大なエコシステムは、豊富なツールとライブラリを提供します。 4)アクティブなコミュニティとオープンソースの性質は、それらを新しいニーズとテクノロジーの傾向に適応させます。

PHPおよびPython:類似点と相違点を調査しますPHPおよびPython:類似点と相違点を調査しますApr 19, 2025 am 12:21 AM

PHPとPythonはどちらも、Web開発、データ処理、自動化タスクで広く使用されている高レベルのプログラミング言語です。 1.PHPは、ダイナミックウェブサイトとコンテンツ管理システムの構築によく使用されますが、PythonはWebフレームワークとデータサイエンスの構築に使用されることがよくあります。 2.PHPはエコーを使用してコンテンツを出力し、Pythonは印刷を使用します。 3.両方ともオブジェクト指向プログラミングをサポートしますが、構文とキーワードは異なります。 4。PHPは弱いタイプの変換をサポートしますが、Pythonはより厳しくなります。 5. PHPパフォーマンスの最適化には、Opcacheおよび非同期プログラミングの使用が含まれますが、PythonはCprofileおよび非同期プログラミングを使用します。

PHPおよびPython:さまざまなパラダイムが説明されていますPHPおよびPython:さまざまなパラダイムが説明されていますApr 18, 2025 am 12:26 AM

PHPは主に手順プログラミングですが、オブジェクト指向プログラミング(OOP)もサポートしています。 Pythonは、OOP、機能、手続き上のプログラミングなど、さまざまなパラダイムをサポートしています。 PHPはWeb開発に適しており、Pythonはデータ分析や機械学習などのさまざまなアプリケーションに適しています。

PHPとPython:彼らの歴史を深く掘り下げますPHPとPython:彼らの歴史を深く掘り下げますApr 18, 2025 am 12:25 AM

PHPは1994年に発信され、Rasmuslerdorfによって開発されました。もともとはウェブサイトの訪問者を追跡するために使用され、サーバー側のスクリプト言語に徐々に進化し、Web開発で広く使用されていました。 Pythonは、1980年代後半にGuidovan Rossumによって開発され、1991年に最初にリリースされました。コードの読みやすさとシンプルさを強調し、科学的コンピューティング、データ分析、その他の分野に適しています。

PHPとPythonの選択:ガイドPHPとPythonの選択:ガイドApr 18, 2025 am 12:24 AM

PHPはWeb開発と迅速なプロトタイピングに適しており、Pythonはデータサイエンスと機械学習に適しています。 1.PHPは、単純な構文と迅速な開発に適した動的なWeb開発に使用されます。 2。Pythonには簡潔な構文があり、複数のフィールドに適しており、強力なライブラリエコシステムがあります。

PHPとフレームワーク:言語の近代化PHPとフレームワーク:言語の近代化Apr 18, 2025 am 12:14 AM

PHPは、多数のWebサイトとアプリケーションをサポートし、フレームワークを通じて開発ニーズに適応するため、近代化プロセスで依然として重要です。 1.PHP7はパフォーマンスを向上させ、新機能を紹介します。 2。Laravel、Symfony、Codeigniterなどの最新のフレームワークは、開発を簡素化し、コードの品質を向上させます。 3.パフォーマンスの最適化とベストプラクティスは、アプリケーションの効率をさらに改善します。

PHPの影響:Web開発などPHPの影響:Web開発などApr 18, 2025 am 12:10 AM

phphassiblasifly-impactedwebdevevermentandsbeyondit.1)itpowersmajorplatformslikewordpratsandexcelsindatabase interactions.2)php'sadaptableability allowsitale forlargeapplicationsusingframeworkslikelavel.3)

スカラータイプ、リターンタイプ、ユニオンタイプ、ヌル可能なタイプなど、PHPタイプのヒントはどのように機能しますか?スカラータイプ、リターンタイプ、ユニオンタイプ、ヌル可能なタイプなど、PHPタイプのヒントはどのように機能しますか?Apr 17, 2025 am 12:25 AM

PHPタイプは、コードの品質と読みやすさを向上させるためのプロンプトがあります。 1)スカラータイプのヒント:php7.0であるため、基本データ型は、int、floatなどの関数パラメーターで指定できます。 3)ユニオンタイプのプロンプト:PHP8.0であるため、関数パラメーターまたは戻り値で複数のタイプを指定することができます。 4)Nullable Typeプロンプト:null値を含めることができ、null値を返す可能性のある機能を処理できます。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境