2011-09-23 120 views
3
  1. 我在服務器上有一個更新數據庫的PHP腳本。保護對遠程php腳本的呼叫

  2. 我希望能夠從遠程調用這個腳本,無論是從另一臺服務器或使用GET 我的本地PC,或者使用AJAX的瀏覽器,

  3. 但我不希望任何人除非允許使用 ,否則可以調用此腳本。

到目前爲止,我只是簡單地添加到腳本的一段代碼來驗證得到一定的引腳,即

//myscript.php 

if(isset($_GET['pin']) && $_GET['pin'] === '1234') 
{ 
    //update the DB... 

這樣遠程調用程序必須知道PIN碼,即

file_get_contents(http://remoteserver.com/myscrip.php?pin=1234); //will work 
file_get_contents(http://remoteserver.com/myscrip.php?pin=5678); //will NOT work 

這似乎很簡單,我想知道它是否安全。

什麼是其他可能更安全的替代品(可能不是太複雜)?

例如,我閱讀了關於使用隨時間變化的哈希值,但是值得嗎,它怎麼做?

回答

3

你可以使用密碼保護文件夾(如果你使用cpanel或plesk,可以輕鬆完成)並使用curl來訪問該網址。

$ch = curl_init($url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); 
curl_setopt($ch, CURLOPT_USERPWD, $username . ':' . $password); 
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY); 
$output = curl_exec($ch); 
$info = curl_getinfo($ch); 
curl_close($ch); 
+0

它的作品就像一個魅力。謝謝,我只是改變了一點代碼更清楚, –

2

您的解決方案是安全的,但只能達到一個點,所以它取決於其他人不稱呼它的重要性。例如,如果有人監視到該服務器的網絡流量,他們將擁有密碼,因爲它永遠不會改變。請記住它是通過互聯網以明文形式發送的。所以我個人不會有這個PHP腳本更新我的瑞士銀行賬戶。

一種選擇是根據日期和/或時間使用算法密碼,因此每次都會有所不同。

另一種解決方案是使用腳本check the IP address of the request,如果沒有對服務器的物理訪問,這將更難以破解。

+0

IP不是解決方案,因爲我想從我的本地主機PC調用遠程腳本,但我的IP是由ISP動態分配的(每天它改變它) 。 –

+0

您可以將IP地址解析爲主機名並取消完全限定的域名。如果您的ISP最多,完整的域名將包含一些地理區域組件。這至少會阻止來自其他國家的人訪問它。您也可以檢查IP地址的前兩個不應更改的數字(四元組)。或者通過查找您的ISP所擁有的IP地址範圍來進一步縮小範圍。 –

2

可以使用Basic Authentication

+0

這會使pin只是base64編碼,不是嗎? –

+0

是的,因爲它會是用戶名和密碼的base64編碼。正如你提到你gona使用它與瀏覽器,你會得到一個很好的彈出與簡單的方法來輸入用戶名和密碼也檢查瀏覽器歷史不會顯示「引腳」不像簡單的GET如果你想更安全,然後http:// en .wikipedia.org /維基/ Digest_access_authentication –

1

的一個問題,您的例子是,它會通過一個瀏覽器的歷史收藏家收集。因此,如果您在家中輸入GET,並且第二天您的孩子開始輸入「rem ...」,瀏覽器將顯示URL和您的唯一憑證。如果更新你的數據庫不是一件破壞性的事情(如果它發生了額外的一兩次,它不會是最糟糕的),並且你相對謹慎和有紀律(每次都清楚的歷史記錄),那麼這也不算太壞。

由於您使用的是PHP,因此您應該查看PHP's preferred way