【问题标题】:Storing password in database and making admin panel secure将密码存储在数据库中并使管理面板安全
【发布时间】:2011-12-05 16:33:37
【问题描述】:

我正在开发一个网站,该网站与该网站一起具有管理面板。

网站根文件夹:/htdocs

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

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

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

这些是我正在做的事情:

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

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

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

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

【问题讨论】:

  • Nitpick:md5 是哈希函数,不是加密方法。
  • @Mark:是的。编辑了我的问题!
  • 没有理由将密码以纯文本形式存储在数据库中。只需要一个黑客(内部或外部)来获取该数据库并炸毁那个定时炸弹。

标签: php mysql security


【解决方案1】:

您似乎走在了正确的轨道上,但有几点我可以立即注意到:

  1. MD5 是“保护”密码的糟糕选择。 MD5 更准确地归类为散列算法,而不是用于加密手段。至少,在对密码进行散列之前对密码进行加盐。更好的是,选择一个实际的加密算法并加盐。

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

  3. 我看到您至少在尝试清理密码输入。如前所述,这还不够。你需要对所有东西进行消毒。

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

【讨论】:

  • 感谢您的回答,路易斯。什么是消毒?你的意思是我应该每次都应用mysql_real_escape_string函数吗?有哪些消毒方法(或功能)。任何有助于我搜索的关键字、链接?
  • @iSumitG 清理意味着从来自用户的任何信息中删除任何不必要的、可能是恶意的数据。 mysql_real_escape_string 虽然对减轻 SQL 注入有些有用,但并不能像 Rook 所指出的那样阻止所有这些注入。您还需要考虑跨站点脚本 (XSS)、目录遍历、跨站点伪造请求等。基本上,请确保您收到的数据是您期望的数据。
【解决方案2】:

这里还有足够的空间让你上吊。您只提供了一份松散的安全措施列表。

有几件事要记住。 header() 函数修改 http 标头,它不能用于阻止对文件的访问。确保在重定向后 die():

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']);

概念验证: ?id=sleep(30)

还要确保您阅读了owasp top 10。我敢打赌,你甚至没有给 owasp a9 发邮件。

【讨论】:

  • 感谢 Rook。现在我正在使用if($_SESSION['type'] == "admin"){ ..protected content.. } else { header("Location: adminlogin.php"); die(); } 现在这样安全吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-11-15
  • 1970-01-01
  • 1970-01-01
  • 2011-04-29
  • 2015-08-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多