[請益] REST 網站 api 安全性

看板Soft_Job作者 (.)時間7年前 (2016/10/01 05:24), 7年前編輯推噓14(15162)
留言78則, 18人參與, 最新討論串1/9 (看更多)
假設我架設了一個大聯盟球員數據查詢網站 努力整理分析數據,又花錢租了server 架構用rest api 前端送api到server,後端傳json回去 如果某個路人看到我的網站整理的很棒 他也想做一個 那他豈不是只要自己寫個前端 然後使用和我一樣的api,我的server一樣會回應我所整理好漂亮整齊的json 這個路人豈不是做起了無本生意嗎? 請問這個問題有解嗎? ~~ 簡單說 我的內容只想服務給"真的來我網站的人" 而非第三方網頁和機器人 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 204.96.168.3 ※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1475270642.A.665.html

10/01 05:30, , 1F
Header裡帶一組依時間變化的Hash碼
10/01 05:30, 1F

10/01 05:31, , 2F
sha1($time.'xxx任意字串') => 產生hash碼
10/01 05:31, 2F

10/01 05:33, , 3F
只有你的程式知道當前時間(最低到分:2016-10-01 05:30)
10/01 05:33, 3F

10/01 05:33, , 4F
post+csrf...?
10/01 05:33, 4F

10/01 05:34, , 5F
要再搭配什麼字串才能產生正確hash碼,API需要驗證hash
10/01 05:34, 5F

10/01 05:36, , 6F
驗證hash是否符合當前這分鐘或是前一分鐘的hash
10/01 05:36, 6F

10/01 05:37, , 7F
就能保證只有你的程式才能成功從api取得資料
10/01 05:37, 7F

10/01 05:39, , 8F
一般在RESTful get是允許任何人read
10/01 05:39, 8F

10/01 05:40, , 9F
把所以取得資料從get改成post,再加上csrf
10/01 05:40, 9F

10/01 06:55, , 10F
現在很多技術要弄到你的資料其實很容易的 不論接你json還是
10/01 06:55, 10F

10/01 06:55, , 11F
爬整個網頁
10/01 06:55, 11F

10/01 06:57, , 12F
或是監聽你加密過的資料只要用同個解密的方法一樣解回
10/01 06:57, 12F

10/01 07:00, , 13F
你只能透過一些比較奇異的方式來ban機器人,例如定時檢查的v
10/01 07:00, 13F

10/01 07:00, , 14F
iewport是否合理,因為爬網頁的觸發到js 爬 json 的 通常沙
10/01 07:00, 14F

10/01 07:00, , 15F
盒的viewport很小
10/01 07:00, 15F

10/01 07:02, , 16F
根本不會是正常人會使用到大小 或是提供一些誘因讓使用者要
10/01 07:02, 16F

10/01 07:02, , 17F
透過會員的身分才能存取 或獲得更方便的檢索、自動更新的功
10/01 07:02, 17F

10/01 07:02, , 18F
10/01 07:02, 18F

10/01 07:03, , 19F
真的要爬其實擋不掉(寫過大量爬蟲跟自動化流程的路過
10/01 07:03, 19F

10/01 07:05, , 20F
不過說真的 做這類數據 應該也是爬別人資料分析起來的吧
10/01 07:05, 20F

10/01 07:05, , 21F
那些官網也沒有很care吧
10/01 07:05, 21F

10/01 07:05, , 22F
我記得預設不是鎖網域的嗎?要開放才能讓大家call
10/01 07:05, 22F

10/01 07:06, , 23F
不過你不甘願也可以針對特定的機器人 喂他假資料
10/01 07:06, 23F

10/01 07:06, , 24F
還是我會錯意了QQ
10/01 07:06, 24F

10/01 07:07, , 25F
鎖ip感覺好像是最快的XDDD
10/01 07:07, 25F

10/01 07:07, , 26F
以前是預過一個新增什麼就跟著爬的
10/01 07:07, 26F

10/01 07:08, , 27F
allow cross domain
10/01 07:08, 27F

10/01 07:08, , 28F
因為在那個區域很競爭很多廠商都想免費接資料
10/01 07:08, 28F

10/01 07:09, , 29F
我就針對他的機器人給他塞了一段XSS code外加去掃系統進行
10/01 07:09, 29F

10/01 07:09, , 30F
內部的系統的攻擊
10/01 07:09, 30F

10/01 07:10, , 31F
不僅cookie沒http only 輸出網頁也沒跳脫 直接機器人就把整
10/01 07:10, 31F

10/01 07:10, , 32F
段語法都複製1:1新增自己就把自己給搞爆囉
10/01 07:10, 32F

10/01 07:12, , 33F
alog大大太厲害
10/01 07:12, 33F

10/01 07:16, , 34F
以前有客戶委託一個case特定系統的網頁資料
10/01 07:16, 34F

10/01 07:17, , 35F
該網頁是用了兩個內嵌網頁且父子元素的伺服器位置都完全不同
10/01 07:17, 35F

10/01 07:17, , 36F
那時候比較先進技術還沒出來 為了要破解他的系統防護
10/01 07:17, 36F

10/01 07:18, , 37F
就得將網頁模擬的跟一般瀏覽者一樣
10/01 07:18, 37F

10/01 07:19, , 38F
那時候用C#配NET下去寫 遇到跨域的問題 系統的元件不給控制
10/01 07:19, 38F

10/01 07:19, , 39F
多層內嵌下的網頁內容
10/01 07:19, 39F

10/01 07:20, , 40F
為了破解這到元件的限制就得用更底層的方法來寫 整個部分就
10/01 07:20, 40F

10/01 07:20, , 41F
變得超級不方便
10/01 07:20, 41F

10/01 07:21, , 42F
然後有天東西寫完了 很開心的讓他常駐在imac上的windows虛
10/01 07:21, 42F

10/01 07:21, , 43F
擬機運作
10/01 07:21, 43F

10/01 07:22, , 44F
結果運作大概幾天後 那神奇的網頁讓我整個整個虛擬機全死掉
10/01 07:22, 44F

10/01 07:22, , 45F
mac也有點不穩
10/01 07:22, 45F

10/01 07:23, , 46F
後來才發現元兇是該網頁裡有個神奇的flash會發生memory leak
10/01 07:23, 46F

10/01 07:24, , 47F
系統操作到後面 ie元件會炸掉 程式就死當了 然後吃掉系統一
10/01 07:24, 47F

10/01 07:24, , 48F
大堆的記憶體
10/01 07:24, 48F

10/01 07:25, , 49F
之後為了繼續運作 我就乾脆把整個flash元件停用
10/01 07:25, 49F

10/01 07:25, , 50F
該程式後來運作就正常了
10/01 07:25, 50F

10/01 07:26, , 51F
經歷該事情之後 我就覺得 要防禦機器人 其實要出怪招XD
10/01 07:26, 51F

10/01 07:27, , 52F
但是也能體會到 真的有心要破 只是時間早晚的問題
10/01 07:27, 52F

10/01 07:32, , 53F
神奇的flashXDDD
10/01 07:32, 53F

10/01 08:09, , 54F
jwt
10/01 08:09, 54F

10/01 09:45, , 55F
沒有加密驗證的機制嗎?= =?
10/01 09:45, 55F

10/01 13:23, , 56F
對耶~沒想過這個問題XD
10/01 13:23, 56F
※ 編輯: sean72 (172.89.32.145), 10/01/2016 13:42:14

10/01 13:41, , 57F
怎麼可能防不了
10/01 13:41, 57F

10/01 14:41, , 58F
怎麼不去ajax板問?
10/01 14:41, 58F

10/01 15:21, , 59F
樓上不會就安靜點 軟體版本來就能討論技術問題
10/01 15:21, 59F

10/01 15:29, , 60F
感覺這不是安全性的問題, 是避免機器人查詢的問題.
10/01 15:29, 60F

10/01 15:30, , 61F
如果是公開的API, 建議是用Throttling加驗證機制去做
10/01 15:30, 61F

10/01 15:32, , 62F
Throttling也可以做出花樣來, 像是判斷間隔時間
10/01 15:32, 62F

10/01 15:33, , 63F
另外honeypot也是一招
10/01 15:33, 63F

10/01 15:54, , 64F
arenda 不是因為太難,而是因為太簡單,所以建議去ajax板
10/01 15:54, 64F

10/01 15:58, , 65F
如果只給自己網站呼叫 api server放內網不就解了
10/01 15:58, 65F

10/01 15:59, , 66F
Y
10/01 15:59, 66F

10/01 16:12, , 67F
完全破不了而且一行code都不用寫
10/01 16:12, 67F

10/01 16:14, , 68F
有一點要注意的是,原PO的 api 可能是給瀏覽器 ajax 用的
10/01 16:14, 68F

10/01 16:18, , 69F
還有就是原po好像不是想擋網路爬蟲,單純只是api不想給call
10/01 16:18, 69F

10/01 16:19, , 70F
所以...基本上就是隨便簽個token就行...心理安慰罷了
10/01 16:19, 70F

10/01 16:29, , 71F
不是有oauth token機制嗎
10/01 16:29, 71F

10/01 16:51, , 72F
另一篇有比較具體的問題了,我回在那邊
10/01 16:51, 72F

10/02 00:36, , 73F
加白名單如何?指定的site才可call api
10/02 00:36, 73F

10/02 02:16, , 74F
基本上這種只能靠 cookie + token + referer 下去擋
10/02 02:16, 74F

10/02 21:40, , 75F
要求前段呼叫API時帶一個>N的質數(在前導要求指定N)
10/02 21:40, 75F

10/02 21:41, , 76F
如果第三方接你API 至少可以拿他傳來的值去換成質數幣
10/02 21:41, 76F

10/03 15:19, , 77F
所以說直接爬就好啊 幹嘛解析flash
10/03 15:19, 77F

10/03 22:24, , 78F
csrf_token存seesion比對?
10/03 22:24, 78F
文章代碼(AID): #1NxjVoPb (Soft_Job)
討論串 (同標題文章)
以下文章回應了本文 (最舊先):
完整討論串 (本文為第 1 之 9 篇):
文章代碼(AID): #1NxjVoPb (Soft_Job)