在数据库中存储密码并使管理面板安全

时间:2011-12-05 16:33:37

标签: php mysql security

我正在开设一个网站,其中包含管理员面板和网站。

网站根文件夹:/htdocs

该网站的其他公开内容仅在/htdocs文件夹中。

管理员网站文件夹:/htdocs/admin

我的问题:我需要做些什么来确保我的管理面板(或网站)免受攻击?

这些是我正在做的事情:

  1. /htdocs/admin文件夹中的每个文件都设置为权限:444 (r--r--r--)Linux。
  2. admin文件夹中的
  3. adminLogin.php文件正在使用POST方法发送 将指示validateCredentials.php的凭据 使用正确的用户名和密码到adminHome.php。成功登录时会设置以下会话变量(以及其他会话变量):$_SESSION['usertype'] = "admin";
  4. admin文件夹中的所有其他文件都会在文件顶部进行检查 对于有效的管理员SESSION变量。如果没有会话变量, 然后页面将重定向到adminLogin.php
  5. 管理员密码存储为MD5哈希值 admin_login_details表。此表与整个数据库位于同一个数据库中 该网站。我得到了this问题,以使密码存储更加安全。
  6. 在验证admin_login_details表中的密码时,输入了 密码首先传递给mysql_real_escape_string()然后用于 - 防止SQL注入。
  7. 还需要什么?以上几点是否正确?如果有任何潜在的安全问题?

    如果需要,请添加更多积分。

    我在CentOS服务器上使用PHP,MySQL,Apache。

2 个答案:

答案 0 :(得分:3)

好像你走在正确的轨道上,但有一些事情我可以马上注意到:

  1. MD5是一个糟糕的选择,以确保"密码。 MD5更准确地归类为散列算法,而不是用于加密方式。至少,在密码之前加密密码。更好的是,选择一个实际的加密算法并加盐。

  2. POST比GET更安全。仍然可以操作POST数据;因此,这不应该是一种安全形式。确保来自用户的所有数据都被视为不受信任,并进行适当的清理。

  3. 我看到你至少试图清理密码输入。如前所述,这还不够。你需要消毒一切。

  4. 如果不查看网站/代码,我们真的可以说很多其他内容,但简而言之:清理您的输入!

答案 1 :(得分:2)

这里仍然有足够的空间来悬挂你自己。您只提供了一份松散的安全措施清单。

要记住一些事项。 header()函数修改了http标头,它不能用于阻止访问文件。确保在重定向后死亡()

header("location: index.php");
die();

mysql_real_escpae_string()不会阻止所有sql注入。但是像PDO和MySQLi这样的参数化查询库可以。 此查询易受SQL注入攻击:

$q="select * from user where id=".mysql_real_escape_string($_GET['id']);

的PoC: ?ID =睡眠(30)

另请确保阅读owasp top 10。我敢打赌,你甚至没有说过owasp a9