[请益] REST 网站 api 安全性

楼主: sean72 (.)   2016-10-01 05:23:59
假设我架设了一个大联盟球员数据查询网站
努力整理分析数据,又花钱租了server
架构用rest api
前端送api到server,后端传json回去
如果某个路人看到我的网站整理的很棒
他也想做一个
那他岂不是只要自己写个前端
然后使用和我一样的api,我的server一样会回应我所整理好漂亮整齐的json
这个路人岂不是做起了无本生意吗?
请问这个问题有解吗?
~~
简单说
我的内容只想服务给"真的来我网站的人"
而非第三方网页和机器人
作者: qazwsxee (彦)   2016-10-01 05:30:00
Header里带一组依时间变化的Hash码sha1($time.'xxx任意字串') => 产生hash码只有你的程式知道当前时间(最低到分:2016-10-01 05:30)
作者: laject (hanks)   2016-10-01 05:33:00
post+csrf...?
作者: qazwsxee (彦)   2016-10-01 05:34:00
要再搭配什么字串才能产生正确hash码,API需要验证hash验证hash是否符合当前这分钟或是前一分钟的hash就能保证只有你的程式才能成功从api取得资料
作者: laject (hanks)   2016-10-01 05:39:00
一般在RESTful get是允许任何人read把所以取得资料从get改成post,再加上csrf
作者: alog (A肉哥)   2016-10-01 06:55:00
现在很多技术要弄到你的资料其实很容易的 不论接你json还是爬整个网页或是监听你加密过的资料只要用同个解密的方法一样解回你只能透过一些比较奇异的方式来ban机器人,例如定时检查的viewport是否合理,因为爬网页的触发到js 爬 json 的 通常沙盒的viewport很小根本不会是正常人会使用到大小 或是提供一些诱因让使用者要透过会员的身分才能存取 或获得更方便的检索、自动更新的功能
作者: seadog007 (海豹)   2016-10-01 07:03:00
真的要爬其实挡不掉(写过大量爬虫跟自动化流程的路过
作者: alog (A肉哥)   2016-10-01 07:05:00
不过说真的 做这类数据 应该也是爬别人资料分析起来的吧那些官网也没有很care吧
作者: imasaka1117 (Teddy)   2016-10-01 07:05:00
我记得默认不是锁网域的吗?要开放才能让大家call
作者: alog (A肉哥)   2016-10-01 07:06:00
不过你不甘愿也可以针对特定的机器人 喂他假资料
作者: imasaka1117 (Teddy)   2016-10-01 07:06:00
还是我会错意了QQ
作者: laject (hanks)   2016-10-01 07:07:00
锁ip感觉好像是最快的XDDD
作者: alog (A肉哥)   2016-10-01 07:07:00
以前是预过一个新增什么就跟着爬的
作者: imasaka1117 (Teddy)   2016-10-01 07:08:00
allow cross domain
作者: alog (A肉哥)   2016-10-01 07:08:00
因为在那个区域很竞争很多厂商都想免费接资料我就针对他的机器人给他塞了一段XSS code外加去扫系统进行内部的系统的攻击不仅cookie没http only 输出网页也没跳脱 直接机器人就把整段语法都复制1:1新增自己就把自己给搞爆囉
作者: laject (hanks)   2016-10-01 07:12:00
alog大大太厉害
作者: alog (A肉哥)   2016-10-01 07:16:00
以前有客户委托一个case特定系统的网页资料该网页是用了两个内嵌网页且父子元素的服务器位置都完全不同那时候比较先进技术还没出来 为了要破解他的系统防护就得将网页模拟的跟一般浏览者一样那时候用C#配NET下去写 遇到跨域的问题 系统的元件不给控制多层内嵌下的网页内容为了破解这到元件的限制就得用更底层的方法来写 整个部分就变得超级不方便然后有天东西写完了 很开心的让他常驻在imac上的windows虚拟机运作结果运作大概几天后 那神奇的网页让我整个整个虚拟机全死掉mac也有点不稳后来才发现元凶是该网页里有个神奇的flash会发生memory leak系统操作到后面 ie元件会炸掉 程式就死当了 然后吃掉系统一大堆的内存之后为了继续运作 我就干脆把整个flash元件停用该程式后来运作就正常了经历该事情之后 我就觉得 要防御机器人 其实要出怪招XD但是也能体会到 真的有心要破 只是时间早晚的问题
作者: vn509942 (如履薄冰)   2016-10-01 07:32:00
神奇的flashXDDD
作者: searcher ( )   2016-10-01 08:09:00
jwt
作者: maxqq (max)   2016-10-01 09:45:00
没有加密验证的机制吗?= =?
作者: viper9709 (阿达)   2016-10-01 13:23:00
对耶~没想过这个问题XD
作者: dnabossking (少狂)   2016-10-01 13:41:00
怎么可能防不了
作者: TSW (翘班帝国)   2016-10-01 14:41:00
怎么不去ajax板问?
作者: arenda (phantom in my heart)   2016-10-01 15:21:00
楼上不会就安静点 软件版本来就能讨论技术问题
作者: agogoman (cocorosie)   2016-10-01 15:29:00
感觉这不是安全性的问题, 是避免机器人查询的问题.如果是公开的API, 建议是用Throttling加验证机制去做Throttling也可以做出花样来, 像是判断间隔时间另外honeypot也是一招
作者: TSW (翘班帝国)   2016-10-01 15:54:00
arenda 不是因为太难,而是因为太简单,所以建议去ajax板
作者: arenda (phantom in my heart)   2016-10-01 15:58:00
如果只给自己网站呼叫 api server放内网不就解了
作者: TSW (翘班帝国)   2016-10-01 15:59:00
Y
作者: arenda (phantom in my heart)   2016-10-01 16:12:00
完全破不了而且一行code都不用写
作者: TSW (翘班帝国)   2016-10-01 16:14:00
有一点要注意的是,原PO的 api 可能是给浏览器 ajax 用的还有就是原po好像不是想挡网络爬虫,单纯只是api不想给call所以...基本上就是随便签个token就行...心理安慰罢了
作者: doranako (真爱无限)   2016-10-01 16:29:00
不是有oauth token机制吗
作者: TSW (翘班帝国)   2016-10-01 16:51:00
另一篇有比较具体的问题了,我回在那边
作者: heroboy999 (hero99)   2016-10-02 00:36:00
加白名单如何?指定的site才可call api
作者: CP64 (( ̄▽ ̄#)﹏﹏)   2016-10-02 02:16:00
基本上这种只能靠 cookie + token + referer 下去挡
作者: Ayukawayen (亚布里艾尔发芽>//<)   2016-10-02 21:40:00
要求前段呼叫API时带一个>N的质数(在前导要求指定N)如果第三方接你API 至少可以拿他传来的值去换成质数币
作者: seadog007 (海豹)   2016-10-03 15:19:00
所以说直接爬就好啊 干嘛解析flash
作者: magus (Magus)   2016-10-03 22:24:00
csrf_token存seesion比对?

Links booklink

Contact Us: admin [ a t ] ucptt.com