2011-12-20 29 views
2

我修整到HTML字符过滤掉这样用strip_tags不工作

$user = $_POST["user"]; //Get username from <form> 
mysql_real_escape_string($user); //Against SQL injection 
strip_tags($user); //Filter html characters out 

但出于某种原因,这是不过滤HTML字符了。我不知道为什么,可以通过mysql_real_escape_string

+2

哪种HTML字符不会被滤除? ['strip_tags'](http://php.net/strip_tags)不会过滤掉所有的HTML,只是一些标签。除此之外,盲目应用一些esacpe或strip函数并不能增加很多安全性,你需要知道你具体做什么。这是关于输入验证,清理和构建数据库查询的难点。 – hakre 2011-12-20 18:33:53

+0

它也是错误的顺序(即使strip_tags不可能撤销转义)。 – mario 2011-12-20 18:37:57

回答

10

...但是,你的意思是:

$user = $_POST["user"]; // Get username from <form> 
$user = mysql_real_escape_string($user); // Against SQL injection 
$user = strip_tags($user); // Filter html characters out 

正如在其他的答案说(指strip_tags(),但它是mysql_real_escape_string()相同),这些功能不直接修改字符串,而是返回修改后的复制。所以你必须把返回值赋给同一个(或另一个)变量!

+1

+1的完整更正。 – 2011-12-20 18:34:50

+0

妈呀怎么没有我注意到... ...索里我 – Ilja 2011-12-20 18:36:20

+0

可以8分钟后接受你答,日Thnx))) – Ilja 2011-12-20 18:36:48

5
strip_tags($user); //Filter html characters out 

应与此进行更换:

$user = strip_tags($user); //Filter html characters out 

strip_tags返回剥离值

见文件:http://nl2.php.net/strip_tags

这是mysql_real_escape_string()

$user = mysql_real_escape_string($user); //Against SQL injection 
相同0
+1

+1 4秒更快:) – 2011-12-20 18:33:32

2

您正在使用strip_tags不当:

串用strip_tags(字符串$海峡[,字符串$ allowable_tags])

修改代码,将其分配到一个返回值应该修复它

$user = strip_tags($user); //Filter html characters out 

编辑

只是为了完整性的缘故,感谢洛伦佐-S指点出来,你也需要做同样的mysql_real_escape_string

$user = mysql_real_escape_string($user); // Against SQL injection 
+0

如果这是问题,他也会在'mysql_real_escape_string()'上做同样的错误。 – 2011-12-20 18:33:57

+0

是的,你是对的。:) – 2011-12-20 18:34:35

1

前面已经说过

$user = strip_tags($user); 

应该使用,但我也要把

mysql_real_escape_string($user); 

调用用strip_tags()之后;

+0

要不要紧按照'strip_tags' /'mysql_real_escape_string'的顺序。就个人喜好而言,我会同意。 – 2011-12-20 18:37:31