Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么硬编码用户名密码在php中存在安全威胁?_Php_Websecurity - Fatal编程技术网

为什么硬编码用户名密码在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

我有php的基本登录系统。索引页上的表单使用
POST
方法将用户名和密码提交到同一页。用户名和密码是硬编码的。 下面是索引页面上处理

if( isset ($_POST['submit']) ) {
$username='Admin';
$password='root';

  if(  ( $_POST['uname'] == $username ) && ( $_POST['pass'] == $password) ) {
         // Redirect to admin page
  } 
  else{
       echo "Wrong credential";
 }

}
我已经提到了,但无法理解为什么在这种情况下硬编码是不好的

我的论点

  • 这消除了sql注入的可能性
  • 如果关闭错误报告,则永远不会看到源代码

  • 硬编码不是安全威胁。这是个坏习惯。
    另外,@tobias注释
    uname
    pass
    为布尔值也没有害处。在php中,所有输入都被视为字符串,因为您不使用数据库,这并不会消除sql注入的可能性。
    您应该将用户名和密码存储在数据库中,将它们存储在一些哈希算法中,例如SHA1,并应用“黄金法则过滤器输入和转义输出”。

    硬编码凭证不是问题。问题是当你用纯文本硬编码它们时。如果凭据是硬编码的,您仍然可以通过
    password\u hash()
    运行用户名/密码,并且只将结果(哈希)存储在文件中,然后使用
    password\u verify()
    验证它们。为什么你也可以散列用户名,是因为你不需要在任何地方搜索用户名,而且它也会受到保护,不让爱管闲事的人知道。一个理由是:如果php处理程序配置错误,你可以看到源代码的纯文本。例如,这可能发生在mod apache的更新过程中。另一个论点是:如果您使用git之类的版本控制软件,您将公开凭据。硬编码凭据不是问题,如果您将其存储在哈希上,但问题是您无法在不重新部署的情况下更改凭据,写得如此糟糕,我敢肯定,如果
    uname
    pass
    是布尔值
    true
    ,你就可以打破它。由于PHP试图将值转换为可比较的值,因此字符串将变为布尔真。这样一个简单的错误将允许某人轻松绕过身份验证。