問題
我有一項將內容推送給用戶的服務。爲了向用戶提供此內容,客戶將在其網站上包含腳本。他們的腳本會向我的服務器發送一個令牌以標識它是哪個客戶,但問題在於:如果有人從用戶的網站複製腳本,他們可以收到此實時內容,並且客戶將爲不在其網站上的用戶。那麼,有沒有辦法確保腳本只包含在他們的網站上?谷歌分析如何實現這一目標?確保腳本僅包含在某些頁面中
我有一個想法,但我不知道這是否完全安全。
- 客戶告訴我他們想包含我的腳本的任何域(包括子域)。
- 我給用戶一個非常小的文本文件,他們存儲在他們的服務器上。
- 加載腳本後,它會檢查window.location.host,並嘗試從託管域的根目錄中獲取文本文件。
- 如果找到該文件,並且內容與我向客戶提供該文件時生成的內容相匹配,我將激活該服務。
這項工作?
爲什麼我不能使用window.location的
比方說,我的劇本讀了window.location,併發送到URL現在mydomain.com?token=ABC&locationhost=goodcustomer.com
,baduser.com的所有者希望濫用帳戶gooduser.com,所以他包含gooduser.com的腳本。腳本現在發送一個ajax請求到mydomain.com?token=ABC&locationhost=badcustomer.com
這不會啓動服務,因爲badservice.com不是goodcustomer.com所有者在註冊時輸入的域。這很容易規避,因爲badcustomer.com的所有者可以看看我的腳本,注意它發送了一個驗證url的請求,並且只發送他自己的請求。所以他會發送一個請求到mydomain.com?token=ABC&locationhost=goodcustomer.com
。我的服務器看到了這個請求,比較了位置主機和與這個令牌關聯的域,並且開始給badcustomer.com的用戶提供goodcustomer.com用戶的內容。我的服務器無法知道請求是由我自己的腳本發送的,還是由試圖模擬實際客戶的用戶發送的。
如果誰在第一時間刷過腳本的人也抓住了文本文件,那麼它將不起作用。顯然他們必須知道該文件在那裏,但如果你能找到它,其他人也可以檢查發送該令牌的請求的源頭,以及服務 中的客戶提供的域列表。 ?雖然你必須檢查某人是不是僞造起始請求的地方 – nat
我想你誤解了我的意思。客戶端的服務器不發送令牌。令牌只是我的腳本請求中的一個參數,與分析跟蹤代碼類似。我希望任何使用靜態網站的人都可以使用我的服務,所以我不能要求他們從他們的服務器向我的服務器發送請求。 – bigblind
當然,所以你驗證這個ID對你持有該ID的域列表..不是?無論哪種方式,你需要知道他們的領域。 – nat