词条 | mysql_real_escape_string |
释义 | 语言/版本PHP PHP 4 >= 4.3.0 PHP 5 定义和用法mysql_real_escape_string() 函数转义 SQL 语句中使用的字符串中的特殊字符。 下列字符受影响: \\x00 \ \\r \\ ' " \\x1a 如果成功,则该函数返回被转义的字符串。如果失败,则返回 false。 语法mysql_real_escape_string(string,connection) 参数 描述 string 必需。规定要转义的字符串。 connection 可选。规定 MySQL 连接。如果未规定,默认使用上一个连接。 说明本函数将 string 中的特殊字符转义,并考虑到连接的当前字符集,因此可以安全用于 mysql_query()。 mysql_real_escape_string() 并不转义 % 和 _。 可使用本函数来预防数据库攻击。 常规案例:例一;攻击案例:例二;解决攻击案例:例三。 例一<?php $con = mysql_connect("localhost", "hello", "321"); if (!$con) { die('Could not connect: ' . mysql_error()); } // 获得用户名和密码的代码 // 转义用户名和密码,以便在 SQL 中使用 $user = mysql_real_escape_string($user); $pwd = mysql_real_escape_string($pwd); $sql = "SELECT * FROM users WHERE user='" . $user . "' AND password='" . $pwd . "'"; // 更多代码 mysql_close($con); ?> 例二<?php $con = mysql_connect("localhost", "peter", "abc123"); if (!$con) { die('Could not connect: ' . mysql_error()); } $sql = "SELECT * FROM users WHERE user='{$_POST['user']}' AND password='{$_POST['pwd']}'"; mysql_query($sql); // We didn't check username and password. // Could be anything the user wanted! Example: $_POST['user'] = 'john'; $_POST['pwd'] = "' OR ''='"; // some code mysql_close($con); ?> SQL语句就会如下: SELECT * FROM users WHERE user='john' AND password='' OR ''='' 这意味着任何用户无需输入合法的密码即可登陆。 例三<?php function check_input($value) { // Stripslashes if (get_magic_quotes_gpc()) { $value = stripslashes($value); } // Quote if not a number if (!is_numeric($value)) { $value = "'" . mysql_real_escape_string($value) . "'"; } return $value; } $con = mysql_connect("localhost", "peter", "abc123"); if (!$con) { die('Could not connect: ' . mysql_error()); } // Make a safe SQL $user = check_input($_POST['user']); $pwd = check_input($_POST['pwd']); $sql = "SELECT * FROM users WHERE user=$user AND password=$pwd"; mysql_query($sql); mysql_close($con); ?> |
随便看 |
百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。