前端如何做好安全这块?

2019-02-14 09:19:00 +08:00
 Colorful

我们公司主要做手机话费充值的,昨天突然被个人盗刷了,用 fiddler,然后修改参数,支付了上百笔。 每笔都是 1 分钱

框架用的是 vue,加前端端分离,公众号上的功能,支付是微信支付,支付的过程中是调用后端的接口。

知道大部分安全是由后端去弄,但请教下,前端能够做好哪些或者说哪些需要注意的? 之前没接触过安全这块

现在已经改好了

7353 次点击
所在节点    前端开发
64 条回复
CodingMonkey
2019-02-14 09:33:41 +08:00
1. 上 https
2. 将参数用服务端提供的公钥加密后再传输
ranxfan
2019-02-14 09:36:37 +08:00
主要问题还是在后端,不如让后端重新考虑一些问题?
Colorful
2019-02-14 09:37:06 +08:00
@CodingMonkey
有上 https

将参数用服务端提供的公钥加密后再传输,这个我得好好了解下
Colorful
2019-02-14 09:37:35 +08:00
@ranxfan
知道主要总是在后端,但我想知道下,前端能够做的有哪些
madNeal
2019-02-14 09:38:46 +08:00
是不是逻辑漏洞 前后端都得考虑
Colorful
2019-02-14 09:39:41 +08:00
@madNeal
逻辑这块是没问题的,主要是传参这块,在微信支付的时候是分离的。
loading
2019-02-14 09:42:59 +08:00
前端按我的理解是,没法做安全,只能提高成本。
yamedie
2019-02-14 09:43:13 +08:00
每笔都付 1 分钱? 后端开发得背锅啊, 你们接口难道是把商品的 price 作为入参, 由前端传入后台?
madNeal
2019-02-14 09:44:33 +08:00
@Colorful 感觉是拦截请求,然后修改参数提交啊
Colorful
2019-02-14 09:46:30 +08:00
@madNeal 对的,就是这样的,所以我想知道前端这块怎么做安全
whileFalse
2019-02-14 09:48:51 +08:00
这和前端有个毛线关系。人家直接构造参数调后端接口,关前端 P 事。
micean
2019-02-14 09:49:03 +08:00
要不把请求参数全部加密吧……费力不讨好
yidinghe
2019-02-14 09:50:12 +08:00
前端需要注意的安全问题包括:

1、会话不能被窃取或伪造。因为所有的请求都可以通过 F12 看到,所以不能在请求参数当中带上用户 ID 之类的,否则用户换一个 ID 就能冒充其他用户。

2、页面内容注入和跨站点攻击。其实这当中有一部分是需要后端来防范,但前端也需要注意脚本方面的安全。比如不要引用非 HTTPS 的外部资源。

3、权限方面的安全。首先后端开发时刻都要把一条原则放在心上,就是任何请求和会话都是可以不经浏览器直接构造的,所以后端的接口设计应该尽可能保守,参数应该尽量少。而前端也需要在这点上配合,不能为了图自己开发方便而要求后端接受多余的参数。
yhxx
2019-02-14 09:50:42 +08:00
这个和前端没多大关系
甩锅给后端吧
前端能做的很少
learnshare
2019-02-14 09:51:32 +08:00
跟前端没有半毛钱关系
madNeal
2019-02-14 09:51:33 +08:00
@Colorful 老实说 像这种 主要还是后端还要做验证 感觉这个漏洞利用的思路可能是这样 它请求支付 让后修改了支付价格 然后你们收到了微信支付的成功的响应,就认为支付成功了,应该做进一步的校验。
前端可以做的,我觉得主要也就是配合后端一起做,防 XSS,CSRF 这种的,注重逻辑这一块吧
tomczhen
2019-02-14 09:51:49 +08:00
请求加 signature,后端不能无条件相信前端返回数据。
FakeLeung
2019-02-14 09:51:53 +08:00
无疑是后端的锅,前端的安全,有心搞你,基本都能摸索出来。
yamedie
2019-02-14 09:53:53 +08:00
总之是接口参数定义的有问题, 应该只传商品 ID 就可以, 但你们鬼使神差的由前端决定商品价格
ranxfan
2019-02-14 09:54:19 +08:00
@Colorful 前端没啥好做的(上 https,请求参数签名),但是并无作用,完全可以分析你的代码,伪造请求。
你的问题看似是服务端没有验证微信支付收到的金额,完全相信前端发的数据。

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

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

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

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

© 2021 V2EX