2009-11-23 91 views
0

我已經編寫了一些PHP腳本在局域網上的無頭linux服務器上執行一些服務器端工作。例如,我有http://ipadress/php/operations.php?operation=registerUser&uName=X&uAlias=Y。現在,我想確保我的操作腳本,以便;不是LAN上的每個人都可以調用它和/或運行它,只有那些......有預共享密鑰......?這是我堅持的要點,要求通過GET/POST參數預共享密鑰將是最簡單的,可能是最糟糕的解決方案。在PHP腳本中實現客戶限制的更安全的方法是什麼?PHP中的安全性

(我想在開始會話時可能需要客戶端加密的密鑰文件,並拒絕訪問沒有開始scure會話的每個人...?這只是我的思想,不知道從哪裏開始要做到這一點在PHP)

編輯:我clealrly記得寫在我原來的職位,所以請您「需要通過GET/POST參數預共享密鑰是easisest並且可能是最糟糕的解決方案。」一次又一次地停止回答這個相同的事情。

edit2:清除事情:operations.php由同一局域網上的客戶機上的程序調用。我不希望任何非客戶端或陌生人機器使用operations.php,並且不希望任何人能夠通過瀏覽器訪問它。我需要某種安全/認證方法來防止這種情況發生。我不尋找登錄表單或簡單的HttpAuths ...另外,我不能只是簡單地限制IP地址,因爲;它只是不實際,有點比硬編碼的非加密密碼...

回答

2

如果您使用Apache與mod_ssl,它可以force clients to authenticate using certificates由特定的證書頒發機構簽名。

理論上,您只能創建三個證書:您的簽名證書,您的服務器證書和一個證書以分發給客戶端。

雖然這通常被認爲是一個壞主意。向每個客戶分發單獨的證書通常會更好。

+0

這是迄今爲止最好的主意。爲每個客戶生成證書不應該是一個問題。我可以在Windows主機上的IIS7(和Linux主機上的lighttpd)上做這樣的事嗎? – 2009-11-24 19:01:27

+0

我對IIS7並不十分熟悉,但是這個頁面可能有所幫助:http://learn.iis.net/page.aspx/478/configuring-one-to-one-client-certificate-mappings/ – Powerlord 2009-11-24 19:53:07

1

在我看來,你是在問一個關於網頁認證和授權的一般問題。

當然,有許多不同的方法來實現這一點。您可以設置基於會話的認證系統,要求用戶在訪問頁面/腳本之前輸入有效的用戶名/密碼。這可能與用戶嘗試訪問該頁面時呈現的登錄表單一樣簡單,除非它們已通過身份驗證。然後,您可以使用PHP的內置會話管理來持續跨頁面的身份驗證。

或者,您可以在Web服務器級別進行身份驗證,例如在Apache中通過HTTP身份驗證進行身份驗證。

3

最簡單的方法我能想到的:

<?php 

if ($_REQUEST['key'] == '38lkjsdIEjrkd' && $_SERVER['REMOTE_ADDR'] == 192.168.1.20) { 

// load your web page 

} else { 

// show login or message about authentication 

} 

我希望幫助。

0

我通過創建.htaccess(僅允許某些地址訪問腳本)和.htpasswd(定義有權訪問的用戶)第二個jonstjohn對HTTP身份驗證的意見。 但是,如果您只需要幾個腳本的快速解決方案,就是如此。

如果有更多需要有限訪問的腳本,最好的解決方案是創建一個類來照顧用戶日誌並跟蹤用戶會話。

一般來說,在腳本中嵌入密碼和幻數被認爲是不好的編碼風格。更不用說那些硬編碼的「if」真的很難維護。

0

取決於您所需的安全級別。基本的Http Auth很容易設置。請參閱the manual