接受Javascript生成的表单输入

接受Javascript生成的表单输入,javascript,forms,security,validation,Javascript,Forms,Security,Validation,通常认为接受从JavaScript派生的输入是不好的做法,因为您不应该信任来自客户端的任何东西 但这是否也意味着,如果不在服务器上进行验证,您就不能信任投递箱选择等?您可以在Firebug中轻松添加自己的选择选项 那么,如果我违反了这一最佳实践(因为我不接受信用卡付款或任何安全性如此重要的东西),有什么方法可以最大限度地降低问题风险?例如,有没有办法让最终用户更难修改JavaScript创建的值?当我们这样做的时候,有没有办法增加修改投递箱等的难度?一般规则就是不要信任客户提供的任何东西 它包括

通常认为接受从JavaScript派生的输入是不好的做法,因为您不应该信任来自客户端的任何东西

但这是否也意味着,如果不在服务器上进行验证,您就不能信任投递箱选择等?您可以在Firebug中轻松添加自己的选择选项


那么,如果我违反了这一最佳实践(因为我不接受信用卡付款或任何安全性如此重要的东西),有什么方法可以最大限度地降低问题风险?例如,有没有办法让最终用户更难修改JavaScript创建的值?当我们这样做的时候,有没有办法增加修改投递箱等的难度?

一般规则就是不要信任客户提供的任何东西

它包括所有表单输入,这些表单输入来自javascript或其他

始终在服务器端验证和清理传入的数据,否则您可能根本没有任何形式的验证

一般来说,客户端验证通常是用户方便的功能,与数据安全无关

记住,使用表单不需要Javascript。。。你认为垃圾邮件机器人是如何工作的?他们肯定没有启用javascript

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

提交表单甚至不需要浏览器。。玩过卷发吗?您可以直接从命令行轻松快速地提交所需的任何原始POST数据

问题不在于它是否是像信用卡这样的敏感信息。。。这同样与丢失数据有关您可以丢失数据吗?如果可以,您首先为什么要收集数据


造成破坏是黑客超越个人利益的主要动机,如果他们看到一个容易攻击的目标,并且可以用一个命令摧毁某人的数据,他们可能会尝试一下。

一般规则是不信任客户提供的任何东西

它包括所有表单输入,这些表单输入来自javascript或其他

始终在服务器端验证和清理传入的数据,否则您可能根本没有任何形式的验证

一般来说,客户端验证通常是用户方便的功能,与数据安全无关

记住,使用表单不需要Javascript。。。你认为垃圾邮件机器人是如何工作的?他们肯定没有启用javascript

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

提交表单甚至不需要浏览器。。玩过卷发吗?您可以直接从命令行轻松快速地提交所需的任何原始POST数据

问题不在于它是否是像信用卡这样的敏感信息。。。这同样与丢失数据有关您可以丢失数据吗?如果可以,您首先为什么要收集数据


造成破坏是黑客超越个人利益的主要动机,如果他们看到一个容易攻击的目标,并且可以用一个命令破坏某人的数据,他们可能会尝试一下。

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

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


但这两种方法都需要服务器端验证。

您无法阻止客户端表单篡改表单数据

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


但这两种方法都需要服务器端验证。

忘记数据来自何处。服务器上的代码可能不知道数据来自何处,而只知道它来自外部世界,因此在证明它是恶意的之前,您需要假定它是恶意的

因此,如果您“违反此最佳实践”,那么“最小化风险的技术”基本上是:不要违反此最佳实践:验证传入数据

关于让修改HTML表单或JS值变得更加困难的第二点:请记住,浏览器是在其他人的计算机上运行的程序,最终他们将能够让它做任何他们想做的事情,包括直接发送HTTP请求

唯一可以真正实施安全性的地方是服务器上


编辑:我花了很长时间才提交这篇文章,同时其他人的回答更简洁

忘记数据来自何处。服务器上的代码可能不知道数据来自何处,而只知道它来自外部世界,因此在证明它是恶意的之前,您需要假定它是恶意的

因此,如果您“违反此最佳实践”,那么“最小化风险的技术”基本上是:不要违反此最佳实践:验证传入数据

关于让修改HTML表单或JS值变得更加困难的第二点:请记住,浏览器是在其他人的计算机上运行的程序,最终他们将能够让它做任何他们想做的事情,包括直接发送HTTP请求

唯一可以真正实施安全性的地方是服务器上


编辑:我花了很长时间才提交这篇文章,同时其他人的回答更简洁

所有不是来自服务器的数据都是客户端数据我认为您必须始终进行验证