定義と使用法
mysql_real_escape_string() 関数は、SQL ステートメントで使用される文字列内の特殊文字をエスケープします。
次の文字が影響を受けます:
×00
ん
「
x1a
成功すると、関数はエスケープされた文字列を返します。失敗した場合は false を返します。
文法
mysql_real_escape_string(文字列,接続)
パラメータの説明
文字列が必要です。エスケープする文字列を指定します。
接続はオプションです。 MySQL 接続を指定します。指定しない場合は、以前の接続が使用されます。
説明
この関数は、接続の現在の文字セットを考慮して文字列内の特殊文字をエスケープするため、mysql_query() で安全に使用できます。
ヒントとメモ
ヒント: この機能を使用すると、データベース攻撃を防ぐことができます。
例
例 1
$con = mysql_connect("localhost", "hello", "321");
if (!$con)
{
die('接続できませんでした: ' .mysql_error());
}
// ユーザー名とパスワードを取得するコード
// SQL で使用するためにユーザー名とパスワードをエスケープします
$user = mysql_real_escape_string($user);
$pwd = mysql_real_escape_string($pwd);
$sql = "SELECT * FROM ユーザーどこから
user='" . $user . "' AND パスワード='" . $pwd . "'"
// さらにコード
mysql_close($con);
?>
例 2
データベース攻撃。この例は、mysql_real_escape_string() 関数をユーザー名とパスワードに適用しない場合に何が起こるかを示しています:
$con = mysql_connect("localhost", "hello", "321");
if (!$con)
{
die('接続できませんでした: ' .mysql_error());
}
$sql = "ユーザーから * を選択
WHERE ユーザー='{$_POST['ユーザー']}'
かつパスワード='{$_POST['pwd']}'";
mysql_query($sql);
// ユーザー名とパスワードをチェックしません // 次のようなユーザーが入力したものであれば何でも構いません:
$_POST['ユーザー'] = 'ジョン';
$_POST['pwd'] = "' OR ''='";
// いくつかのコード...
mysql_close($con);
?>
SQL クエリは次のようになります:
ユーザーから * を選択
WHERE ユーザー='ジョン' AND パスワード='' または ''=''
これは、どのユーザーも有効なパスワードを入力しなくてもログインできることを意味します。
例 3
データベース攻撃を防ぐための正しい実践方法:
関数 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 ユーザーどこから
ユーザー=$user AND パスワード=$pwd";
mysql_query($sql);
mysql_close($con);
?>
著者「向こう岸」