ホームページ >バックエンド開発 >PHPチュートリアル >MySQL インジェクションまたは HTML フォームの悪用を防ぐ PHP プログラム_PHP チュートリアル

MySQL インジェクションまたは HTML フォームの悪用を防ぐ PHP プログラム_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-21 15:48:06789ブラウズ

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 という名前を付けます:

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

//数値入力を検証します
if($ _POST['num1'] >= 0.001 && $_POST['num2'] >= 0.001 && $_POST['num3'] >= 0.001)
{
}
else
{
}
? >

そして、条件は 3 つ以上の番号に対応するように拡張できます。したがって、10 個ある場合は、AND ステートメントを拡張するだけで済みます。
これは、契約数量、ライセンス番号、電話番号などの数字のみを受け入れるフォームを検証するために使用できます。
テキストとメールアドレスの入力を検証する
以下を使用して、ユーザー名、名、メールアドレスなどのフォーム入力を検証することができます:
コードをコピー コードは次のとおりです:

//テキスト入力を検証する
if (! preg_match('/^[-a-z.-@,'s]*$/i',$_POST['name']))
{
}
else
if ($empty==0)
{
}

{
}
?>

この検証スクリプトの利点の 1 つは、空白の入力を受け入れないことです。悪意のあるユーザーの中には、空白の入力を通じてデータベースを操作する人もいます。上記のスクリプトを使用して、1 つのリテラル変数「$name」のみを検証します。つまり、テキスト変数が 3 つある場合、各変数の検証スクリプトを設定して、データベースに入力する前に各変数がレビューに合格することを確認できます。

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/319809.html技術記事 MySQL インジェクションの目的は、Web サイトのデータベースを乗っ取り、情報を盗むことです。 MySQL などの一般的なオープンソース データベースは、パスワードや個人情報などの重要な情報を保存するために多くの Web サイト開発者によって使用されてきました...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。