|
mysql_real_escape_stringSQL 文中で用いる文字列の特殊文字をエスケープする 警告
この拡張モジュールは PHP 5.5.0 で非推奨になり、PHP 7.0.0 で削除されました。 MySQLi あるいは PDO_MySQL を使うべきです。詳細な情報は MySQL: API の選択 を参照ください。 この関数の代替として、これらが使えます。
説明
string mysql_real_escape_string(string
$unescaped_string , resource $link_identifier = NULL)
現在の接続の文字セットで
mysql_real_escape_string は、MySQL のライブラリ関数
mysql_real_escape_string をコールしています。
これは以下の文字について先頭にバックスラッシュを付加します。
データの安全性を確保するため、MySQL へクエリを送信する場合には (わずかな例外を除いて)常にこの関数を用いなければなりません。 警告
セキュリティ: デフォルトの文字セットサーバーレベルで設定するなり API 関数 mysql_set_charset を使うなりして、 文字セットを明示しておく必要があります。この文字セットが mysql_real_escape_string に影響を及ぼします。詳細は 文字セットの概念 を参照ください。 パラメータ
戻り値
成功した場合にエスケープ後の文字列、失敗した場合に エラー / 例外
MySQL 接続が存在しない状態でこの関数を実行すると、
例
例1 単純な mysql_real_escape_string の例
<?php
例2 mysql_real_escape_string には接続が必須であることを示す例 この例では、MySQL 接続が存在しない状態でこの関数を実行したときにどうなるかを示します。
<?php 上の例の出力は、 たとえば以下のようになります。 Warning: mysql_real_escape_string(): No such file or directory in /this/test/script.php on line 5 Warning: mysql_real_escape_string(): A link to the server could not be established in /this/test/script.php on line 5 bool(false) string(41) "SELECT * FROM actors WHERE last_name = ''"
例3 SQL インジェクション攻撃の例
<?php MySQL に送信されたクエリは次のとおり: SELECT * FROM users WHERE user='aidan' AND password='' OR ''='' これでは、パスワードを知らなくても誰でもログインできてしまいます。 注意
参考
|