2012-07-23 107 views
1

因此,我正在为我的网站构建一个GUI管理区域。我将是唯一一个登录,它会显示从我的数据库干净(可打印)的信息布局。保护我的网站管理区域

这是我在做的安全。如果你认为这很好,我可以改进,请告诉我。在所有页面

  1. 头检查admin == true或死亡/重定向
  2. ,因为我家里有一个专用的IP,我只会从家里登录。我做了所有页面,包括登录表单页面检查我的IP $_SERVER['REMOTE_ADDR'];!=标题重定向
  3. 我的登录脚本在dir700在文件夹权限。
  4. 我的登录名和密码包含10个字母,数字和特殊字符组合。 PW为regex
  5. 我的登录脚本检查之前sql存储为SHA2 HASH和我的凭据存储在一个单独的管理表
  6. 整个网站的SSL。

那么这是安全的吗?我可以做更多吗?这是否过分矫枉过正?请分享您的意见和建议(特别是关于我的IP检查可以在被规避?)

用来逃避糟糕的数据 - 在每场连同regex

function escape_data ($data) { 
    if (function_exists(‘mysql_real_escape_string’)) { 
     global $dbc; 

     $data = mysql_real_escape_string (trim($data), $dbc); 
     $data = strip_tags($data); 
} else { 
     $data = mysql_escape_string (trim($data)); 
     $data = strip_tags($data); 
     } 
     return $data; 

    } 
+0

在显示数据之前,您是否正确地转义了数据库数据?如果您有XSS漏洞,所有这些好的安全性都是毫无价值的。 – 2012-07-23 21:37:28

+0

你在#1上的含义是什么?这是如何发送的。 #5使得它听起来像您有可能想要研究的SQL注入问题。 – Cfreak 2012-07-23 21:38:06

+0

是以纯文本形式存储的密码吗? – colonelclick 2012-07-23 21:41:45

回答

0
  • 您是否还设置了在your cookies上安全,域名和http唯一标志?对正则表达式SQL之前

我的登录脚本检查和我的凭据存储在一个单独的管理表

而且,请不要使用mysql_*功能的新代码。他们不再被维护,社区已经开始了deprecation process。请参阅red box?相反,您应该了解prepared statements并使用PDOMySQLi。如果你不能决定,this article将有助于选择。如果你在意学习,here is a good PDO tutorial

P.S.据我所知$_SERVER['REMOTE_ADDR']变量使用起来相当安全,因为我发现被攻击的唯一方法是由攻击者通过您的机器代理或欺骗ip。并且(纠正我错误时)都很难做到。

P.S. 2:

是看你使用global在你的代码,也请停止使用该:-)有关此表this talk关于依赖注入和一般SOLID programming更多信息。与安全无关,而只是编程的最佳实践。

+0

对于暴力强制我阻止一个reCaptcha用于失败的尝试超过3 - 假设有人能够模拟我的IP – fyz 2012-07-23 21:41:07

+0

我写了一个函数来逃脱坏数据和正则表达式填充到 – fyz 2012-07-23 21:41:54

+0

@FabioAnselmo所以你没有使用准备声明? – PeeHaa 2012-07-23 21:43:40

2

什么都没有是管理页面的矫枉过正。你需要尽可能多的安全性。

至于你的方法,大部分都是相当不错的,但有些建议:

  • 设置chmod 700不会阻止其他人至少访问管理页面(我假定这就是你正在使用它),因为它是访问文件的Web服务器,无论谁在发送HTTP请求。
  • 而不是检查$_SERVER['REMOTE_ADDR'],它可能更安全(更简单),只是创建一个唯一的用户SSL证书,并只允许具有该用户证书(即您的)的计算机访问该网站。这可以在您的Apache安装程序中完成(如果您设法设置SSL,则可以返回并在您的SSL上设置用户证书),解决chmod问题,并防止人们欺骗您的IP进入管理页面。
  • 如果您不需要通过SSH连接到家用计算机,请禁用SSH守护进程。这将(希望)阻止其他人将您的计算机定位到您的服务器之后。

这些是我能想到的第一件事。当他们来找我的时候,我会添加更多。

编辑:对,记录!日志一切发生在您的管理页面上。一切。对于SSL,对于请求,对于数​​据库访问,对于一切。然后得到一个日志观看节目(例如:logwatch)以观看它的可疑活动。

+0

我同意没有什么矫枉过正的..特别是像我这样的偏执狂。谢谢你的提示。我将研究该SSL设置以查看它是否对我可用。这是在一个共享服务器上..不知道我是否可以访问SSH(不知道是什么......需要读取/ thx的提示) – fyz 2012-07-23 21:44:36

+0

@FabioAnselmo请参阅编辑。 (摘要?记录日志记录日志记录日志记录。)另外,SSH用于远程访问您的计算机 - 所以如果您没有SSH,请确保其他远程访问协议没有运行(或者它们仅限于当你想要它们时运行)。 – Palladium 2012-07-23 21:50:38

+0

真棒..我应该在哪里保存这些日志?我的理论是,任何人都足够聪明,足以聪明地编辑/擦除日志...... – fyz 2012-07-23 21:53:22

0

请确保您使用SQL准备语句,使用暴力破解保护(如果有人在您的PC上获得代理服务器)并且不使用SHA2。 SHA2是用于哈希密码的一种可怕的无用方法。查看crypt函数或使用pkbdf,或至少;一个原始sha512。 (请参阅“散列”功能)

+0

嗯,我把'SHA2'和我自己的'SALT'连接起来,这真的太可怕了吗? – fyz 2012-07-23 21:56:34

+0

是的。它仍然可以被破坏,并且非常不安全。 – Lusitanian 2012-07-23 22:35:03