消除POST htmlentities或加上stripslashes和strip_tags

时间:2016-01-08 18:28:09

标签: php security

一如既往,我开始说我正在学习。 我在几本书中看到,甚至在这里,当我们谈论清理时,很多用户,例如,Form>输入>提交,他们使用

function sanitizeexample($param)
{
    $param = stripslashes($param);
    $param = strip_tags($param);
    $param = htmlentities($param);
    return $param;
}

$name = sanitizeexample($_POST['name']);

而不是 JUST

function sanitizeexample($param)
{
    $param = htmlentities($param);
    return $param;
}

$name = sanitizeexample($_POST['name']);

所以这里的问题。 stripslashes()和strip_tags()提供有关安全性的其他内容吗?或者 htmlentities()就足够了。

我要求知道哪个是最好用的。

2 个答案:

答案 0 :(得分:0)

strip_tags()是否提供增值取决于您的特定用例。如果您htmlentities()包含html标记的字符串,您将获得在页面上转义和呈现的原始html内容。您给出的示例可能假设这是您想要的,因此首先执行strip_tags(),删除html标记。

stripslashesaddslashes相反。在现代(PHP> = 5.4)PHP代码中,这不是必需的。在遗留系统上,启用magic_quotes_gpc后,来自请求变量的用户输入将使用addslashes自动转义,以使其“安全”#34;直接用于数据库查询。这被广泛认为是一个坏主意(因为它实际上并不安全,原因很多)并且magic_quotes已被删除。因此,您现在通常不需要stripslashes()用户输入。 (您是否真的需要依赖于PHP版本和ini设置。)

(请注意,您仍然需要正确转义进入数据库的任何内容,但最好使用参数化查询或特定于数据库的转义函数来完成,这两个函数都超出了本问题的范围。)

答案 1 :(得分:0)

这取决于你的目标:

  • 如果您从html表单获取用户的数据 - 您应该这样做 绝对适用strip_tags(trim($_POST['name']))方法 消除可能不安全和过多的数据。
  • 如果您要接收上传的用户的文件内容并需要保存 内容格式 - 你必须考虑如何安全地处理和 存储这些文件进行一些特定的(选择性)消毒