新足迹

 找回密码
 注册

精华好帖回顾

· 炼琴记(耳朵的敏锐,心灵的追求;机能的协调,灵魂的升华 ;一生的财富。) (2018-10-28) 莽撞人 · 大头家常菜--为庆祝足迹网生日--高升排骨,生日面 (2010-1-13) datou2z
· “黑民”杨违“移民成功”了(李双原创) (2018-6-23) 墨尔本李双 · 姐只是一个传说 (2010-9-9) 太有才了
Advertisement
Advertisement
楼主:青衫未烬

[IT] 当了5年full stack感觉好迷茫 [复制链接]

发表于 2021-6-27 15:29 |显示全部楼层
此文章由 袋鼠 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 袋鼠 所有!转贴必须注明作者、出处和本声明,并保持内容完整
righttang 发表于 2021-6-27 14:15
能回答出CORS, 还有用限时的Token,虽然不能完全解决问题,但这个思路方向也算对了。

PKCE这东西需要用 ...

那我截住传输的数据, 用别的方式发这个数据,你怎么知道这个数据来自UI还是别的?

cors?我直接写个script发数据给这个UI不行吗?

Advertisement
Advertisement

发表于 2021-6-27 15:30 来自手机 |显示全部楼层
此文章由 ryu2011 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 ryu2011 所有!转贴必须注明作者、出处和本声明,并保持内容完整
确实,面试也是一种技能,和工作技能一样,也需要学习。

发表于 2021-6-27 15:36 |显示全部楼层
此文章由 袋鼠 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 袋鼠 所有!转贴必须注明作者、出处和本声明,并保持内容完整
righttang 发表于 2021-6-27 13:18
我同意你说的大部分码农七师不需要关心这个问题。但你说这个问题应用范围很小这个我就不同意了。

在如今 ...

关于“如何防止第三方打折网站来不停的轮询”,这个就是很常见的问题了。
我之前说throttling就是关于这个问题。

如果我通过你的UI查询一次和invoke api查询一次不是同样一回事吗?
毫无疑问api不能完全不设防,不要让人滥用就好。

发表于 2021-6-27 15:59 |显示全部楼层
此文章由 wishpolo 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 wishpolo 所有!转贴必须注明作者、出处和本声明,并保持内容完整
本帖最后由 wishpolo 于 2021-6-27 15:04 编辑
wenqingren 发表于 2021-6-27 13:42
支持层主,问项目实际碰到的问题是很有意义的,而且这样的问题可深可浅。
同样贡献一个system design的问 ...


我没做过这种系统设计,但试试看:

有权限管理的系统构架都是有专门的权限管理server来管理token,这种throttling mechinaism应该也需要一个专门的服务器来监控每个账号的calling rate管理每个账号的token,所有分布式计算机向这个服务器报告calling数量和timestamp,这个服务器就能通过计算实时知道每个账号在某个时间段的calling rate了吧。
治疗后的老鼠,33%死亡,33%康复,最后一只逃走

发表于 2021-6-27 16:14 |显示全部楼层
此文章由 wishpolo 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 wishpolo 所有!转贴必须注明作者、出处和本声明,并保持内容完整
袋鼠 发表于 2021-6-27 14:29
那我截住传输的数据, 用别的方式发这个数据,你怎么知道这个数据来自UI还是别的?

cors?我直接写个scrip ...

对于采用了https来call REST API的数据已经堵住了这个漏洞,没法通过重发数据来得到api的响应。
治疗后的老鼠,33%死亡,33%康复,最后一只逃走

发表于 2021-6-27 16:15 |显示全部楼层
此文章由 wenqingren 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 wenqingren 所有!转贴必须注明作者、出处和本声明,并保持内容完整
wishpolo 发表于 2021-6-27 14:59
我没做过这种系统设计,但试试看:

有权限管理的系统构架都是有专门的权限管理server来管理token,这种t ...

那这个权限管理服务器就是整个系统的瓶颈了,假设整个系统的expect load是每秒十万级别的calling,并且有上百台hosts并发处理,那么所有的host都要把request先发给这个服务器。。 如何设定历史记录的粒度, 并且何时flush old data,在性能和throttling 之间进行trade off, 这个就是考察的重点,并能区分出一个程序员对大型并发系统的性能设计敏感度如何。
Advertisement
Advertisement

发表于 2021-6-27 16:18 |显示全部楼层
此文章由 wishpolo 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 wishpolo 所有!转贴必须注明作者、出处和本声明,并保持内容完整
本帖最后由 wishpolo 于 2021-6-27 15:20 编辑
wenqingren 发表于 2021-6-27 15:15
那这个权限管理服务器就是整个系统的瓶颈了,假设整个系统的expect load是每秒十万级别的calling,并且有 ...


这个设计可以通过简化分布式计算机或者服务器发送给权限管理服务器的包来减少处理时间,然后通过系统级的capacity设计来确定服务器载荷的容量来实现。数据包小的话,服务器载荷其实很小,可能不需要很高性能的服务器就能搞定大容量的系统,就像DNS服务器那样,那个包小到基本不会被常见的DDOS攻击给击垮。
治疗后的老鼠,33%死亡,33%康复,最后一只逃走

发表于 2021-6-27 16:20 |显示全部楼层
此文章由 wenqingren 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 wenqingren 所有!转贴必须注明作者、出处和本声明,并保持内容完整
wishpolo 发表于 2021-6-27 15:18
这个设计可以通过简化分布系统发送给服务器的包减少处理时间,然后通过系统级的capacity设计来确定服务器 ...

如果这个服务器down了怎么办?如何保存历史calling数据?何时需要把旧数据flush out?

发表于 2021-6-27 16:22 |显示全部楼层
此文章由 wenqingren 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 wenqingren 所有!转贴必须注明作者、出处和本声明,并保持内容完整
还有等待这个服务器的回复会不会导致响应延迟?如何fail fast?

发表于 2021-6-27 16:27 |显示全部楼层
此文章由 wishpolo 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 wishpolo 所有!转贴必须注明作者、出处和本声明,并保持内容完整
wenqingren 发表于 2021-6-27 15:20
如果这个服务器down了怎么办?如何保存历史calling数据?何时需要把旧数据flush out? ...


有道理,这就得需要备份的另一个服务器了来互相备份数据了,不过这个只需要处理实时的calling rate应该不需要纪录很多旧数据,互相备份几分钟的足够了吧。而且可以只需要记录累积数据,算出calling 的count值就好了,数据量会非常小,就算一台服务器down掉一些新数据没来得及备份问题也不大,过个几秒钟又恢复正常了。

服务器性能好的话做到每年down两次,造成几秒钟的calling 记录丢失,问题也不大吧。
治疗后的老鼠,33%死亡,33%康复,最后一只逃走

发表于 2021-6-27 16:30 |显示全部楼层
此文章由 wishpolo 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 wishpolo 所有!转贴必须注明作者、出处和本声明,并保持内容完整
本帖最后由 wishpolo 于 2021-6-27 15:31 编辑
wenqingren 发表于 2021-6-27 15:22
还有等待这个服务器的回复会不会导致响应延迟?如何fail fast?


延迟问题不大,只要能计算出最近几分钟有用户出现max calling rate超过极限就好,响应晚一点也就是token晚一点失效而已。系统应该有一些容量来处理这种延时。

其实最好的例子是DNS服务器,数据包设计得小的话还是比较容易实现的。
治疗后的老鼠,33%死亡,33%康复,最后一只逃走
Advertisement
Advertisement

发表于 2021-6-27 16:58 来自手机 |显示全部楼层
此文章由 frank_au 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 frank_au 所有!转贴必须注明作者、出处和本声明,并保持内容完整
righttang 发表于 2021-6-27 13:26
这个问题可不是我乱编的,是我们公司实实在在专门为了这个命题设计了一个Solution,从而防止了大约90%左 ...

一个公司内部的solution 当面试题,只有安全相关的构架师能给出比较好的答案。
问一个主要做前端的engineer ,可以说这种题目是不太合格的。
而且问题太模糊,只要是客户端,所有的请求都可以复刻,理论上是无法防止,只能降低危害

发表于 2021-6-27 17:43 来自手机 |显示全部楼层
此文章由 starchuck 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 starchuck 所有!转贴必须注明作者、出处和本声明,并保持内容完整
wishpolo 发表于 2021-6-27 15:14
对于采用了https来call REST API的数据已经堵住了这个漏洞,没法通过重发数据来得到api的响应。 ...

请教大神,我理解的HTTPS解决的是端到端的加密,请问如何通过HTTPS能判断出客服端是浏览器,app 或者 robot的呢?

发表于 2021-6-27 17:49 |显示全部楼层
此文章由 wishpolo 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 wishpolo 所有!转贴必须注明作者、出处和本声明,并保持内容完整
本帖最后由 wishpolo 于 2021-6-27 16:55 编辑
starchuck 发表于 2021-6-27 16:43
请教大神,我理解的HTTPS解决的是端到端的加密,请问如何通过HTTPS能判断出客服端是浏览器,app 或者 rob ...


这个我也没有经验,不过应该能够通过客户端request的行为模式和一些基本的信息比如ip地址,request的间隔时间,使用频率等等,来判断是不是robot。
毕竟robot和人的行为模式会不同。
比如楼上一些大神提到的Google reCaptcha应该就是通过AI来区分了。现在AI和data science 已经用在网络安全中,应该能够鉴别很多robot。楼上大神不就说能发现90%的滥用request么。
治疗后的老鼠,33%死亡,33%康复,最后一只逃走

发表于 2021-6-27 20:30 来自手机 |显示全部楼层
此文章由 iamsuper 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 iamsuper 所有!转贴必须注明作者、出处和本声明,并保持内容完整
袋鼠 发表于 2021-6-27 14:07
SPA直接invoke backend rest api的,也就时SPA的domain就是用户的domain.
cors是防止第三方截取token而不 ...

SPA的domain就是用户的domain? 没有冒犯的意思,我觉得你还是应该search一下“What Happens When You Type in a URL”
多看看system design吧。
Router都能联系起来了,你应该区分一下domain和用户机器的IP,domain是一个website的网站,Browsers are in control of setting the Origin header, and users can't override this value。
oo

发表于 2021-6-27 22:40 |显示全部楼层
此文章由 tghj01 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 tghj01 所有!转贴必须注明作者、出处和本声明,并保持内容完整
iamsuper 发表于 2021-6-27 19:30
SPA的domain就是用户的domain? 没有冒犯的意思,我觉得你还是应该search一下“What Happens When You Typ ...

前面说的都是第三方工具有意的是滥用token,所以这些header里的东西server端一个字都不要相信。。cors只是防的最简单一种。


web app这种都是JS明文的,就用recaptcha吧, google 会每次给你生成一个uniq token,server端去验证。。 google 已经把大部分的脏活都做了。


mobile app的话,这样可以稍微增加一点破解的难度。
1. 绑定server 端的ssl证书 (ssl pinning),防止中间人攻击来拿access token
2. 检测是否root/越狱,如果root了就停止工作。 (防止关闭ssl pinning)
3. 开启混淆代码 (聊胜于无)
4. 把生成token的部分用c写,生成库,app调用这个库 (防止反编译java/kotlin来逆推token算法)



声明:以上都是拍脑袋的纸上谈兵,没实际做过。。土澳这个地方需要这个的似乎都不多。

Advertisement
Advertisement

发表于 2021-6-27 23:18 |显示全部楼层
此文章由 袋鼠 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 袋鼠 所有!转贴必须注明作者、出处和本声明,并保持内容完整
本帖最后由 袋鼠 于 2021-6-27 23:14 编辑
iamsuper 发表于 2021-6-27 19:30
SPA的domain就是用户的domain? 没有冒犯的意思,我觉得你还是应该search一下“What Happens When You Typ ...


不能改domain不要紧。https加密过的数据也不能更改。
只要数据在client side, 就可以截取数据重新发送。所有的数据通过我的router发出去,我都可以截住换一种方式发出去。
这个也没有影响安全,还是同样的数据同样的用户,只是不通过那个UI发送出去。
只要我可以绕过那个UI, 就达到不通过那个UI传送数据的目的了。如果token不是一次性的话应该也可以多发几次。
不明白这个到底有什么问题?

上面有人说https不允许数据重新发送。其实我不明白为什么不行。
就是一堆0101通过router发出去。这段数据包括了data和network routing control message,server端拿到数据后这个数据还是完全合法的,本来就是合法的数据。我为什么不可以把这段0101重新发出去?

cors的目的是如果第三方截住token/session key, 他的domain不是真正的UI的domain就不能用这个token/session。
而我作为真正的用户我怎么不能截住我自己的数据,换种方式发出去。
不过我说spa的domain就是用户的domain确实不对,不过我的意思是我自己的数据我可以自己控制怎么发出去,只不过我不能更改这个数据而已。我要更改数据就用UI更改截住UI发出去的encrypted message, replay it.

请问这个说法到底有什么错误?

另外绕过cors不要太简单,我可以写个script来控制UI。cors还有用吗 (当然有别的办法禁止script拼图之类)?
我认为数据只要在用户那儿,只要用户的数据合法,就有办法绕过UI发出去。




发表于 2021-6-28 00:57 |显示全部楼层
此文章由 limyae2009 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 limyae2009 所有!转贴必须注明作者、出处和本声明,并保持内容完整
这里近十位大神聊得很开心

请教大神们一个问题,其实是替我女儿问的:手机微信小程序里面的“泡泡玛特”抽盲盒机怎么才能知道那12个盒子里面哪个是热门款?用了透卡可以截取它的包,问题是如何可以不消耗透卡的前提下看到盒子里的内容?


谁能回答出这个就是本页最靓的仔!先代我女儿谢谢各位大神了:)


稽首天中天,毫光照大千。
八风吹不动,端坐紫金莲:)

发表于 2021-6-28 05:49 |显示全部楼层
此文章由 jerryzhang77 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 jerryzhang77 所有!转贴必须注明作者、出处和本声明,并保持内容完整
righttang 发表于 2021-6-27 13:26
这个问题可不是我乱编的,是我们公司实实在在专门为了这个命题设计了一个Solution,从而防止了大约90%左 ...

你们这种应该就是内卷吧?或者说是consulting interview。

发表于 2021-6-28 18:35 |显示全部楼层
此文章由 mjmaps 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 mjmaps 所有!转贴必须注明作者、出处和本声明,并保持内容完整
袋鼠 发表于 2021-6-27 22:18
不能改domain不要紧。https加密过的数据也不能更改。
只要数据在client side, 就可以截取数据重新发送。 ...

基本同意你的观点。不过我觉得问题的scope不是很清楚,问题应该是说如何防止用其他的工具,比如说同一个用户用postman发送同样的请求。这个对SPA来说一般没啥好办法,除了限流和CORS。

发表于 2021-6-28 18:38 |显示全部楼层
此文章由 mjmaps 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 mjmaps 所有!转贴必须注明作者、出处和本声明,并保持内容完整
而且这个问题也不是没意义,起码不是烂大街的问题。可以看出developer对网络基本概念的理解,主要看思考过程,不是答案。
Advertisement
Advertisement

发表于 2021-10-18 00:10 来自手机 |显示全部楼层
此文章由 我还年轻 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 我还年轻 所有!转贴必须注明作者、出处和本声明,并保持内容完整
615615 发表于 2021-6-22 13:16
别泄气,继续刷题面试。
分享一下我的经历,之前在小公司做developer将近8年,从18年开始想跳槽然后各种悲 ...

你好 方便问一下是哪个厂么?

发表于 2021-10-18 10:13 |显示全部楼层
此文章由 yacobe 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 yacobe 所有!转贴必须注明作者、出处和本声明,并保持内容完整
加强 Story telling 和 leadership 方面。编也要编的好听点。做项目不要说“参与”,要说“带领”。不要说 "We",全部说 "I"。面试官也不管你是不是真的带了,人就是认这个。当然,你要能做到自圆其说并且能展开说。
signature

发表于 2021-10-18 10:17 |显示全部楼层
此文章由 DDD888 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 DDD888 所有!转贴必须注明作者、出处和本声明,并保持内容完整
袋鼠 发表于 2021-6-27 23:18
不能改domain不要紧。https加密过的数据也不能更改。
只要数据在client side, 就可以截取数据重新发送。 ...

其实很简单啦,将token和ip地址和有效服务器时间(例如一分钟有效)打包加密,没有密码,客户端无法改变ip地址和有效服务器时间,所以无法replay request,我一直就这样做的,比较有名的参考对象是google youtube录像链接就是这样的

发表于 2021-10-18 10:30 |显示全部楼层
此文章由 DDD888 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 DDD888 所有!转贴必须注明作者、出处和本声明,并保持内容完整
righttang 发表于 2021-6-27 14:26
这个问题可不是我乱编的,是我们公司实实在在专门为了这个命题设计了一个Solution,从而防止了大约90%左 ...

你可以分享下solution吗?

发表回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Advertisement
Advertisement
返回顶部