我正在开设一个网站,其中包含管理员面板和网站。
网站根文件夹:/htdocs
该网站的其他公开内容仅在/htdocs
文件夹中。
管理员网站文件夹:/htdocs/admin
我的问题:我需要做些什么来确保我的管理面板(或网站)免受攻击?
这些是我正在做的事情:
/htdocs/admin
文件夹中的每个文件都设置为权限:444
(r--r--r--
)Linux。adminLogin.php
文件正在使用POST方法发送
将指示validateCredentials.php
的凭据
使用正确的用户名和密码到adminHome.php
。成功登录时会设置以下会话变量(以及其他会话变量):$_SESSION['usertype'] = "admin";
admin_login_details
表。此表与整个数据库位于同一个数据库中
该网站。我得到了this问题,以使密码存储更加安全。admin_login_details
表中的密码时,输入了
密码首先传递给mysql_real_escape_string()然后用于 -
防止SQL注入。还需要什么?以上几点是否正确?如果有任何潜在的安全问题?
如果需要,请添加更多积分。
我在CentOS服务器上使用PHP,MySQL,Apache。
答案 0 :(得分:3)
好像你走在正确的轨道上,但有一些事情我可以马上注意到:
MD5是一个糟糕的选择,以确保"密码。 MD5更准确地归类为散列算法,而不是用于加密方式。至少,在密码之前加密密码。更好的是,选择一个实际的加密算法并加盐。
POST比GET更安全。仍然可以操作POST数据;因此,这不应该是一种安全形式。确保来自用户的所有数据都被视为不受信任,并进行适当的清理。
我看到你至少试图清理密码输入。如前所述,这还不够。你需要消毒一切。
如果不查看网站/代码,我们真的可以说很多其他内容,但简而言之:清理您的输入!
答案 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。