mysql_real_escape_string
mysql_real_escape_string - 转义特殊字符在一个SQL语句中使用的字符串
字符串 mysql_real_escape_string( 字符串 $ unescaped_string [, 资源 $ link_identifier])
.转义特殊字符unescaped_string,考虑到当前字符集的连接,以便它是安全的放置在mysql_query它()。如果二进制数据将被插入,这个函数必须使用。
调用MySQL的库函数mysql_real_escape_string,其中前添加反斜杠下列字符
此函数必须始终(少),用于制造的数据安全例外在发送查询到MySQL
nescaped_string
该字符串转义。
link_identifier link_identifier
The MySQL connection. MySQL的连接。 如果链接标识没有指定,最后一个环节开幕mysql_connect()函数假定。如果没有这样的链接被发现,它会尝试创建一个仿佛mysql_connect()函数是不带参数的要求。如果没有发现或连接建立一条E_WARNING级别的错误的产生。
例子1简单mysql_real_escape_string()例子
<?php
// Connect
$link = mysql_connect ( 'mysql_host' , 'mysql_user' , 'mysql_password' )
OR die( mysql_error ());
// Query
$query = sprintf ( "SELECT * FROM users WHERE user='%s' AND password='%s'" ,
mysql_real_escape_string ( $user ),
mysql_real_escape_string ( $password ));
?>
例如#2例如SQL注入攻击
<?php
// Query database to check if there are any matching users
$query = "SELECT * FROM users WHERE user=' { $_POST [ 'username' ]} ' AND password=' { $_POST [ 'password' ]} '" ;
mysql_query ( $query );
// We didn't check $_POST['password'], it could be anything the user wanted! For example:
$_POST [ 'username' ] = 'aidan' ;
$_POST [ 'password' ] = "' OR ''='" ;
// This means the query sent to MySQL would be:
echo $query ;
?>
查询发送到MySQL的:
SELECT * FROM users WHERE user='aidan' AND password='' OR ''=''选择*从用户其中user ='艾丹'和password = ''或''=''
这将允许任何人没有一个有效的登录密码登录。