PHP の magic_quotes_gpc 関数の役割は、ユーザーによって要求されたデータ (post、get、cookie データなど) を判断して解析することです。エスケープ文字 "" を追加して、これらのデータがプログラム (特に、データベース ステートメントに特殊文字が含まれているため、致命的なエラーが発生します。
magic_quotes_gpc=Onの場合、入力データに
がある場合一重引用符 (')、二重引用符 (")、バックスラッシュ ()、NUL (NULL 文字) などの文字はバックスラッシュで囲まれます。これらのエスケープが必要です。このオプションがオフの場合、addslashes 関数を呼び出す必要があります。文字列にエスケープを追加します
。このオプションはオンでなければならないという矛盾があるため、ユーザーが設定することもできます。このオプションは PHP6 では削除されており、すべてのプログラミングは magic_quotes_gpc=Off で実行する必要があります。このような環境では、ユーザーのデータがエスケープされない場合、その結果はプログラム エラーだけではありません。これにより、データベース インジェクション攻撃のリスクが発生します。したがって、今後は、サーバーが PHP6 に更新されなければならず、プログラムが正しく動作しなくなる可能性があるため、今後はこの設定がオンになっていることに依存しないでください。
コードは次のとおりです | コードをコピー |
magic_quotes_gpc=On の場合、関数 get_magic_quotes_gpc() は 1 を返します magic_quotes_gpc=Off の場合、関数 get_magic_quotes_gpc() は 0 を返します |
したがって、この get_magic_quotes_gpc() 関数の機能は、環境変数 magic_quotes_gpc の値を取得することであることがわかります。 PHP6 では、magic_quotes_gpc オプションが削除されたため、この関数は PHP6 には存在しないと思います。
PHP は、addslashes 関数を使用する決定を容易にするために get_magic_quotes_gpc 関数が有効になっているかどうかを判断します。
コードは次のとおりです | コードをコピー |
関数 SQLString($c, $t){ |
データベース攻撃を防ぐ正しい方法
コードは次のとおりです | コードをコピー |
関数 check_input($value) { //スラッシュを削除します if (get_magic_quotes_gpc()) { $value = ストリップスラッシュ($value); } //数値でない場合は引用符を追加してください if (!is_numeric($value)) { $value = “‘” .mysql_real_escape_string($value) . }$value を返す; } $con = mysql_connect(“localhost”, “hello”, “321″); if (!$con) { die(‘接続できませんでした: ‘ .mysql_error()); } // 安全な SQL を作成する $user = check_input($_POST['user']); $pwd = check_input($_POST['pwd']); $sql = “SELECT * FROM users WHERE ユーザー=$user AND パスワード=$pwd”; mysql_query($sql); mysql_close($con); ?>
|