我正在使用https://github.com/lemmingzshadow/php-websocket/
我可以允许一些域,并且我已经允许localhost
了一个指向我的本地服务器的域。但我想知道在他的计算机上有服务器的其他人是否可以使用他的本地主机服务器中的脚本连接到我的 websocket(通过我的域)。
以下是相关代码:
-> 服务器/server.php
$server->setAllowedOrigin('localhost');
$server->setAllowedOrigin('mydomain.com');
-> 服务器/lib/WebSocket/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 中的同源策略。
我担心的是,如果我允许本地主机,也许其他计算机中的所有其他本地主机也将被允许。