当前位置:  开发笔记 > 编程语言 > 正文

过滤器输入转义输出,还是转义输入过滤器输出?

如何解决《过滤器输入转义输出,还是转义输入过滤器输出?》经验,为你挑选了1个好方法。

我有点困惑。当我在Google上输入文字时,几乎所有文章都建议Filter input, escape output.如果我不混淆逃避和过滤生活的术语,那应该是相反的。

您会收到大量类似的文章

$username = htmlentities(htmlspecialchars(strip_tags($_POST['username')));

并建议这样做。

    我们不应该过滤输入。我们应该对其进行转义(以前我们使用mysql_real_ escape_string进行了处理,如今,准备好的语句为我们处理了它们。)我们应该将用户提交的数据插入数据库中as-is,而不必使用诸如的功能对其进行更改htmlspecialchars。我们应该始终将原始输入保留在我们的数据库中,因此htmlspecialchars在输入过程中是错误的。HTML对数据库无害。

    我们应该过滤输出,以便恶意代码(html,js等)不会在浏览器上运行。这叫做XSS filtering,不是XSS escaping。例如,{{{ $var }}}在Laravel 4上称为as,XSS filtering并且应始终将其用于用户提交的内容的输出。

如果该语句Filter input escape output是正确的,为什么不正确,mysql_real_filter_string()并且防止XSS不被称为XSS escaping

另外,ircmaxell曾经说过:

过滤不是要防止安全漏洞,而是要不要用垃圾填充数据库。如果您希望有一个日期,请确保它至少看起来像是存储日期之前的日期。

这称为validation,您不能仅依靠验证。(特别是在旧版本的PHP上)您需要转义和验证输入。筛选可能不会用于安全漏洞,但会转义。

好吧,这使我感到困惑。谁可以给我解释一下这个?



1> Aristona..:

看起来我的困惑很简单。我以为输出层是我们开始使用时的层echo,例如视图层。

根据Anthony Ferrara的说法,输出是数据离开应用程序时的层,输入是数据进入应用程序时的层。

因此,Input层不仅限于用户提供的内容,而且从配置文件读取,从文件系统读取,从第三方API检索数据等都被视为Input

Output不限于视图层echoprint在视图层上。SQL queries也算作output,因为数据离开我们的应用程序并进入数据库的范围。这样,写入文件也算作输出,执行shell命令也算作输出。

因此,基本上,查询数据库为Output,而从数据库中检索结果为Input

当您这样想时,Filter input, escape output听起来是正确的。如果其他人像我一样困惑,那确实是有道理的。

推荐阅读
拾味湖
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有