首页 文章

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

提问于
浏览
2

我正在一个有管理员面板和网站的网站上工作 .

网站根文件夹: /htdocs

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

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

My Question: 为确保我的管理面板(或网站)免受攻击,我需要做些什么?

这些是我正在做的事情:

  • /htdocs/admin 文件夹中的每个文件都设置为Linux的权限:444( r--r--r-- ) .
    admin文件夹中的

  • adminLogin.php 文件正在使用POST方法将凭据发送到 validateCredentials.php ,这将通过正确的用户名和密码指向 adminHome.php . 成功登录后设置以下会话变量: $_SESSION['usertype'] = "admin";

  • admin文件夹中的所有其他文件都在文件顶部检查是否有有效的管理员SESSION变量 . 如果没有会话变量,则页面将重定向到adminLogin.php

  • 管理员密码存储为 admin_login_details 表中的MD5哈希 . 此表与整个站点位于同一数据库中 . 我得到了this问题,使密码存储更加安全 .

  • 在验证 admin_login_details 表中的密码时,输入的密码首先传递给mysql_real_escape_string()然后使用 - 以防止SQL注入 .

还需要什么?以上几点是否正确?如果有任何潜在的安全问题?

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

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

2 回答

  • 2

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

    • MD5是“保护”密码的不良选择 . MD5更准确地归类为散列算法,而不是用于加密方式 . 至少,在密码之前加密密码 . 更好的是,选择一个实际的加密算法并加盐 .

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

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

    如果不查看网站/代码,我们就不能说太多其他内容,但简而言之:清理您的输入!

  • 3

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

    要记住一些事情 . 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 = sleep(30)

    另外请务必阅读owasp top 10 . 我打赌你甚至没有解决的钱owasp a9 .

相关问题