2014-02-25 42 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