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