[英]Protect public API from unwanted “submissions”
我一直在安靜地擺弄這個問題一段時間,但到目前為止還沒有找到令人滿意的解決方案。
我們目前正在創建一個新的公共 API,小部件將使用它來獲取信息,但也將信息回傳到系統(如聯系表格)。 由於小部件將作為 web 組件實現並且可以在任何頁面上實現,因此我們無法控制小部件的交付方式。
我現在面臨的問題是:我們如何保護 API 免受不必要的提交(除了常規表單驗證),以便我們可以安靜地確定它是來自該表單的提交,還是對 API 的合法 POST?
我擔心的是,在這種情況下,所有內容都是可欺騙的(例如,獲取表單令牌並將其作為 header 提交,驗證源標頭,...),因為它很容易被欺騙,即使用 Postman。 對於您的任何經驗和正確方向的提示,我將非常高興。
我想你可以試試:
你有沒有實現過類似的東西? 也許通過看到你有什么,我們可以看到缺少什么。
由於是公開的,並且允許從任何系統訪問,它也很復雜。 也許評估一個認證系統,並從小部件本身進行認證,通過密鑰結合速率限制是一個好主意。
如果你有一個沒有認證的公共 API,
您所能做的就是讓黑客盡可能難以訪問。
換句話說:在門上放更多/復雜的鎖……但可以選擇任何鎖
我們用來保持 WebComponent “安全”的方法,
是從一個長 URI 加載 WebComponent:
(現代瀏覽器不再有 2048 個字符的 URI 限制)
https://domain/p1/p2/customeElements/define/secure-api/HTMLElement/p7/p8/webcomponent.js
然后組件代碼將 URI解碼為
let p = [domain,p1,p2,"customElements","define","secure-api","HTMLElement",p7,p8]
執行 JavaScript:
window[p[3]][p[4]](p[5],class extends window[p[6]]{...
如果你加入一些 BtoA/AtoB 和 String.reverse() 轉換
https://domain/AH=V/CV=/==QYvRnY/aW5uZXJ/IVE1M/webcomponent.js
你已經阻止了大多數潛在的黑客
通過在服務器端生成webcomponent.js
以使用/domain/
部分,
那個長的 URI 可以是服務器和客戶端之間的(唯一的)握手
由於所有 state 都在 URI 中,因此很容易應用地址移位機制,
每個請求都可以是不同的 URI(使 PostMan 無法使用並且調試起來也很痛苦:-)
[我們還應用了一些其他技巧,我不會在這里解釋]
它不會阻止黑客,但會延遲他們足夠長的時間讓大多數人放棄。
在我們的代碼/URI 編碼中,我們還包含了對唯一“ mousetrap ”URI 的引用。
如果我們在該子目錄中檢測到 404 活動,我們就知道有人在主動開鎖。
而且..我們可以交互地引導/引導他們到更多的捕鼠器。
到目前為止,我們只進行了一次嘗試。
一個電話(因為我們知道買家域名)就足以讓他們停下來。
您好 [非常大-知名] IT 公司 X 的 IT 經理,
如果我們檢測到來自貴公司 IP 地址 nn.nn.nn.nn 的黑客攻擊,
根據法律,我們必須向當局報告
HTH
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.