React HTTP 请求问题

2022-01-10 21:14:06 +08:00
 wudaown

各位大佬,

目前在开发某项目,希望后端不能被外网访问

前端和外网是通的,可以访问

前端的机器和后端机器在同一个内网

现在希望用户访问前端后由前端的机器发起请求而不是从用户网络发起请求。

大佬们 这个能做到吗。。

开发完了 今天测试才想起来网络请求是从用户网络出去的。。这我就很尴尬了。。

3033 次点击
所在节点    前端开发
59 条回复
wudaown
2022-01-10 21:44:45 +08:00
#19 代理之后可以不同 react 程序 单纯从 url 访问了,这个不理想
izoabr
2022-01-10 21:46:02 +08:00
@wudaown #19 哦,我明白你意思了。
说白了就是不希望常规浏览器能随便访问到对吧?
那就在你 react 里请求后端的时候做手脚,比如登录的时候分配一个 token ,然后你放到 axios 的 header 里,后端收到请求的时候先检查一下 token ,如果对,就正常返回,不对就直接跳 HTTP 500 或者 403
wudaown
2022-01-10 21:47:24 +08:00
@izoabr 这个我已经做过了。。然而通过代理之后登录 API 是可以访问的,也就是说可以通过请求登录拿到 token
izoabr
2022-01-10 21:48:34 +08:00
如果不想那么费劲,想通过简单一点的手段,就直接改一下 axios 的 User Agent ,在 NGINX 可以直接判断 User Agent ,发现不是你自定义的那个就直接 deny 掉
wudaown
2022-01-10 21:49:15 +08:00
@izoabr 非常感谢,到现在我也很无解了,代码端各种验证登录自动退出登录,甚至频繁更新 token 我都做好了。。
然后只要登录 api 能直接访问。。。就很难受
wudaown
2022-01-10 21:50:21 +08:00
@izoabr #21 user-agent 可以通过正常访问手段窃取吧,打开开发者工具就能看到了
izoabr
2022-01-10 21:52:51 +08:00
@wudaown #26 简单手段肯定破解也简单呗,要复杂甚至可以 RSA 加密,可以去搜下 axios 加密。
我到目前为止还没有办法完全理解你的需求和问题。
wudaown
2022-01-10 21:53:51 +08:00
我是不是可以通过监测 nginx 日志,在另外在前置服务器上面部署一个程序,去请求资源,然后返回前端。因为前端有 websocket 链接,所以检测程序可以主动发送信息
wudaown
2022-01-10 21:55:16 +08:00
@izoabr #26 很难理解么?
就是后端资源必须通过 react 程序访问。其他任何方式都不行
oneisall8955
2022-01-10 21:56:10 +08:00
这个问题是不可避免的,refer + token 校验下吧
rioshikelong121
2022-01-10 21:56:51 +08:00
服务端渲染
wudaown
2022-01-10 21:57:24 +08:00
@oneisall8955 一点办法都没有么。。refer + token 感觉还是很脆弱
flyhaozi
2022-01-10 21:57:41 +08:00
@wudaown 在浏览器里发出去的请求不管怎样都是可以被各种工具伪造的
wudaown
2022-01-10 21:57:48 +08:00
@rioshikelong121 可以多说两句么 谢谢
oneisall8955
2022-01-10 21:58:22 +08:00
@izoabr 完全同意
izoabr
2022-01-10 21:59:10 +08:00
@wudaown #28 那你就别走 HTTP 协议了,除了静态资源,React 运行起来之后就直接走 websocket 跟后端交互呗,或者连一个 MQ 消息服务器,请求啥直接发消息,然后等回复,这也挺好的一个方案,而且给未来后端的扩容留空间。
rioshikelong121
2022-01-10 22:04:34 +08:00
@rioshikelong121 你不就是怕后端接口被人偷么。。 改成服务端渲染,返回 html 给前端,不就增加了破解难度。当然人家爬你你是难以防住的。。
wudaown
2022-01-10 22:04:47 +08:00
@izoabr 我一开始是这么做的,然而 websocket 地址还是暴露了。。好像确实无解。。
flyhaozi
2022-01-10 22:08:31 +08:00
感觉每隔一段时间就能看到类似的贴子,之前的这些帖子里的讨论应该挺有帮助的,绝对的安全是不存在的,只能去找到一个平衡点
https://www.v2ex.com/t/820478
https://www.v2ex.com/t/806211
https://www.v2ex.com/t/789385
https://www.v2ex.com/t/638264
izoabr
2022-01-10 22:11:59 +08:00
@wudaown #38 那肯定的,毕竟 React 运行在客户端,有心人肯定会有办法的。
你看天眼查和淘宝什么的,他们为了防止扒数据,一个是服务端渲染,另一个是做用户行为检测,你去淘宝搜东西哪怕你已经登陆过了的实名用户,多翻几页一样跳出防爬虫验证。

要么你就只能牺牲易用性,比如封装一个客户端,然后内部数据走个加密,但也不能完全保证万无一失。
要么就是做用户层面的审核,反正方法也就是那么些,要么相信已注册用户,要么不全信,要么完全不信,完全不信你可以设置请求数据量,甚至可以按量收费。

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

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

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

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

© 2021 V2EX