2013-12-23 174 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。因此,如果你的套接字只監聽本地主機上的連接,所有連接將來自本地主機。而你的支票是多餘的。 –