如何防止客户端代码中的表单黑客攻击

How to prevent form hacking in client-side code

提问人:djeetee 提问时间:5/7/2020 更新时间:5/7/2020 访问量:736

问:

这是一个普遍的问题,而不是我在代码方面遇到的一个具体问题。这个问题出现了,讨论了使用VueJS等框架的利弊,并在客户端上执行表单验证,而不是将数据提交到控制器进行数据验证的服务器。

他的论点是,由于代码(即JS代码)和数据驻留在客户端上,因此总是有可能有人篡改数据/代码,然后将数据提交到服务器,从而绕过验证。我是 VueJS 的新手,来自 PHP + CodeIgniter,想听听你对这个主题的看法。

这个论点的有效性如何?

谢谢

JavaScript vue.js 安全 客户端

评论

1赞 Phil 5/7/2020
“这个论点有多有效?”非常有效。StackOverflow 不是一个论坛
0赞 djeetee 5/7/2020
哇!感谢大家的及时回复。好的,3条评论:1)问题不是特定于密码的,2)暂时忽略忘记在服务器上实现验证的情况,难道您不想在服务器上而不是在两个地方实现所有验证吗?3) 使用 Firebase 后端实现服务器端验证(假设它是 VueJS SPA)的最佳方法是什么?我在这里寻找商业公共应用程序的最佳实践。再次感谢。
0赞 djeetee 5/7/2020
@Phil,我知道这不是一个讨论论坛,但是恕我直言,我认为这个话题是一个有效的编码问题。
0赞 Phil 5/7/2020
如果你有一个具体的问题,那会是,但现在,你正在征求偏离主题的意见
2赞 Jackson 5/7/2020
它不仅适用于密码,而且老实说适用于任何表单字段。您也不想在服务器上而不是在 2 个地方实施 ALL 验证吗?不。通过客户端验证,您可以改善用户体验,减少延迟,减少不必要的瓶颈和网络流量,因为不是每个人都会为了好玩而关闭 js 或拦截数据包。但是,我确实同意服务器端验证更重要,应该在开发过程中优先考虑。但也不要取消客户端验证。不那么重要并不意味着不重要。

答:

2赞 Joseph Sible-Reinstate Monica 5/7/2020 #1

是的,恶意用户可以篡改客户端代码并删除所有安全和验证检查。试图阻止他们是浪费时间和精力。相反,将所有此类检查移出客户端代码并移入服务器端代码。

评论

0赞 Phil 5/7/2020
同时进行客户端和服务器端验证没有错
0赞 Joseph Sible-Reinstate Monica 5/7/2020
@Phil我想说的是,它有一点问题:如果你忘记了服务器端的验证检查,你的测试人员可能不会注意到客户端上是否有这样的检查。
1赞 A. L 5/7/2020
@JosephSible-恢复莫妮卡,这不是争论的焦点。注意“两者”这个词
0赞 Joseph Sible-Reinstate Monica 5/7/2020
@A.Lau 我的观点是,如果你的策略是两者兼而有之,而你忘记了服务器端的策略,你可能在测试中不会注意到,但如果你的策略是只有服务器端的,而你忘记了它,你更有可能在测试中注意到。
2赞 A. L 5/7/2020
你的论点从字面上看毫无意义。测试并非专门针对服务器或客户端。您可以为两者编写测试。编写客户端验证是为了确保用户不会提交表单,然后收到“拒绝”错误,因为未正确设置必需或特定格式。这就像您可以在信用卡字段中输入字母或超过 16 位数字一样。客户端不是安全性,而是便利性。
1赞 Jackson 5/7/2020 #2

有效性如何?非常有效。

客户端验证非常容易绕过。这就是为什么您甚至需要在服务器端检查输入的原因。

话虽如此,出于多种原因,客户端验证仍然有用。例如,如果您的密码必须是字母数字,则需要先在客户端进行检查。仅仅因为您的密码要求太难达到,您的服务器就遇到瓶颈并不好玩。从本质上讲,如果没有客户端验证,每次有人输入的密码强度较低时,它都会进入您的服务器,然后返回,这是延迟和不必要的网络流量。

话虽如此,您仍然应该在服务器端验证它们是否为字母数字。