接受源自JavaScript的输入通常被认为是不好的做法,因为您不应该信任来自客户端的任何内容。
但这不也意味着你不能相信丢弃盒选择等,而不在服务器上验证它吗?您可以在Firebug中轻松添加自己的选择选项。
因此,如果我违反了这种最佳做法(因为我不接受信用卡付款或任何其他安全问题),是否有任何技术可以最大限度地降低问题风险?例如,有没有办法让最终用户更难以修改JavaScript创建的值?虽然我们在这里,有没有办法增加修改投币箱的难度等等?
答案 0 :(得分:3)
一般规则是不要信任来自客户的任何 ......
包括 所有 表单输入,源自javascript或其他。
始终验证并清理服务器端的传入数据,或者您可能根本没有任何形式的验证。
通常,客户端验证通常是用户的便利功能,与数据安全无关。
请记住,Javascript不需要使用表单...您认为垃圾邮件机器人如何工作?他们肯定没有启用JavaScript ...
您提出的任何解决方案提供的不仅仅是错误的安全感涉及输入的服务器端验证。
您甚至不需要浏览器提交表格..曾经玩过cURL?您可以直接从命令行轻松快速地提交所需的任何原始POST数据。
问题不在于它是否是敏感信息,如信用卡......这与丢失数据同样重要。 您是否可以放弃数据?如果是这样,您为什么要首先收集它?
导致破坏是黑客获取个人利益的主要动力,如果他们看到一个简单的目标,并且可以用一个命令摧毁某些人的数据,他们可能会给它一个机会。
答案 1 :(得分:1)
您无法阻止客户端表单篡改表单数据。
您可以添加从您提供的所有已知值中获取的哈希值,并将它们存储在隐藏字段中。或加密价值类似于贝宝按钮剂量。
这两种方法仍需要服务器端验证。
答案 2 :(得分:0)
忘记数据的来源。您在服务器上的代码可能不知道数据来自哪里,除了它来自外部世界,因此您需要假设它是恶意的,直到证明不是这样。
如果您“违反此最佳做法”,那么“将风险降至最低”的技术基本上是:不要违反此最佳做法:确认传入数据。
关于修改HTML表单或JS值更难的第二点:记住浏览器是在别人的计算机上运行的程序,并且最终他们能够使它做任何他们想做的事情,包括发送HTTP请求直。
您可以实际执行安全性的唯一地方是服务器。
编辑:我花了很长时间才提交这个,以至于其他人在同一时间更简洁地回答了这个问题。