我正在一个有管理员面板和网站的网站上工作 .
网站根文件夹: /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 回答
好像你在正确的轨道上,但有一些事情我可以立即注意到:
MD5是“保护”密码的不良选择 . MD5更准确地归类为散列算法,而不是用于加密方式 . 至少,在密码之前加密密码 . 更好的是,选择一个实际的加密算法并加盐 .
POST比GET更安全 . 仍然可以操作POST数据;因此,这不应该是一种安全形式 . 确保来自用户的所有数据都被视为不受信任,并进行适当的清理 .
我看到你至少试图清理密码输入 . 如前所述,这还不够 . 你需要消毒一切 .
如果不查看网站/代码,我们就不能说太多其他内容,但简而言之:清理您的输入!
这里仍然有足够的空间来悬挂你自己 . 您只提供了一份松散的安全措施列表 .
要记住一些事情 .
header()
函数修改了http标头,它不能用于阻止访问文件 . 确保您在重定向后死亡():mysql_real_escpae_string()不会阻止所有sql注入 . 但是像PDO和MySQLi这样的参数化查询库可以 . 此查询易受sql注入攻击:
PoC:?id = sleep(30)
另外请务必阅读owasp top 10 . 我打赌你甚至没有解决的钱owasp a9 .