我使用https://github.com/lemmingzshadow/php-websocket/我的websocket的服務器源檢查安全嗎?
我可以允許一些領域,我已經允許localhost
並指向我的本地服務器的域。但我想知道是否有其他人在他的計算機上有一臺服務器可以通過他的本地主機服務器中的腳本連接到我的websocket(通過我的域)。
下面是相關的代碼:
- >服務器/ server.php
$server->setAllowedOrigin('localhost');
$server->setAllowedOrigin('mydomain.com');
- >服務器/ LIB /網頁套接字/ Connection.php
// check origin:
if($this->server->getCheckOrigin() === true)
{
$origin = (isset($headers['Sec-WebSocket-Origin'])) ? $headers['Sec-WebSocket-Origin'] : false;
$origin = (isset($headers['Origin'])) ? $headers['Origin'] : $origin;
if($origin === false)
{
$this->log('No origin provided.');
$this->sendHttpResponse(401);
stream_socket_shutdown($this->socket, STREAM_SHUT_RDWR);
$this->server->removeClientOnError($this);
return false;
}
if(empty($origin))
{
$this->log('Empty origin provided.');
$this->sendHttpResponse(401);
stream_socket_shutdown($this->socket, STREAM_SHUT_RDWR);
$this->server->removeClientOnError($this);
return false;
}
if($this->server->checkOrigin($origin) === false)
{
$this->log('Invalid origin provided.');
$this->sendHttpResponse(401);
stream_socket_shutdown($this->socket, STREAM_SHUT_RDWR);
$this->server->removeClientOnError($this);
return false;
}
}
- >服務器/ lib/WebSocket/Server.php
public function checkOrigin($domain)
{
$domain = str_replace('http://', '', $domain);
$domain = str_replace('https://', '', $domain);
$domain = str_replace('www.', '', $domain);
$domain = str_replace('/', '', $domain);
return isset($this->_allowedOrigins[$domain]);
}
public function setAllowedOrigin($domain)
{
$domain = str_replace('http://', '', $domain);
$domain = str_replace('www.', '', $domain);
$domain = (strpos($domain, '/') !== false) ? substr($domain, 0, strpos($domain, '/')) : $domain;
if(empty($domain))
{
return false;
}
$this->_allowedOrigins[$domain] = true;
return true;
}
編輯:
也許我不夠清楚。我希望每個人都可以連接到websocket,但只有當他們在我的域名(或我的本地主機)時,就像AJAX中的Same Origin Policy一樣。
我的擔心是,如果我允許本地主機,也許其他計算機中的其他本地主機也將被允許。
_maybe其他計算機中的所有其他本地主機都將被允許。不,這不是問題。 IP由您的服務器轉換爲名稱,'localhost'僅用於連接來自'127.0.0.1'的環回地址。 – Barmar
謝謝,這就是我想知道的。但是起源是由一個頭文件提供的,如果我不告訴它這麼做,我的服務器不應該分析我的頭文件來嘗試轉換IP和域名,不是嗎? – Oriol
它來自IP數據包的頭部,用於實現TCP/IP傳輸。如果您在允許列表中使用主機名稱,則必須使用DNS將這些名稱轉換爲IP。 – Barmar