表单提交,测试时发现重复点击后,造成后台数据重复问题,到底是前端的工作,还是开发人员的工作?

2020-10-28 11:09:44 +08:00
 Trinity888

前端开发人员:只负责静态界面、表单校验及相应界面跳转、交互效果的实现

后台开发人员:负责业务逻辑及数据动态内容开发

现测试人员发现:表单提交时,重复点击多次提交按钮,造成数据重复问题。

现在分析:

1 ) 表单提交按钮控制,谁来做?

是前端没有把界面验证做好(例如按钮只能点击一次),还是后台开发没有控制?

2 ) 什么阶段来验证?

前端开发完成后,没有验证测试通过,还是后台开发人员全部完成后验证?
10537 次点击
所在节点    程序员
115 条回复
becauseIdo
2020-10-28 11:14:36 +08:00
前后端都得做。
hryen
2020-10-28 11:14:45 +08:00
后端不能相信前端,前端也应该做控制,所以应该是都有责任 /狗头
redtea
2020-10-28 11:15:34 +08:00
后端必须做,前端建议做。前后端连调通过再让测试验证。
eason1874
2020-10-28 11:16:34 +08:00
都有责任。前端提交时按钮要 disabled,提交成功后要清空表单,提示成功,阻止重复提交。

后端要验证,防止出错重试或者恶意导致的重复提交,比如二次提交加验证码,比如限制两次提交的时间间隔。
saulshao
2020-10-28 11:16:44 +08:00
后端必须做这种检查,因为你无法确定重复数据是由前端提交的,还是由攻击者提交的。
leopod1995
2020-10-28 11:16:52 +08:00
硬要分锅 我觉得是后端占 80%

就算前端只能点击一次 api 直接一秒 call >100 次呢
jinhan13789991
2020-10-28 11:17:19 +08:00
都要做,当然如果是赶工出来的,那就是正常。
如果是开发时间充足,两边都要做。
mirrorpen
2020-10-28 11:18:03 +08:00
前端提交表单后,提交按钮变为不可点击
后端做 CSRF
mosliu
2020-10-28 11:18:48 +08:00
前后端都要做相应处理。
只要没有事先约定。
后端要默认前端是啥也没做的
前端要默认后端是啥都不想的
HashV2
2020-10-28 11:19:05 +08:00
我个人觉得后端再不相信前端也不做这种防错吧

重复表单如果有业务逻辑可以判断重复那后端肯定要加验证

如果没有的话,就是前端的问题啊, 点击提交按钮禁用显示加载动画 等后端处理完 再显示结果+按钮可用就好了.
wysnylc
2020-10-28 11:20:42 +08:00
后端的问题,表单重复提交这问题起码十年以上了你就不能百度学学怎么解决?
young1lin
2020-10-28 11:42:42 +08:00
都得做,后端一定做得要更细致点。前端做可以限流
ryuka
2020-10-28 12:01:52 +08:00
幂等性设计啊
tesguest123
2020-10-28 12:06:21 +08:00
后端需要随机 token
tesguest123
2020-10-28 12:08:08 +08:00
@tesguest123 前端需要。跳转。刷新。清空表单等
icyalala
2020-10-28 12:12:06 +08:00
从功能上来讲当然是前端的锅,就算后端验证,用户也会看到错误提示。
laravel
2020-10-28 12:35:22 +08:00
我以前做前端的时候,前端数据显示有问题,老大以为前端代码有问题,后来我一查,api 返回数据的问题。

对于重复提交的问题。
1 、前端点击按钮提交后,loading 改成 true, 按钮改成 loading 状态,此时点击按钮因为判断 loading 为 true 就不执行任何操作了。
2 、后端每个 api 请求可以加个 unique request id,靠这个判断是不是重复请求。
acmore
2020-10-28 12:35:46 +08:00
幂等和防抖都要做的。
rekulas
2020-10-28 12:42:47 +08:00
前后都做是最好的 但是会增加不少工作量

非要甩锅就甩前端,毕竟对后端来说这只能算是流程优化,对前端来说已经算 bug 了(因重复提交导致的数据异常除外)。。。

目前来看,互联网所见的大部分服务都是前端做限制,毕竟前端限制简单粗暴快,只要前端做好后端基本不会受到重复数据了,只有 hacker 会破解前端来重复提交,不过对 hacker 来说做这种简单后端限制意义也不大

有些框架倒是自带了后端验证,但是个人不是很喜欢
treblex
2020-10-28 12:43:55 +08:00
@mirrorpen #8 请问一下,传统的后端使用模版渲染 html 可以把 csrf 嵌入到页面中,这是安全的, 前后端分离的时候应该怎么处理呢,使用 api 获取 key 吗,似乎并不安全

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/719342

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX