1
因此,問題是: 有沒有辦法確定試圖連接到我的websocket服務器的客戶端是否從我提供的網頁執行此操作,而不是從任何其他頁面或腳本?如何確保從我的網頁打開websocket
因此,問題是: 有沒有辦法確定試圖連接到我的websocket服務器的客戶端是否從我提供的網頁執行此操作,而不是從任何其他頁面或腳本?如何確保從我的網頁打開websocket
一個惡意的用戶/程序可以連接到這個websocket,並且你無能爲力(故事結束)。但是,WebSockets的同源策略應該與XHR非常相似。除非您明確允許,否則其他域上的JavaScript無法訪問域上的WebSocket。所以這意味着如果有人在哪裏重新發布您的內容,他們將不得不使用跨域代理。
「另一個域上的JavaScript無法訪問您的域上的WebSocket。」 - 這實際上是可能的。你只需要檢查'Sec-WebSocket-Origin'頭值。 – pimvdb
@pimvdb完全是我的觀點,兩個特徵的規則幾乎完全相同。使用XHR,您可以使用'Access-Control-Allow-Origin:*'標題。 – rook
爲了闡明,運行在一個不妥協,行爲良好的瀏覽器中的Javascript不會影響Sec-WebSocket-Origin的值,該值包含加載頁面的原始站點的值(允許您的服務器僅允許某些始發點)。但是,如果您將Javascript作爲WebSocket客戶端在Node.js中運行,則可以將原始值設置爲任何想要的值。 CORS安全性是爲了瀏覽器用戶的安全,而不是爲了你的服務器。您需要其他機制來保護您的服務器。 – kanaka