PHP 初心者向けのデータベース セキュリティ
1.SQLインジェクションを防ぐ
いわゆるSQLインジェクションとは、Webフォームの送信にSQLコマンドを挿入したり、ドメイン名やページリクエストのクエリ文字列を入力したりすることで、最終的にはサーバーをだまして悪意のあるSQLコマンドを実行させます。
ユーザー入力を決して信頼すべきではありません。ユーザーが入力したデータは安全ではないと想定する必要があります。
たとえば、登録するとき、ユーザーはユーザーを入力する必要があります。名前、パスワードなど
このデータを受け取ったら、最初にフロントエンドページを使用して判断します。すべてが合法になった後、私たちが受け取る情報は、たとえば、ユーザー名が登録されている場合、データベースにクエリを実行し、フォームに送信されたユーザー名情報に基づいて判断する必要があります。は許可されていません。正規表現を使用してその形式を制御することもできます。たとえば、中国語または英語のみで、数語以内にすることができます。お待ちください
フォームによって送信されたデータをフィルターすることもできます
SQL インジェクションを防ぐには、次の点に注意する必要があります:
· 1. ユーザー入力を決して信頼しないでください。ユーザーの入力を検証するには、正規表現を使用するか、一重引用符や二重 "-" などを変換して長さを制限できます。
· 2. SQL の動的アセンブリは決して使用しないでください。データのクエリとアクセスには、パラメーター化された SQL を使用するか、ストアド プロシージャを直接使用できます。
· 3. 管理者権限を持つデータベース接続は決して使用せず、アプリケーションごとに権限が制限された別のデータベース接続を使用します。
· 4. 機密情報を直接保存せず、パスワードや機密情報を暗号化またはハッシュ化します。
· 5. アプリケーションの例外情報は、できるだけ少ないプロンプトを表示する必要があります。カスタマイズされたエラー情報を使用して、元のエラー メッセージをパッケージ化するのが最善です。
· 6. SQL インジェクションの検出方法は、通常、補助ソフトウェアまたは Web サイトを採用します。プラットフォームの検出には、通常、ソフトウェアは SQL インジェクション検出ツール jsky を使用し、Web サイト プラットフォームには Yis Web サイト セキュリティ プラットフォーム検出ツールが含まれます。 MDCソフトスキャンなどMDCSOFT-IPS を使用すると、SQL インジェクション、XSS 攻撃などを効果的に防御できます。
SQL インジェクションを防ぐ
Perl や PHP などのスクリプト言語では、ユーザーが入力したデータをエスケープして SQL インジェクションを防ぐことができます。
PHP の MySQL 拡張機能は、特殊な入力文字をエスケープするための mysql_real_escape_string() 関数を提供します
<?php if (get_magic_quotes_gpc()) { $name = stripslashes($name); } $name = mysql_real_escape_string($name); mysql_query("SELECT * FROM users WHERE name='{$name}'"); ?>
Like ステートメントへのインジェクション
Like クエリ、ユーザーが入力した値に "_" と "%" が含まれている場合、この状況はユーザーは当初「abcd_」のみをクエリしたいと考えていましたが、クエリ結果には「abcd_」、「abcde」、「abcdf」などが含まれていました。ユーザーは「30%」をクエリしたいと考えていました(注: 30%)。も発生する可能性があります。
次の例に示すように、PHP スクリプトでは addcslashes() 関数を使用して上記の状況を処理できます。