[请教] 前端 AJAX 请求如何保护接口?

2015-07-11 20:07:53 +08:00
 engHacker

移动客户端请求后端API的时候可以加密和验证,AJAX请求写在JS文件中,接口地址,请求参数等信息全部暴露了,即使加密,JS加密代码也可以直接查看,如何保证安全性?

我没有前端开发经验,如有错误之处,还请各位见谅。

10360 次点击
所在节点    前端开发
22 条回复
kaneg
2015-07-11 20:31:40 +08:00
API 接口暴露不等于谁都可以自由调用,你可以在API调用中增加鉴权,只有鉴权过后的调用才是有效的。例如增加一个session id之类的。
engHacker
2015-07-11 20:56:40 +08:00
@kaneg 嗯,但是加上了session id,别人抓包一样可以获得。还是没法防止他人调用。
dalaomj
2015-07-11 20:59:11 +08:00
如果是非常重要的、不能面向公网的数据。那就后端请求接口,前端只有请求结果。
YuJianrong
2015-07-11 21:35:45 +08:00
设计ajax请以信息就是对客户公开为前提来设计。
virusdefender
2015-07-11 22:07:19 +08:00
即使别人不直接调用ajax接口 还是可以采集HTML的 没办法绝对杜绝,只能加大难度。

因为你说的是移动客户端,可以采用下面的办法

1 严格注册条件,比如验证手机号邮箱等,然后登陆后调用,每个账号都有自己的频率限制

2 使用https,key pinning, 能杜绝部分小白直接去抓包

3 代码混淆加appid、app_secret、nonce的形式,防止请求重放
hjc4869
2015-07-11 22:41:16 +08:00
@virusdefender key pinning对浏览器的客户端完全没用= =
kokdemo
2015-07-11 22:58:15 +08:00
@YuJianrong 赞成
kaneg
2015-07-11 23:11:36 +08:00
@engHacker 防止别人抓包就只能用https了
FrankFang128
2015-07-12 00:57:16 +08:00
HTTP 就是不安全的呀
spritevan
2015-07-12 02:30:51 +08:00
loading
2015-07-12 06:43:01 +08:00
传输加你也就只能 https
你说的认证,session 这些应该不用多说。
imlonghao
2015-07-12 08:06:51 +08:00
@kaneg https 还是可以抓包的吧
tftk
2015-07-12 08:59:22 +08:00
Nginx ACL.
kaneg
2015-07-12 09:23:45 +08:00
@imlonghao https怎么轻易抓包?就是中间人攻击也不是轻而易举地事。如果这样易如反掌,Google, Apple都不要活了。
oott123
2015-07-12 11:24:31 +08:00
@kaneg 在浏览器端做的话,只要按 F12 就能看到了,还用不着抓包呢……
fuermosi777
2015-07-12 11:32:21 +08:00
iyaozhen
2015-07-12 13:58:53 +08:00
@oott123 两个不同的方面吧。浏览器只能看见自己的数据和通用数据的格式。每个用户请求的结果肯定是不一样的。

实际是防止不了别人发现你的接口的,但我们要做的是发现了接口用不了(用户验证),以及所有用户数据在接口传输过程中的安全(防止撒网抓包)。

若是要防止被采集的话(信息展示类的网站),ajax 其实只是稍微提高了采集的难度。
johnsmith123
2015-07-12 14:02:27 +08:00
这和前端页面的隐私一样没啥意义吧
imlonghao
2015-07-12 15:10:46 +08:00
@kaneg 我认为楼主讲的是防止AJAX请求被抓包,就算页面使用了https,使用Fiddler 2等,安装Fiddler的根证书,本地是可以抓https的包的。楼主将的应该是这种。
lianyue
2015-07-12 15:36:02 +08:00
抓包。。。 没有抓不到的包吧

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

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

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

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

© 2021 V2EX