所以我正在为我的网站建立一个GUI管理区域。我将是唯一一个登录的人,它只会从我的数据库中显示一个干净的(可打印的)信息布局。
这就是我正在为安全做的事情。如果您认为这是好的以及我如何改进,请告诉我。
admin == true
或die / redirect $_SERVER['REMOTE_ADDR'];
!=标题重定向dir
设置700
文件夹权限。regex
之前检查sql
,我的凭据存储在单独的管理表中这样安全吗?我可以做更多吗?这有点矫枉过正吗?请分享您的意见和建议(特别是关于我的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 :(得分:2)
NOTHING 对于管理页面来说太过分了。你需要尽可能多的安全性。
至于你的方法,大多数方法都相当不错,但有些建议:
chmod
设置为700不会阻止其他人至少访问管理页面(我假设你正在使用它),因为它是访问文件的Web服务器,无论谁是发出HTTP请求。$_SERVER['REMOTE_ADDR']
,而是创建唯一的用户SSL证书并且只允许具有该用户证书的计算机(即您的用户)访问该站点,这可能更安全(也更容易)。这可以在您的Apache设置中完成(如果您设法设置SSL,您可以返回并在SSL上设置用户认证),解决chmod
问题,并防止人们欺骗您的IP进入你的管理页面。这是我能想到的第一件事。当他们来找我时,我会添加更多。
编辑:正确,记录!记录管理页面上发生的所有。一切。对于SSL,对于请求,对于数据库访问,对于一切。然后获得一个日志观察计划(例如:logwatch
)以观察它是否有可疑活动。
答案 1 :(得分:0)
我的登录脚本在sql之前检查regex,我的凭据存储在单独的管理表
中
请不要将mysql_*
函数用于新代码。它们已不再维护,社区已开始deprecation process。请参阅red box?相反,您应该了解prepared statements并使用PDO或MySQLi。如果您无法决定,this article将有助于选择。如果您想学习,here is a good PDO tutorial。
P.S。据我所知,$_SERVER['REMOTE_ADDR']
变量使用起来非常安全,因为我认为可被利用的唯一方法是攻击者通过你的机器代理或欺骗ip。并且(当我错了时纠正我)两者都很难做到。
P.S。 2:
您的代码中是否正在使用global
,请停止使用:-)有关此监视this talk有关依赖注入和SOLID programming的更多信息。与安全性无关,而只是编程的最佳实践。
答案 2 :(得分:0)
确保使用SQL的预准备语句,使用强制保护(如果有人在您的PC上获取代理)并且不使用SHA2。 SHA2是一种用于散列密码的糟糕且无用的方法。查看crypt
函数或使用pkbdf,或者至少;一个原始的sha512。 (参见"哈希"函数)