2014-02-25 41 views
0

對於一個巨大的項目,我們將做一個「superadmin」登錄(所有其他管理工作直接在前端)的地方,你可以改變很多事情。IP白名單爲管理界面

由於安全性確實非常重要,我一直在考慮只允許具有特定IP的用戶進行連接。有誰知道這樣做的網站,它是過度保護,或者你能推薦另一種真正安全的管理方式嗎? 只有在Chrome或Firefox中有一些有用的可能性時,我們才能使其適用於特定的瀏覽器。

FYI前端是JavaScript的,HTML和CSS只

+1

'另一種真正安全的方式'阻止你在你的前端Javascript中使用它。在服務器端進行。 – Lloyd

+1

用戶管理不是用於後端的任務,而不是前端? – Joseph

+0

在你的javascript中的IP阻塞並不是非常有用,有人可以改變它的價值......爲了安全起見,你需要*讓後端驗證和限制所有內容,而不是你的前端js。 – gpgekko

回答

1

將沒有意義做客戶端,因爲沒有什麼真正停止從修改/禁用您的JS攻擊者。

所以只有安全選項是服務器端。我自己在PHP中使用CMS系統。

UPDATE:樣品實施

在該項目中,我使用了GeoIP的服務(如this one從的MaxMind)

function geoIPRequest($ip){ 
    $params = getopt('l:i:'); 

    if (!isset($params['l'])) $params['l'] = '<userIDtoMaxMind>'; 
    if (!isset($params['i'])) $params['i'] = $ip; 

    $query = 'https://geoip.maxmind.com/a?' . http_build_query($params); 

    $curl = curl_init(); 
    curl_setopt_array(
     $curl, 
     array(
      CURLOPT_URL => $query, 
      CURLOPT_USERAGENT => 'MaxMind PHP', 
      CURLOPT_RETURNTRANSFER => true 
     ) 
    ); 

    $countryCode = curl_exec($curl); 

    if (curl_errno($curl)) { 
     throw new Exception(
      'GeoIP request failed with a curl_errno of ' 
      . curl_errno($curl) 
     ); 
    } 
    return $countryCode; 
} 

$countryCode = geoIPRequest($_SERVER['REMOTE_ADDR']); 

if(!in_array($countryCode, array('DE', 'DK', 'EU', 'GB', 'SE'))){ 
    header('HTTP/1.0 403 Forbidden'); 
    echo "You don't have access"; 
    exit(); 
} 

上面的代碼是從示例代碼適應上的MaxMind網站

你當然需要適應你的用例。對我而言,特定的國家已經夠好了。如果您需要將特定的 IP列入白名單,我建議您創建一個包含白名單IP的數據庫表,然後在有人請求您的管理頁面時查詢該表。

+0

有趣。你是怎麼做到的? –

+0

@MortenHjort我在回答中添加了一個完整的示例。請記住,爲了清晰起見,我簡化了一下。您可能需要考慮您使用的GeoIP服務的緩存結果。 – Lasse

+0

當某人使用正好在同一區域的代理/ VPN時,它的價格如何?或者當第三方服務出現故障時?它可以削弱系統。 – Joseph

1

如果您能確定所有「superadmins」都具有靜態IP地址,並且因爲他們的IP在半夜更改而不會無法使用應用程序,這可能是一種很好的保護。

其他方法與您提到的方法類似,是VPN,用戶在連接到VPN後將擁有私人池中的IP地址,並且您的應用程序只接受來自該池的連接(更好的是,您可以製作superadmin應用程序的apache/nginx虛擬主機僅偵聽VPN IP)。

VPN方面的另一個積極的方面是,除了過濾訪問之外,您還保護流量。

+0

嗯我可以把這個「superadmin-login」放在VPN裏面,但是如果用戶想從家裏登錄它,會出現問題嗎?使用Mac地址怎麼樣?只有最多4人可以訪問這個地方。 –

+0

VPN連接可以在任何地方進行,用戶只需要在家用計算機上設置VPN連接即可。它與撥號連接很相似(當談到安裝時),所以假設服務器端網絡上的VPN端口是打開的(路由器,防火牆等),用戶可以從任何地方連接(甚至可以從iPhone等)並啓用了vpn-passthrough。 –

+0

謝謝!我會問服務人員這件事! –

1

我不得不說,這聽起來不像一個真棒想法

任何真正的安全傳統需要一個服務器組件,將提出以下建議:

一)使所有的登錄頁面通過https

b)中包括一個服務器技術諸如紅寶石/ PHP來執行以下操作:

摘要驗證 - > http://en.wikipedia.org/wiki/Digest_access_authentication

這基本上是

登錄細節存儲在一個數據庫(確保你只存儲密碼散列+鹽在數據庫中!)

PHP /紅寶石相比,登陸信息數據庫日誌詳細

一旦認證店這種驗證狀態爲消化餅乾

在這裏看到PHP實現:http://www.php.net/manual/en/features.http-auth.php

但嚴重的請請不要使用客戶端實現的安全性,這是一個壞主意

爲更多的安全問題和想法要注意看這裏 - >

http://w3af.org/

學習如何驚人的邪惡和良好的黑客,以及如何阻止他們的計劃

http://www.lulu.com/spotlight/owasp上常見的安全漏洞好書

http://w3af.org/understanding-html5-security

也是非常好的資源(可能是免費的PDF文件在線)

+0

謝謝!我認爲我沒有寫得很清楚,但我從來沒有說過我需要擁有這個安全的管理員端客戶端。我只是表示公共前端位於BackboneJS代碼中,因此也是客戶端。 –

+1

哈哈啊.... 我想我們都有些擔心那裏,祝你好運項目:) – aqm