为什么硬编码用户名密码在php中存在安全威胁?
我有php的基本登录系统。索引页上的表单使用为什么硬编码用户名密码在php中存在安全威胁?,php,websecurity,Php,Websecurity,我有php的基本登录系统。索引页上的表单使用POST方法将用户名和密码提交到同一页。用户名和密码是硬编码的。 下面是索引页面上处理 if( isset ($_POST['submit']) ) { $username='Admin'; $password='root'; if( ( $_POST['uname'] == $username ) && ( $_POST['pass'] == $password) ) { // Redirect to adm
POST
方法将用户名和密码提交到同一页。用户名和密码是硬编码的。
下面是索引页面上处理
if( isset ($_POST['submit']) ) {
$username='Admin';
$password='root';
if( ( $_POST['uname'] == $username ) && ( $_POST['pass'] == $password) ) {
// Redirect to admin page
}
else{
echo "Wrong credential";
}
}
我已经提到了,但无法理解为什么在这种情况下硬编码是不好的
我的论点
硬编码不是安全威胁。这是个坏习惯。
另外,@tobias注释
uname
或pass
为布尔值也没有害处。在php中,所有输入都被视为字符串,因为您不使用数据库,这并不会消除sql注入的可能性。
您应该将用户名和密码存储在数据库中,将它们存储在一些哈希算法中,例如SHA1,并应用“黄金法则过滤器输入和转义输出”。硬编码凭证不是问题。问题是当你用纯文本硬编码它们时。如果凭据是硬编码的,您仍然可以通过
password\u hash()
运行用户名/密码,并且只将结果(哈希)存储在文件中,然后使用password\u verify()
验证它们。为什么你也可以散列用户名,是因为你不需要在任何地方搜索用户名,而且它也会受到保护,不让爱管闲事的人知道。一个理由是:如果php处理程序配置错误,你可以看到源代码的纯文本。例如,这可能发生在mod apache的更新过程中。另一个论点是:如果您使用git之类的版本控制软件,您将公开凭据。硬编码凭据不是问题,如果您将其存储在哈希上,但问题是您无法在不重新部署的情况下更改凭据,写得如此糟糕,我敢肯定,如果uname
和pass
是布尔值true
,你就可以打破它。由于PHP试图将值转换为可比较的值,因此字符串将变为布尔真。这样一个简单的错误将允许某人轻松绕过身份验证。