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

Php 在数据库中存储密码并使管理面板安全,php,mysql,security,Php,Mysql,Security,我在一个网站上工作,这是有管理面板随着网站 网站根文件夹:/htdocs 网站的其他公共内容仅在/htdocs文件夹中 管理员网站文件夹:/htdocs/Admin 我的问题:我需要做什么来确保我的管理面板或网站不受攻击 以下是我正在做的事情: /htdocs/admin文件夹中的每个文件都设置为权限:444 Linux的r-r-r。 admin文件夹中的adminLogin.php文件正在使用POST方法发送 指向validateCredentials.php的凭据,它将 在用户名和密码正确的

我在一个网站上工作,这是有管理面板随着网站

网站根文件夹:/htdocs

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

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

我的问题:我需要做什么来确保我的管理面板或网站不受攻击

以下是我正在做的事情:

/htdocs/admin文件夹中的每个文件都设置为权限:444 Linux的r-r-r。 admin文件夹中的adminLogin.php文件正在使用POST方法发送 指向validateCredentials.php的凭据,它将 在用户名和密码正确的情况下访问adminHome.php。以下会话变量在成功登录时与其他变量一起设置:$\u session['usertype']=admin; admin文件夹中的所有其他文件在文件顶部都有一个复选框 对于有效的管理会话变量。如果没有会话变量, 然后页面将重定向到adminLogin.php 管理员密码以MD5哈希形式存储在中 管理员登录详情表。此表与整个数据库位于同一数据库中 网站的名称。我有一个问题,就是如何使密码存储更加安全。 在验证admin_login_details表中的密码时,输入 密码首先传递给mysql\u real\u escape\u字符串,然后用于 防止SQL注入。 还需要什么?以上几点正确吗?是否存在任何潜在的安全问题

如果需要,请添加更多点


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

这里仍然有足够的空间来吊死你自己。您只提供了一个松散的安全措施列表

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

header("location: index.php");
die();
mysql\u real\u escpae\u字符串不会阻止所有sql注入。但是,像PDO和MySQLi这样的参数化查询库会这样做。 此查询易受sql注入攻击:

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


还要确保你读了这本书。我敢打赌,你甚至还没有写过地址。

看来你走的方向是对的,但有几件事我可以马上注意到:

MD5是保护密码的糟糕选择。MD5更准确地分类为散列算法,而不是用于加密。至少,在对密码进行哈希运算之前,先对其加盐。更好的是,选择一个实际的加密算法并对其进行加密

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

我看你至少在尝试清理密码输入。如上所述,这是不够的。你需要对一切进行消毒


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

挑剔:md5是散列函数,不是加密方法。@马克:是。编辑我的问题!没有理由在数据库中以明文形式存储密码。不管是内部还是外部黑客,只要抓取数据库并炸掉那颗滴答作响的定时炸弹就行了。谢谢你的回答。什么是消毒?你的意思是我每次都应该应用mysql\u real\u escape\u string函数吗?消毒方法或功能是什么。任何有助于我搜索的关键字、链接?@iSumitG sanitation意味着从用户提供的任何信息中删除任何不必要的、可能是恶意的数据。mysql_real_escape_string虽然在减轻SQL注入方面有些有用,但并没有像Rook指出的那样阻止所有注入。你还需要考虑事物跨站点脚本XSS、目录遍历、跨站点伪造请求等。基本上,确保你正在接收的数据是你所期望的数据。谢谢Rook。现在我使用的是if$_SESSION['type']==admin{..protected content..}else{headerLocation:adminlogin.php;die;}现在这样好了吗?