2011-11-01 105 views
1

由于不应该信任来自客户端的任何信息,因此通常认为接受来自JavaScript的输入通常被认为是不好的做法。接受Javascript生成的表单输入

但是,这是否也意味着您不能相信下拉框选择等,而无需在服务器上验证它?您可以轻松地在Firebug中添加自己的选择选项。所以,如果我违反了这个最佳做法(因为我不接受信用卡付款或任何安全关键因素),是否有任何技术可以最大限度地减少问题风险?例如,是否有方法让最终用户更难以修改JavaScript创建的值?当我们处理它时,是否有任何方法来增加修改下拉框等的难度?

+0

所有的数据不是来自服务器的客户端数据 – Teneff

+0

我认为无论您如何接收数据,我总是需要在服务器端验证数据。因此,用户可以将任何他想要的内容发送给您的应用程序,然后阻止它。 – 2011-11-01 14:12:09

+0

攻击者只是用tamperdata或burp修改http请求,修改论坛的自我太麻烦了。 – rook

回答

1

您将无法阻止客户表单篡改您的表单数据。

您可以添加从您提供的所有已知值中获取的哈希值,并将其存储在隐藏字段中。或者像贝宝按钮剂量那样加密值的种类。

这两种方法仍然需要服务器端验证。

+0

但是,如果可以构造散列以始终提供符合某些验证规则的答案,那么这将非常有用,因为在所有情况下都不需要新验证。 – Joe

3

的一般规则是根本就没有信任任何从客户端...

这包括ALL形式输入,从JavaScript或以其他方式得到的。

总是在服务器端验证和清理传入数据,或者您可能根本没有任何形式的验证。

一般的客户端验证通常是为用户一个方便的特性,并具有无关,与数据安全

请记住,JavaScript不需要使用表单......您如何看待垃圾邮件机器人工作?他们肯定没有启用javascript ...

您提出的任何解决方案都会提供超过虚假的安全感涉及输入的服务器端验证。

你甚至不需要浏览器来提交表格......曾经玩过cURL吗?您可以轻松快速地从命令行直接提交您想要的任何原始POST数据。

问题不在于它是否像信用卡这样的敏感信息......这与丢失数据一样多。 你可以放弃数据吗?如果是这样,为什么你首先收集它?

造成破坏是黑客高于个人利益的主要动力,如果他们看到一个简单的目标,并且可以用一个命令摧毁某人的数据,他们可能会给它一个镜头。

+0

+1在我的领先。 –

+0

@Michael WHoa!?!你删除了一个答案,因为你发现以前的答案是足够的?这是Bizzaro世界StackOverflow? – jondavidjohn

+0

我明白你的观点。但是,我会说客户端验证是安全性较弱,而非非安全性。因此,当需要强大的安全性时,您必须在服务器端冗余地提供所有安全性。但是,我也相信在有些情况下,安全性不足就足够了。如果我的前提被接受了,那么这就提出了一个问题:“有没有便利的方法来使弱安全性变得更强?” – Joe

0

忘记数据来自哪里。您的服务器上的代码可能不知道数据来自何处,除了来自外部世界,因此您需要假设它是恶意的,直到证明其他情况。

因此,如果您“违反此最佳做法”,“最大限度地降低风险的技术”基本上是:不违反此最佳做法:验证传入数据。

重新提出修改HTML表单或JS值更难的第二点:记住浏览器是运行在别人计算机上的程序,最终他们将能够做到任何他们想做的事情,包括发送HTTP直接请求。

您实际上可以强制执行安全措施的唯一地方是在服务器上。

编辑:我花了这么长的时间来提交这个文件,其他人在同一时间更简洁地回答了它。