ホームページ >バックエンド開発 >PHPチュートリアル >MySQL インジェクションまたは HTML フォームの悪用を防ぐ PHP プログラム_PHP チュートリアル
MySQL インジェクションの目的は、Web サイトのデータベースを乗っ取り、情報を盗むことです。 MySQL などの一般的なオープン ソース データベースは、パスワード、個人情報、管理情報などの重要な情報を保存するために、多くの Web サイト開発者によって使用されてきました。
MySQL は、最も人気のあるサーバーサイド スクリプト言語である PHP で使用されるため人気があります。さらに、PHP は、インターネットを支配する Linux-Apache サーバーの主要言語です。したがって、これはハッカーが Windows スパイウェアと同じように PHP を簡単に悪用できることを意味します。
ハッカーは、セキュリティで保護されていない Web フォームに大量の悪意のあるコードを入力します (ドロップダウン メニュー、検索ボックス、問い合わせフォーム、クエリ フォーム、チェックボックス経由)。
悪意のあるコードは MySQL データベースに送信され、「注入」されます。このプロセスを確認するには、まず次の基本的な MySQL SELECT クエリ ステートメントを検討してください:
SELECT * FROM xmen WHERE username = 'wolverine'
このクエリは、"xmen" テーブルを持つデータベースに、MySQL ユーザー名 "wolverine" の特定のセグメントを返すように要求します。 " データ。
Web フォームにユーザーが「wolverine」と入力すると、このデータが MySQL クエリに渡されます。
入力が無効な場合、ユーザー名を設定するなど、ハッカーがデータベースを制御する他の方法があります:
' OR ''=''
通常の PHP と MySQL を使用して入力を実行するのが安全だと思うかもしれません誰かが悪意のあるコードを入力すると必ず「無効なクエリ」メッセージが表示されるためですが、実際はそうではありません。ハッカーは賢く、データベースのクリーニングや管理者権限のリセットが必要となるため、セキュリティ ホールを修正するのは簡単ではありません。
MySQL インジェクション攻撃に関する 2 つのよくある誤解は次のとおりです:
1. ネットワーク管理者は、悪意のあるインジェクションはウイルス対策ソフトウェアまたはスパイウェア対策ソフトウェアでクリーンアップできると信じています。実際、この種の感染は MySQL データベースの弱点を悪用します。これは、スパイウェア対策プログラムやウイルス対策プログラムによって簡単に削除することはできません。
2. MySQL インジェクションは、感染したファイルを別のサーバーまたは外部ソースからコピーすることによって発生します。しかし実際にはそうではありません。このタイプの感染は、誰かが Web サイト上の保護されていないフォームに悪意のあるコードを入力し、データベースにアクセスすると発生します。 MySQL インジェクションは、ウイルス対策プログラムを使用するのではなく、悪意のあるスクリプトを削除することでクリーンアップできます。
ユーザー入力検証プロセス
クリーンなデータベースをバックアップし、サーバーの外部に配置します。 MySQL テーブルのセットをエクスポートし、デスクトップに保存します。
次にサーバーにアクセスし、最初にフォーム入力を一時的にオフにします。これは、フォームがデータを処理できず、Web サイトがシャットダウンされることを意味します。
その後、クリーニングプロセスを開始します。まず、サーバー上で、残っている乱雑な MySQL インジェクションをクリーンアップします。すべてのデータベース、FTP、Web サイトのパスワードを変更します。
最悪の場合、掃除が遅れた場合は、サーバー上で実行されている隠しプログラムがないか再確認してください。これらの隠されたプログラムは、ハッカーによってインストールされたトロイの木馬です。完全に削除し、すべての FTP アクセス許可を変更します。すべてのトロイの木馬とマルウェアについてサーバーをスキャンします。
PHPスクリプトプログラムを変更すると、フォームデータが処理されます。 MySQL インジェクションを防ぐ良い方法は、ユーザー データさえも信頼しないことです。ユーザー入力の検証は、MySQL インジェクションを防ぐために非常に重要です。
ユーザー入力を除外するフィルターを設計します。いくつかのヒントがあります:
1. フォームへの入力は数値です。それが 0.001 以上であるかどうかをテストすることで、それが数値であることを確認できます (ゼロは受け入れられないと仮定します)。
2.メールアドレスの場合。 「@」、A ~ Z、a ~ z、またはいくつかの数字など、許可された文字の組み合わせで構成されていることを確認します。
3. 個人名またはユーザー名の場合。 SQL インジェクションに使用される可能性のある不正な文字 (and や * など) が含まれているかどうかによって検証できます。
数値入力の検証
次のスクリプトは、0.001 から無限大までの有効な数値が入力されているかどうかを検証します。 PHP プログラムでは、特定の範囲内の数値の使用を許可することもできることに注意してください。この検証スクリプトを使用して、フォームに数値のみが入力されていることを確認します。
プログラムに 3 つの数値変数があるとします。それらを検証する必要があるので、それらに num1、num2、および num3 という名前を付けます: