[請益] 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