V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
y051313
V2EX  ›  问与答

如何保护 Ajax 调用接口?

  •  
  •   y051313 · 2014-04-21 10:42:25 +08:00 · 7014 次点击
    这是一个创建于 3880 天前的主题,其中的信息可能已经有所发展或是发生改变。
    在Ajax中经常会需要使用类似www.stie.com/search.php的接口来执行数据库查询,而这个URL是在源代码里面可以直接看到的,怎样防止别人来调用呢?

    可以验证referral,限制所有的调用都来自指定的domain吗?
    5 条回复    1970-01-01 08:00:00 +08:00
    explon
        1
    explon  
       2014-04-21 10:44:35 +08:00
    你的思路真有意思,你 JS 跨域调用一个给我看看
    justfindu
        2
    justfindu  
       2014-04-21 10:52:07 +08:00
    可以增加一个token做验证.


    @explon 比如chrome插件可以做到.
    lecher
        3
    lecher  
       2014-04-21 11:53:44 +08:00   ❤️ 3
    @explon js跨域有很多成熟的方案了,很多开源的查询库都是ajax接口返回json的,现在大家用的广告系统大部分也都是js跨域去拿的数据显示的。
    如果ajax接口没有做验证 真的可能会被人调用,对于没有公开参数说明的ajax接口,难点只在于如何构造传送的参数而已。

    楼主的问题在于要不要给ajax加验证,加了会增加多少服务器的负载。

    refer验证可以防住一般的人,负载不算高
    cookie校验+session设置调用时间间隔可以有效降低请求频率,负载不算高
    签名加密参数会增加服务器负载,但是可以加强安全性,已经可以防住大部分的非正常调用了
    这几个办法已经足够保证ajax接口不会被站外过度滥用了,至于那些非要采集的,真心没办法。防不住的,大众点评那么牛逼的防采集策略,还是被爬个底朝天。
    y051313
        4
    y051313  
    OP
       2014-04-21 14:17:23 +08:00
    @justfindu
    @lecher

    多谢二位
    cougar
        5
    cougar  
       2014-04-21 14:19:53 +08:00
    既然用了ajax的方法,基本上防护不了,lecher 说的比较在理
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1043 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 20:25 · PVG 04:25 · LAX 12:25 · JFK 15:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.