Php 我是否总是需要验证请求变量

Php 我是否总是需要验证请求变量,php,Php,我是否总是需要验证用户输入,即使我实际上没有将它们保存到数据库、文件或使用它们包含文件等 假设我只是想回显一个请求变量,或者我正在使用它发送电子邮件,是否需要验证或清理它?我经常听到人们说,在对用户输入进行任何操作之前,都应该检查所有用户输入,但如果我不执行上述任何操作,它是否真的会造成任何威胁 我不推荐。 我的规则是-永远不要相信用户的输入。 假设你在一个团队中工作。 正如您所写的,您构建了一个简单的表单,将数据提交到php文件,然后将其发送出去。 3周后,另一名队友希望使用该表格。 他假设p

我是否总是需要验证用户输入,即使我实际上没有将它们保存到数据库、文件或使用它们包含文件等

假设我只是想回显一个请求变量,或者我正在使用它发送电子邮件,是否需要验证或清理它?我经常听到人们说,在对用户输入进行任何操作之前,都应该检查所有用户输入,但如果我不执行上述任何操作,它是否真的会造成任何威胁

我不推荐。 我的规则是-永远不要相信用户的输入。 假设你在一个团队中工作。 正如您所写的,您构建了一个简单的表单,将数据提交到php文件,然后将其发送出去。 3周后,另一名队友希望使用该表格。 他假设php文件中的数据是干净的。他不知道你没有过滤它。 这是个麻烦的地方

我是否总是需要验证用户输入,即使我实际上没有将它们保存到数据库、文件或使用它们包含文件等

使用用户提供的数据所要做的一切都取决于使用它的上下文。在你的一句话中,你已经谈到了3种不同的上下文(数据库、文件、包含)。所有这些都需要一种不同的策略来防止特定环境下的事情发生

假设我只是想回显一个请求变量,或者我正在使用它发送电子邮件,是否需要验证或清理它

除了验证和消毒,您还可以做更多的事情。是的,你应该处理这个案例(顺便说一句,这是另一个上下文)。基本上,您应该像处理恶意数据一样处理所有用户数据。即使你“只是
echo
ing它”。当你“只是
echo
ing”的时候,我可以做很多事情

考虑到我们处于HTML页面的上下文中,我可以(但不限于)执行以下操作:

location.href='fonthttp://example.com/my-malicious-page'
例如,它可以是您网站的精确副本,带有登录表单

<script>var cookies = document.cookie; // send cookieinfo to my domain</script>
var cookies=document.cookie;//将cookieinfo发送到我的域
可用于获取当前域的所有cookie(可能包括会话cookie)。(请注意,应通过在Cookie上设置http only标志来缓解此问题)

document.querySelector('body')[0].appendChild('my Malicous payload,包含各种讨厌的东西');
这使得病毒或其他讨厌的东西有可能被旁路

<!--

如果请求变量包含
警报('haxxor')?如果你“只是呼应”它会发生什么?即使你“只是”呼应它。如果我发出一个iFrame,你会有什么感觉?这不仅仅是关于你和你的db…呃,是的。如果您“只是”回显请求变量,则有人可以在您的站点上添加XSS(跨站点脚本)攻击。如果将请求变量传递给电子邮件脚本,则可以使用该脚本注入恶意命令。别傻了。人们说永远不要相信用户输入是有原因的;他们并不是为了它而编造出来的。这不是一个真正的编程问题;只是一个“我为什么要做X?”的问题。
<script>document.querySelector('body')[0].appendChild('my maliscious payload containing all kinds of nasty stuff');</script>
<!--