看板 Soft_Job 關於我們 聯絡資訊
假設我架設了一個大聯盟球員數據查詢網站 努力整理分析數據,又花錢租了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
qazwsxee: Header裡帶一組依時間變化的Hash碼 10/01 05:30
qazwsxee: sha1($time.'xxx任意字串') => 產生hash碼 10/01 05:31
qazwsxee: 只有你的程式知道當前時間(最低到分:2016-10-01 05:30) 10/01 05:33
laject: post+csrf...? 10/01 05:33
qazwsxee: 要再搭配什麼字串才能產生正確hash碼,API需要驗證hash 10/01 05:34
qazwsxee: 驗證hash是否符合當前這分鐘或是前一分鐘的hash 10/01 05:36
qazwsxee: 就能保證只有你的程式才能成功從api取得資料 10/01 05:37
laject: 一般在RESTful get是允許任何人read 10/01 05:39
laject: 把所以取得資料從get改成post,再加上csrf 10/01 05:40
alog: 現在很多技術要弄到你的資料其實很容易的 不論接你json還是 10/01 06:55
alog: 爬整個網頁 10/01 06:55
alog: 或是監聽你加密過的資料只要用同個解密的方法一樣解回 10/01 06:57
alog: 你只能透過一些比較奇異的方式來ban機器人,例如定時檢查的v 10/01 07:00
alog: iewport是否合理,因為爬網頁的觸發到js 爬 json 的 通常沙 10/01 07:00
alog: 盒的viewport很小 10/01 07:00
alog: 根本不會是正常人會使用到大小 或是提供一些誘因讓使用者要 10/01 07:02
alog: 透過會員的身分才能存取 或獲得更方便的檢索、自動更新的功 10/01 07:02
alog: 能 10/01 07:02
seadog007: 真的要爬其實擋不掉(寫過大量爬蟲跟自動化流程的路過 10/01 07:03
alog: 不過說真的 做這類數據 應該也是爬別人資料分析起來的吧 10/01 07:05
alog: 那些官網也沒有很care吧 10/01 07:05
imasaka1117: 我記得預設不是鎖網域的嗎?要開放才能讓大家call 10/01 07:05
alog: 不過你不甘願也可以針對特定的機器人 喂他假資料 10/01 07:06
imasaka1117: 還是我會錯意了QQ 10/01 07:06
laject: 鎖ip感覺好像是最快的XDDD 10/01 07:07
alog: 以前是預過一個新增什麼就跟著爬的 10/01 07:07
imasaka1117: allow cross domain 10/01 07:08
alog: 因為在那個區域很競爭很多廠商都想免費接資料 10/01 07:08
alog: 我就針對他的機器人給他塞了一段XSS code外加去掃系統進行 10/01 07:09
alog: 內部的系統的攻擊 10/01 07:09
alog: 不僅cookie沒http only 輸出網頁也沒跳脫 直接機器人就把整 10/01 07:10
alog: 段語法都複製1:1新增自己就把自己給搞爆囉 10/01 07:10
laject: alog大大太厲害 10/01 07:12
alog: 以前有客戶委託一個case特定系統的網頁資料 10/01 07:16
alog: 該網頁是用了兩個內嵌網頁且父子元素的伺服器位置都完全不同 10/01 07:17
alog: 那時候比較先進技術還沒出來 為了要破解他的系統防護 10/01 07:17
alog: 就得將網頁模擬的跟一般瀏覽者一樣 10/01 07:18
alog: 那時候用C#配NET下去寫 遇到跨域的問題 系統的元件不給控制 10/01 07:19
alog: 多層內嵌下的網頁內容 10/01 07:19
alog: 為了破解這到元件的限制就得用更底層的方法來寫 整個部分就 10/01 07:20
alog: 變得超級不方便 10/01 07:20
alog: 然後有天東西寫完了 很開心的讓他常駐在imac上的windows虛 10/01 07:21
alog: 擬機運作 10/01 07:21
alog: 結果運作大概幾天後 那神奇的網頁讓我整個整個虛擬機全死掉 10/01 07:22
alog: mac也有點不穩 10/01 07:22
alog: 後來才發現元兇是該網頁裡有個神奇的flash會發生memory leak 10/01 07:23
alog: 系統操作到後面 ie元件會炸掉 程式就死當了 然後吃掉系統一 10/01 07:24
alog: 大堆的記憶體 10/01 07:24
alog: 之後為了繼續運作 我就乾脆把整個flash元件停用 10/01 07:25
alog: 該程式後來運作就正常了 10/01 07:25
alog: 經歷該事情之後 我就覺得 要防禦機器人 其實要出怪招XD 10/01 07:26
alog: 但是也能體會到 真的有心要破 只是時間早晚的問題 10/01 07:27
vn509942: 神奇的flashXDDD 10/01 07:32
searcher: jwt 10/01 08:09
maxqq: 沒有加密驗證的機制嗎?= =? 10/01 09:45
viper9709: 對耶~沒想過這個問題XD 10/01 13:23
※ 編輯: sean72 (172.89.32.145), 10/01/2016 13:42:14
dnabossking: 怎麼可能防不了 10/01 13:41
TSW: 怎麼不去ajax板問? 10/01 14:41
arenda: 樓上不會就安靜點 軟體版本來就能討論技術問題 10/01 15:21
agogoman: 感覺這不是安全性的問題, 是避免機器人查詢的問題. 10/01 15:29
agogoman: 如果是公開的API, 建議是用Throttling加驗證機制去做 10/01 15:30
agogoman: Throttling也可以做出花樣來, 像是判斷間隔時間 10/01 15:32
agogoman: 另外honeypot也是一招 10/01 15:33
TSW: arenda 不是因為太難,而是因為太簡單,所以建議去ajax板 10/01 15:54
arenda: 如果只給自己網站呼叫 api server放內網不就解了 10/01 15:58
TSW: Y 10/01 15:59
arenda: 完全破不了而且一行code都不用寫 10/01 16:12
TSW: 有一點要注意的是,原PO的 api 可能是給瀏覽器 ajax 用的 10/01 16:14
TSW: 還有就是原po好像不是想擋網路爬蟲,單純只是api不想給call 10/01 16:18
TSW: 所以...基本上就是隨便簽個token就行...心理安慰罷了 10/01 16:19
doranako: 不是有oauth token機制嗎 10/01 16:29
TSW: 另一篇有比較具體的問題了,我回在那邊 10/01 16:51
heroboy999: 加白名單如何?指定的site才可call api 10/02 00:36
CP64: 基本上這種只能靠 cookie + token + referer 下去擋 10/02 02:16
Ayukawayen: 要求前段呼叫API時帶一個>N的質數(在前導要求指定N) 10/02 21:40
Ayukawayen: 如果第三方接你API 至少可以拿他傳來的值去換成質數幣 10/02 21:41
seadog007: 所以說直接爬就好啊 幹嘛解析flash 10/03 15:19
magus: csrf_token存seesion比對? 10/03 22:24