【问题标题】:strip_tags not workingstrip_tags 不工作
【发布时间】:2011-12-20 18:30:10
【问题描述】:

我想像这样过滤掉 html 字符

$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吗?

【问题讨论】:

  • 哪些HTML字符没有被过滤掉? strip_tags 不会过滤掉所有的 HTML,只会过滤掉一些标签。除此之外,盲目地应用一些 esacpe 或 strip 功能不会增加太多安全性,您需要知道您具体做什么。这就是输入验证、清理和构建数据库查询的难点。
  • 它的顺序也是错误的(即使 strip_tags 不太可能撤消转义)。

标签: php mysql html filter strip-tags


【解决方案1】:

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

$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() 相同),这些函数不会直接更改字符串,而是返回修改后的复制。所以你必须将返回值分配给同一个(或另一个)变量!

【讨论】:

  • 听起来不错,但标准方法是 strip_tags(html_entity_decode($user))
【解决方案2】:
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

【讨论】:

    【解决方案3】:

    你不正确地使用strip_tags

    string strip_tags (string $str [, string $allowable_tags])

    修改代码以将其分配给返回值应该可以修复它

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

    编辑

    为了完整起见,感谢 lorenzo-s 指出,您还需要对 mysql_real_escape_string 执行相同操作

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

    【讨论】:

    • 如果这是问题所在,他也会在mysql_real_escape_string() 上犯同样的错误。
    【解决方案4】:

    如前所述

    $user = strip_tags($user);
    

    应该使用,但我也会放

    mysql_real_escape_string($user);
    

    在调用 strip_tags() 之后;

    【讨论】:

    • strip_tags / mysql_real_escape_string 的顺序应该无关紧要。至于个人喜好,我同意。
    猜你喜欢
    • 2018-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多