2014-10-11 20 views
-3

难道我总是需要验证用户输入,即使我没有真正将它们保存到一个数据库,文件,或利用他们包括文件等。难道我总是需要验证请求变量

说我只是想回应一个请求变量,或者我用它来发送电子邮件,是否有任何需要验证或清理它?我一直听到有人说在做任何事情之前都应该检查所有的用户输入,但是如果我没有进行上述任何操作,它是否会带来任何威胁?

+0

如果请求变量包含''?如果你“回应”它会发生什么? – JJJ 2014-10-11 17:03:57

+0

即使你只是“回应”。如果我回应了一个iFrame,你会有什么感觉? – 2014-10-11 17:04:00

+0

这不仅仅是关于你和你的分数...... – 2014-10-11 17:04:56

回答

0

我不会推荐它。我的规则是 - 绝不信任用户的输入。 可以说你的团队工作。如你所写,你建立一个简单的表单,将数据提交给php文件并发送给它。 3周后另一名队友想要使用该表格。 他假设php文件中的数据是干净的。他不知道你没有过滤它。 这是一个麻烦的破解。

0

难道我总是需要验证用户输入,即使我没有真正将它们保存到一个数据库,文件,或利用他们包括文件等。

一切你要用户提供的数据取决于你将要使用它的上下文。在你的单句中,你已经在讨论3种不同的上下文(db,file,include)。所有这些都需要一个不同的策略来防止特定情况下的事情发生。

说我只是想回应一个请求变量或我用它来发送电子邮件,是否有任何需要验证或消毒?

除验证和消毒外,还有更多的事情可以做。是的,你应该处理这个案件(这是另一个背景btw)。基本上你应该处理所有用户数据,就好像它是恶意的一样。即使你只是“echo”。当你只是“echo ing”时,我可以做很多事情。

考虑到我们是在一个HTML页面,我可以举例来说(但不限于)的情况下做的:

<script>location.href='http://example.com/my-malicious-page'</script> 

这对于例如,你的网站有一个登录表单的精确副本。

<script>var cookies = document.cookie; // send cookieinfo to my domain</script> 

它可以用来获取当前域的所有cookie(可能包括会话cookie)。 (请注意,可以通过设置cookie上的http only标志来缓解这种情况)。

<script>document.querySelector('body')[0].appendChild('my maliscious payload containing all kinds of nasty stuff');</script> 

这使得侧载病毒或其他令人讨厌的东西成为可能。

<!-- 

搞糟你的布局/网站。有几种方法可以做到这一点。

我总是听到人们说,所有的用户输入应该做它

这主要是错误的东西之前检查。一旦你知道你将要做什么,你只需要决定你将如何处理一段数据。这是因为你想在不同情况下防止不同的事情。一些例子是(但不限于):目录遍历,代码注入,sql注入,xss,csrf。

以上所有攻击媒介需要不同的策略来防止它们。

,但它实际上构成任何威胁,如果我没有做任何上述

是完全如上所述。所有来自第三方的数据(这意味着用户输入以及外部服务以及数据库中的数据)应该被视为传染病。