2011-12-20 34 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