1
XSugar 2018-08-14 00:06:44 +08:00 via iPhone
死亡线来临时候一切皆有可能
|
2
creanme 2018-08-14 00:08:54 +08:00 via Android
b 站之前就是啊,b 站员工说是故意的。
|
3
azh7138m 2018-08-14 00:21:15 +08:00 via Android
可以只用 vue 的 dev 版本,业务代码跑在生产模式,完全可以
|
4
yamedie 2018-08-14 06:32:34 +08:00 via Android
@azh7138m 不可以的吧,心太大了,chrome 装个 vue-dev-tool 插件分分钟给你 model 层改的明明白白
|
7
chengluyu 2018-08-14 07:01:01 +08:00 1
死限来了什么都敢做。
|
8
zjsxwc 2018-08-14 07:38:24 +08:00 via Android 1
前端再怎么出问题也不会有什么大问题
|
9
loading 2018-08-14 07:44:24 +08:00 via iPhone
这很恐怖吗?
|
12
yamedie 2018-08-14 07:49:46 +08:00 via Android
|
13
loading 2018-08-14 07:51:14 +08:00 via iPhone
居然有这么多人认为这很危险……
以为用了生产模式就安全的那才叫心大,后端直接开放接口。 |
14
zhou00 2018-08-14 07:52:32 +08:00 via Android
怎么看是开发环境
|
15
yamedie 2018-08-14 07:59:00 +08:00 via Android
有人觉得前端改点什么都没影响,后端全能拦截,真的这样吗?
没有代码混淆,前端跟接口之间那点签名鉴权逻辑分分钟让人研究明白吧。 微信里的 webapp 如果不限制浏览器,隐藏地址栏隐藏控制台,还不让人改爆?多少公众号在用 localStorage 存关键数据,在 url 显式传参,又不是没见过…… |
16
binux 2018-08-14 08:00:19 +08:00 8
@yamedie #12 我们前端都是静态的,npm build 就完了,干嘛要 npm run ?就算是 npm run production 都不行。
前端做表单验证都是为了好看的,这和「数据检验全靠后端」没有半毛钱关系。 |
17
yamedie 2018-08-14 08:03:56 +08:00 via Android
在讨论的不是后台有没有能力拦截所有非法请求,当然有能力,真的有后端把所有的 case 都照顾到了吗?这是分红和责任心的问题。
某外卖软件消费负 xxx 元,反向充值的新闻了解一下。某打车软件让人研发外挂,损失上百万报案抓人的新闻了解一下。 |
18
yamedie 2018-08-14 08:08:41 +08:00 via Android
@binux “数据检验不全靠后端,难道还有信前端的吗?”,不在前端做表单验证,你不信前端,你信用户是吧?我懂了
|
24
kslr 2018-08-14 08:12:22 +08:00 via Android
啊 审题这个词不太合适,都是在围绕问题做解答,你不能因为回答错误,就无视逻辑与关系死不承认,又没人会怪你。
|
26
falcon05 2018-08-14 08:18:09 +08:00 via iPhone
@yamedie 你说的这些用工具模拟提交就可以了,可能压根不都经过浏览器,跟前端没关系。也不存在后端没做好,前端凑的安全策略。
|
27
yamedie 2018-08-14 08:20:05 +08:00 via Android
@kslr 不是,我发现这帖子几乎所有人论调都是:完全后端做表单验证数据校验(潜台词 前端小把戏,没必要管,随便改),难道不应该前后台做 2 次校验吗,这不应该是规范吗?我替前端感到不服。
|
28
Sharuru 2018-08-14 08:21:08 +08:00 via Android 2
笑了,还真给前端验证脸了。
|
29
KgM4gLtF0shViDH3 2018-08-14 08:26:25 +08:00 via iPhone
@yamedie #18 前端校验一下是为了减轻后端压力吧
|
31
phpcxy 2018-08-14 08:33:24 +08:00 20
恕我直言,后端才不管你前端做不做数据验证。
|
32
xycool 2018-08-14 08:36:06 +08:00 via iPhone
@yamedie 前端不做校验,完全做后端校验确实没问题啊,前端在怎么校验,混淆逻辑写的在牛逼,抓包到提交的数据结构和地址,直接模拟提交,还是得看后端校验啊。我觉得前端校验更多只是给正常操作用户更快的反馈,有时候用户手抖输错了,前端效验可以更快的反馈错误信息。所以不觉得前后台效验是规范,能前后台都做当然更好。
|
33
swalle 2018-08-14 08:36:50 +08:00 6
@yamedie 很多年前,页面就是没校验,每次提交时后台校验,这种方式体验很差,所以后来用 JS 在表单填写过程中就验证,节省用户时间。这么说你明白了吧,前端校验是优化体验,而不是保障安全
|
34
kslr 2018-08-14 08:39:49 +08:00 via Android
@yamedie 我手机打字不太方便,前端和后端的检验都是无可替代的,少了谁都不好,比如前端失败后的业务逻辑提醒等等。
问题集中在前端验证是否万无一失,答案是否。 |
35
swalle 2018-08-14 08:40:18 +08:00
当然这是理论情况,我司现在就是前端验证,后端基本上不验证,活久见...
|
36
yamedie 2018-08-14 08:42:05 +08:00
|
37
xycool 2018-08-14 08:44:47 +08:00 via iPhone
@yamedie 还有,你举的那两个例子都只能说明后端代码的单元测试没有覆盖全面。跟前端需不需要验证不是必然关系
|
38
phpcxy 2018-08-14 08:52:27 +08:00
不知道大家有没有遇到过。注册个手机号或者邮箱(譬如 199 号段或者 gmail 邮箱带+号),有时候前后端的正则都不一样的
|
39
Weny 2018-08-14 08:52:27 +08:00 via iPhone
说个台湾的事,也是 vue 的项目,线上用的开发环境。后端也没做验证,当时被注入了说被中 g 网军入侵,我特意查了一下,住在大陆的绿营学生写的代码,笑。
|
40
qilishasha 2018-08-14 08:59:46 +08:00 2
前端做校验是为了用户体验,为了方便用户的使用。和安全无关。
|
41
remon 2018-08-14 09:03:51 +08:00 via Android 10
一切前端来的数据都不可信,这难道不是 web 开发的基本原则。前端校验是用户体验,后端校验才是为了安全,必不可少。别说 js 压缩混淆不行,用 WebAssembly 都不行。
dev 上线最大的问题在于体验,带很多不必要的东西,文件体积也大。而且可能暴露公司代码水平不高,或者像乞丐 VIP 一样偷偷骂人 |
42
lneoi 2018-08-14 09:05:03 +08:00 1
前端接口都暴露着的,安全性问题肯定得靠后端来维护.
前端校验只是出于用户体验,过滤一些太过无意义的信息. |
43
DOLLOR 2018-08-14 09:11:16 +08:00 13
@yamedie
抱歉,我作为前端开发,我也从来不信前端提交的任何信息。甚至认为,前端提交的信息都是不可信的。你不要“替前端感到不服”,这是客观事实,不服也得认。 前端所谓的“校验”,只是为用户体验而设计的,跟安全关系不大。甚至可以认为,如果不考虑用户体验,前端校验不要也无所谓,后端防范才是必需的。 最危险莫过于“前端校验就安全”这种错误的观念。 |
44
panpanpan 2018-08-14 09:11:18 +08:00 via iPhone 2
作为一个稍有常识的后端程序员在写代码的时候不应该相信前端传过来的任何数据。前端所以的检验都只应该是为了用户体验,尽早的给用户做出提示。
|
46
theohateonion 2018-08-14 09:14:17 +08:00 via iPhone
@yamedie 前端的信息永远不是可信的 我做过的项目无论如何都不会省掉后端的校验. 只是一个 dev 包上去了而已. 没必要这么上纲上线吧
|
47
yhxx 2018-08-14 09:16:56 +08:00
很常见啊
(我当年不懂 webpack 的时候也干过) 至于楼上那些说这么干很危险的,可能也是不懂前端吧。。。 |
48
gouflv 2018-08-14 09:26:20 +08:00 via Android
@yamedie 如果你是前端就别不服了,前端在大部分公司都没你想的这么重要,纯前端想有话语权是不可能的。看清楚大环境,前端火热只是自己的小圈子罢了。
开放下思维,做后端或者产品才是出路啊。 |
49
PureWhiteWu 2018-08-14 09:26:44 +08:00
你就算直接把接口通过 swagger 暴露给用户都没关系。
后端不要 dev 模式上线即可。 |
50
agdhole 2018-08-14 09:28:19 +08:00 via Android 1
前端做校验只有一个功能,提高用户体验,安全是拍脑袋随便想出来的?
|
51
belin520 2018-08-14 09:31:26 +08:00 1
|
52
ZxBing0066 2018-08-14 09:32:29 +08:00 via Android 1
体验在前端 安全在后端(除防注入展示类内容)这都能吵起来
。。 |
53
beaconfire 2018-08-14 09:34:53 +08:00
@agdhole 还有减少无效请求以减轻服务器压力
|
54
yamedie 2018-08-14 09:47:30 +08:00
"永远不要相信用户的输入" 大家把这里的不信用户等同于不信前端, 没关系, 没人否定后端的数据校验必不可少, 这是数据达到数据库的最后一道关口.
说前端校验是为了用户体验, 与安全无关的, 可以了解一下这本书 https://book.douban.com/subject/10546925/ 从第 2 到第 6 张全部是在讲客户端安全,客户端发起的攻击除了表单篡改, 还有跨站攻击,csrf 攻击. |
56
whypool 2018-08-14 09:50:41 +08:00
除了文件大点没其他毛病
这都能扯到安全,怕是个假码农 |
57
coffeSlider 2018-08-14 10:01:13 +08:00 via Android
不明白楼主犟什么,有能力发起攻击的还会在乎前端校验吗?前端能防住普通人瞎搞就行了。
|
58
MeteorCat 2018-08-14 10:07:24 +08:00 via Android
前端安全远不如后端重要,前端开发用 dev 和 product 都不重要,只是 JS 压缩与否,功能完全没问题。后端没做验证是连服务器都能被黑掉
|
59
wyntalgeer 2018-08-14 10:13:34 +08:00 3
楼主发了个口水贴就跑路了,不明所以的前端小白回复错了,死不认账嘴犟
V 站日常 真是欢乐 我脑子有病回帖 |
60
xianxiaobo 2018-08-14 10:54:26 +08:00
前端安全有意义,但是很小很小很小,小到除非你是某些特定类型的公司,不然根本没必要去做。
|
61
channg 2018-08-14 11:00:45 +08:00
可能是个假码农
|
62
lrh3321 2018-08-14 11:01:19 +08:00
安全明显是看后端的,怎么可能会去信任前端传过来的数据。
|
63
yangxiongguo 2018-08-14 11:04:42 +08:00
别人在跟你讨论后端数据验证问题,扯什么跨站攻击呢?扯犊子吧!
|
64
python 2018-08-14 11:06:28 +08:00
年轻真好, 任性...
|
65
jotsai 2018-08-14 11:11:58 +08:00 1
真是逗,xss 和 csrf 还不是要靠后台过滤和校验
|
66
SakuraKuma 2018-08-14 11:15:15 +08:00
年轻真好,居然验证给前端做。。
前端验证是为了体验好不好????? #17 的例子完全就是后端的锅。 差点笑出声。 甚至怀疑你在钓鱼。 |
67
jin5354 2018-08-14 11:16:02 +08:00 2
讨论问题别转进(从后端数据验证跑到跨站攻击),别臆测(说一句理解一句,不要自己立靶子自己打),别制造不平等(我小白,别人都是大佬)。。不然这问题就没的讨论了
|
68
yamedie 2018-08-14 11:19:16 +08:00
我搞不懂你们槽点在哪里, 我说过前端验证[取代后端]了吗? 我一直在强调做 2 次验证好吗?
腾讯云学生机 360 元那次 bug 营销, 你们这些毕业多年凡是买了的, 哪个不是把 select 框 value 改掉再提交的? |
69
chinvo 2018-08-14 11:25:20 +08:00
“做 2 次验证好” 不等于 “前端用 dev 版不好”
槽点就是不存在“前端安全”一说 表单篡改、跨站提交这些问题,前端是一个都解决不了的 |
70
chinvo 2018-08-14 11:29:04 +08:00
你自己在 #68 举的例子更是对前端验证的否定例子,你前端写的再复杂,混淆再严密,还不是 DevTool 直接就改了,数据交易就是要放在后端,用户输入和前端数据就是划等号的,前端(包括网页和 App )来的数据就是不能被信任。
前端验证只是用户体验的一环,Ajax 技术解决的问题就是“用户等待返回结果时间长”、“页面刷新白屏不友好”,不要因为带“验证”两个字就把前端验证真的当数据校验了。 |
71
yamedie 2018-08-14 11:31:49 +08:00
@chinvo 我来解释为什么用 dev 版不好? 因为前端代码没经过任何混淆就暴露在外, model 层数据整理的明明白白供你调试, 比那些 jQuery 开发的项目还容易让人搞懂业务逻辑. 假设前端调 ajax 还经过了前后台共同约定的 seed 做了参数加密签名(sha1 那些非对称加密), 你的签名加密方式也暴露的明明白白, 别人掌握了伪造接口签名, 就能用个 postman 轻松修理你们后端
|
72
swalle 2018-08-14 11:34:07 +08:00
真是难沟通啊
|
73
rockyou12 2018-08-14 11:34:32 +08:00
@yamedie 任何前端加密都是不可靠的,及时混淆了还不是明文,前端加密除了 https 没有任何靠谱的办法,混淆只能稍微增加人家阅读代码的时间
|
74
chinvo 2018-08-14 11:37:14 +08:00 2
@yamedie #71 所以你落入误区了
前端任何数据都不能被信任,前端不应该有任何加密和签名逻辑,前端借口暴露之后不应该导致大规模的伪造请求 你即使混淆了,DevTool 也能给你 Beautify,你即使加签名了,也能轻松找到签名逻辑和 seed 我来跟你讲你说的几个问题怎么解决 1、token 鉴权,比如 OAuth,怕泄漏的数据都只能用户访问,这样 token 泄漏了也只能访问用户自己的数据,token 有效期一过也不能继续访问 2、走 TLS,中间人和旁路设备不能窃听前后端数据交互 3、防爬虫措施,识别脚本流量 |
75
cjw1115 2018-08-14 11:37:44 +08:00 1
个人拙见,一个良好的后端,应该是对前端保持完全不信任的态度。
|
76
xycool 2018-08-14 11:37:48 +08:00 1
|
77
xycool 2018-08-14 11:39:10 +08:00
活在自己的世界真的阔怕。真的是浪费时间回贴,还不如多写几行代码。
|
78
klesh 2018-08-14 11:40:16 +08:00 via Android
@yamedie 后端不相信前端验证没毛病
首先,这不代表前端就不能验证或者不应该验证 其次,就算你生产部署了,然后人家不能直接模拟 ajax 请求?伪造报文不要太容易。 最后,vue 部署成开发模式当然是不对的。但由此引发安全问题后端的锅很大 |
79
moonsola 2018-08-14 11:45:36 +08:00
@yamedie #68
大家都说了多少楼了,前端要验证,但是与安全无关,前端验证保证体验,后端验证保证安全。 前端代码再怎么混淆,总归是要毫无保留地暴露出来。前端用 js 进行数据加密都是自欺欺人,要不然也不会有 https 了。 |
80
yamedie 2018-08-14 11:48:52 +08:00
@xycool 不瞒你说我司真的是前端算 signature 的, 但同时所有请求也用了 OAuth 的 token, 两种鉴权方式一起用.
但我们的 java 没做到自己信息只有自己能查, 只要 token 和签名正确了, 也能冒充其他用户身份,只要篡改一下用户 id 就行了,所以我觉得我们的 java 不行,没做到 74 楼说的用户只能访问自己数据(可能接口安全他们只差一步而已). 所以我觉得,只要哪天微信 webapp 的浏览器限制被人破解了,我们这个破系统分分钟完蛋,因为后端虽然鉴权了,但根本没法防止用户在客户端篡改伪造身份. |
81
leitwolf 2018-08-14 11:51:23 +08:00
我从做 web 编程开始就知道“前端一切数据都是不可信的”这一规则。
不知道会不会有人理解成“前端人员不可信任”,哈哈! |
82
leitwolf 2018-08-14 11:54:49 +08:00
@yamedie 这是你们公司错误的做法,并不代表行业是这样。所以你真要切磋的话,应该是跟你们公司的后台 java 谈,而不是跟大伙在这里谈。
|
83
gongpeione 2018-08-14 11:59:10 +08:00
1、该不该用 dev ?当然不该,降低了其他人做奇怪事情的成本
2、前端需不需要做加密?可以做,但是意义不是特别大,还是上 HTTPS 比较好 3、前端需不需要做校验?最好是要,体验更好 4、后端需不需要做校验?任何时候都要,不能信任用户传来的数据 5、前端校验和后端校验哪个重要?我认为同等重要 |
84
agagega 2018-08-14 12:01:57 +08:00
@yamedie
你这个问题和反爬虫本质上是相似的。可以用种种手段区分正常地从浏览器发出的请求和用户用 Postman 等工具发出的请求,但无论如何不可能 100% 精确。这才是在前端各种校验、混淆、验证、加密的意义。但是把这个当做安全保障,就有问题了。无论如何都要有自己的 API 接口暴露的可能。 |
86
binux 2018-08-14 12:10:20 +08:00
@yamedie #80 我没实际操作过,但是随便查了一下 “微信 小程序 抓包”,微信浏览器还是 http/https 协议的啊。抓个包分分钟。
而且我觉得你们后端根本没有做错,虽然说签名是没有必要的,但是用了 OAuth 鉴权就是安全的,其他的用户根本不可能冒充别人的 token。 我不知道你都是在哪学的,你对计算机安全有很大的误解。建议找本科班的教材系统的学习一下。 |
87
chinvo 2018-08-14 12:17:55 +08:00
|
89
chinvo 2018-08-14 12:29:54 +08:00
|
90
yamedie 2018-08-14 12:35:17 +08:00
@binux 不是冒充 token, 而是没有进行 token 与入参的比对和鉴权(判断 token 的主人和入参的 userId 是不是同一个人), 这个问题我跟后端提过多次, 现在新接手的人愿意去改掉了.
我为了规避这个问题不捅娄子, 我还想方设法在 spa 里不暴露 userId, 至少让它在浏览器里不被篡改, 现在想想是很多余的, 这些越权的漏洞应该后端来解决, 无奈之前的 java 太懒不想改, 后台 leader 也不想管. |
91
yamedie 2018-08-14 12:36:38 +08:00
行, 我败了, 我是前端小白, 我认同 83 楼的结论.
|
92
xianxiaobo 2018-08-14 13:39:15 +08:00 2
@gongpeione 为什么要在最后一句加个我认为呢,是不是同等重要很明显啊,前端不做校验和后端不做校验是一样的概念吗
|
93
Rekkles 2018-08-14 13:52:01 +08:00
作为后端 前端随便你折腾 跟我没啥关系 谁给我的数据我都不信
|
94
dixeran 2018-08-14 14:07:00 +08:00 via Android
前端被绕过可太容易了
|
95
geew 2018-08-14 14:26:03 +08:00
这个还好吧 可能就是页面加载慢点 也没啥问题 验证什么不都是后端做的吗 给你知道参数什么又有什么关系
|
96
z54749412 2018-08-14 14:51:42 +08:00
@yamedie 真的希望你重新看下题目。。这个和前后端有什么关系么?怕你是个人对前端有什么偏见?做一个后端又不是那么成功?
|
97
wly19960911 2018-08-14 15:02:06 +08:00
你知道吗,我能对 prod 环境的代码进行调试,所以打包后也就那样啊。
前端有没有 sourcemap 有所谓吗,真没什么所谓,你以为看得懂 sourcemap 的就看不懂怎么打包后调试吗。所以说我认为有错没啥大错。 |
98
maichael 2018-08-14 15:17:07 +08:00
前端代码生产模式和开发模式除了代码压缩之外,其他的差别真心不大。
后端就不应该相信从任何地方传来的数据是正确的,因为前端不是后端唯一的数据来源,有太多的方法绕过前端了。 |
99
Govda 2018-08-14 15:41:21 +08:00
你怎么写我不管,但是 dev 出来的 js 真 tm 大啊
|
100
romisanic 2018-08-14 15:47:46 +08:00
常规是接口不信任前端传过来的任何数据,所以接到之后还需要做必要的验证
但是不是说所有的验证都需要跟后端交互之后才能拿到结果,这样太浪费了,开发起来麻烦不说,用户体验也不太好 一般前端需要做一些必要的验证,比如一些逻辑关系,必填,格式等 但是后端仍然需要验证一些必要的内容,作为防御。 |