避免MySQL注入替换单引号和双引号
来清理用户输入我们通常使用mysql_real_escape_string,但例如如果我想逃跑:O'Brian它会返回O \'布莱恩,我不太喜欢这个,因为如果我想要打印这个名字,我不得不去掉所有的时间。 所以我想使用此功能:避免MySQL注入替换单引号和双引号
$search = array("'", '"');
$replace = array("´", "“");
$str_clean = str_replace($search, $replace, "O'Brian");
这是简单的功能,保护我从MySQL-注入? 非常感谢,并为我的糟糕英语感到遗憾。
是的,很显然它是从SQL Injection
攻击
它避开了特殊字符在unescaped_string
,考虑到当前的保护连接的字符集,以便安全地放入一个mysql_query()
。
我总是使用UTF-8 ,所以我也受到像0x27等十六进制字符串的保护? – 2012-03-23 10:18:22
mysql_real_escape_string确实只为字符串转义添加\
并且不会将它们添加到数据库,因此您不必在显示内容时使用stripslashes。
如果你真的获得存储在数据库中的\
,做off
的magic_quote
magic_quote是关闭的;)所以我必须使用mysql_real_escape_string只用于SELECT查询,而不是UPDATE或INSERT,对不对? – 2012-03-23 10:10:42
@SimoneVerzino:你需要它,你需要为mysql转义字符串。 – 2012-03-23 10:18:21
你应该总是使用mysql_real_escape_string
逃脱输入。这是为什么当你写入值到你的数据库,而不是当你读取值从你的数据库。当你将“O \'Brian”写到你的数据库中时,它会被存储为“O'Brian”,当你读出它时,你还应该得到“O'Brian”(并且不需要去掉斜杠,因为它们不存在)。
好的,但是如果我必须做一个SELECT FROM USERS WHERE name ='O'Brian'我必须逃避它,并且用我的功能我会解决问题吗? – 2012-03-23 10:14:58
是的,你也必须逃避变量。所以像'$ user = mysql_real_escape_string($ user); mysql_query(“SELECT * FROM USERS WHERE name ='$ user'”);' – 2012-03-23 10:30:40
对不起,但我不想使用面向对象的风格:( – 2012-03-23 10:06:55
mysqli有非OOP选项以及 – scibuff 2012-03-23 10:47:07
Chk this它会帮你起来:http://stackoverflow.com/questions/139199/can-i-protect-against-sql-injection-by-escaping-single-quote-and-surrounding-use – 2012-03-23 10:03:04