2013-12-23 96 views
0

这是安全问题。我有一个套接字服务器,应该只能从同一台服务器访问,换句话说,只能从本地主机。我需要以某种方式检查尝试连接的远程用户是否不属于局外人。目前,我想出了:限制套接字服务器访问

socket_getpeername($current_socket, $client_address, $client_port); 

if($client_address == '127.0.0.1') 
{ 
    //allow 
} 

但这种方法是不是最好的,因为我在继续之前需要socket_accept()任何用户。有人知道如何处理它吗?

+1

约在使用防火墙端口是什么?设置一个规则来防止外部访问。 – ethrbunny

回答

3

接受套接字然后删除连接是完全可以接受的。

如果您不喜欢它,您可以在您的操作系统中设置防火墙规则,以允许仅从本地主机进行连接。

+0

是的,我认为这样...会相信你的经验和声誉。谢谢! :) – Nevertheless

0

我的建议是你让你的套接字只听127.0.0.1。这样它只能从本地主机连接。

我假设你正在使用stream_socket_server()

$socket = stream_socket_server("udp://127.0.0.1:1113", $errno, $errstr, STREAM_SERVER_BIND); 
if (!$socket) { 
    die("$errstr ($errno)"); 
} 
+0

不,我使用'SOCK_STREAM'的'socket_create()'然后''socket_bind()'到'localhost' - 这是用于服务器的;然而,即使这样,有人可以通过telnet连接到127.0.0.1。我也在使用我自己的认证系统,但理论上它可以被绕过。我的客户端监听服务器是安全的,但有人可能只是复制客户端脚本并连接到服务器,这是我主要关心的问题。 – Nevertheless

+0

@ grimv01k但是,如果他们使用telnet从本地主机连接到您的服务器,则客户端地址仍然是127.0.0.1。因此,如果你的套接字只监听本地主机上的连接,所有连接将来自本地主机。而你的支票是多余的。 –