2012-03-23 183 views
1

来清理用户输入我们通常使用mysql_real_escape_string,但例如如果我想逃跑:O'Brian它会返回O \'布莱恩,我不太喜欢这个,因为如果我想要打印这个名字,我不得不去掉所有的时间。 所以我想使用此功能:避免MySQL注入替换单引号和双引号

$search = array("'", '"'); 
$replace = array("´", "“"); 
$str_clean = str_replace($search, $replace, "O'Brian"); 

这是简单的功能,保护我从MySQL-注入? 非常感谢,并为我的糟糕英语感到遗憾。

+0

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

回答

1

是的,很显然它是从SQL Injection攻击

它避开了特殊字符在unescaped_string,考虑到当前的保护连接的字符集,以便安全地放入一个mysql_query()

+1

我总是使用UTF-8 ,所以我也受到像0x27等十六进制字符串的保护? – 2012-03-23 10:18:22

2

mysql_real_escape_string确实只为字符串转义添加\并且不会将它们添加到数据库,因此您不必在显示内容时使用stripslashes。

如果你真的获得存储在数据库中的\,做offmagic_quote

+0

magic_quote是关闭的;)所以我必须使用mysql_real_escape_string只用于SELECT查询,而不是UPDATE或INSERT,对不对? – 2012-03-23 10:10:42

+0

@SimoneVerzino:你需要它,你需要为mysql转义字符串。 – 2012-03-23 10:18:21

2

你应该总是使用mysql_real_escape_string逃脱输入。这是为什么当你写入值到你的数据库,而不是当你读取值从你的数据库。当你将“O \'Brian”写到你的数据库中时,它会被存储为“O'Brian”,当你读出它时,你还应该得到“O'Brian”(并且不需要去掉斜杠,因为它们不存在)。

+0

好的,但是如果我必须做一个SELECT FROM USERS WHERE name ='O'Brian'我必须逃避它,并且用我的功能我会解决问题吗? – 2012-03-23 10:14:58

+0

是的,你也必须逃避变量。所以像'$ user = mysql_real_escape_string($ user); mysql_query(“SELECT * FROM USERS WHERE name ='$ user'”);' – 2012-03-23 10:30:40