繁体   English   中英

在php变量或php常量中以明文形式存储密码是否可以?

[英]Is it ever ok to store password in plain text in a php variable or php constant?

根据问题,在php页面上存储密码是否安全

$password = 'pa$$w0rd';

如果用户看不到它,那就安全了吧?

编辑:有些人实际上建议使用哈希,但是,数据库服务器连接密码会出现问题,不是吗?

简短的回答是否定的,它取决于它。

如果没有其他原因,除了简单的服务器配置错误或错误的回声可能会将其暴露给世界之外,以纯文本形式存储密码几乎绝不是一个好主意,尤其是在可访问Web的位置。

如果您必须存储密码(可能),您可以尝试将其存储在webroot之外,例如/var/www/public_html/将您的codez放在这里
/var/www/includes/将您的密码放在这里

比这更好的是让你需要密码的系统(例如数据库包装器)返回已经实例化的对象。 所以,而不是要求$databasepassword你要求一个PDO对象,并将你的数据库类存储在webroot之外。

It Depends来自哪些攻击向量会导致某人有权访问该密码文本,并且它是否需要它们已经在您的文件系统中,如果是这样,您可能无论如何都要搞砸了。

另外,如果它是你的supa-secrit订阅者内容的密码,meh,你丢失的只是一些订阅费,如果它是你的数据库,你可能有问题,如果这是你的网上银行细节,那对你有好处。

密码保护的价值有多大?

根据您如何定义安全,任何方法都有其积极和消极方面。

如果你真的想在你的源代码中存储密码,那么做一些这样的事情可能是个好主意:

文件:config.php

if( ! defined('IN_CODE') ) die( 'Hacking attempt' );

define( 'PASSWORD_HASH', '098f6bcd4621d373cade4e832627b4f6' );

文件:index.php

define( 'IN_CODE', '1' );

include( 'passwd.php' );

if( md5($password) == PASSWORD_HASH )
...

纯文本永远不是一个好主意,始终存储您要存储的密码的哈希值。

此外,尝试从主源文件中分离这样的定义。

通常他们看不到它。 但是如果在服务器上发生了不好的事情,那么服务器很可能会以纯文本形式返回你的php代码而不执行它,因此用户将看到该文件的所有来源以及你的密码。

我会将密码存储在文件根目录(不能在浏览器中打开)的某个地方,然后用php打开该文件并读取内容(密码)。 或者,如果您有多个密码/用户,我会将它们存储在数据库中以便快速访问。

如果你想使用文件方法目录布局应该看起来像这样(服务器上的depneds)

/public_html/index.php

/password.txt

$myFile = $_SERVER['DOCUMENT_ROOT'] + "/../password.txt";
if file_exists($myFile) { 
   $fh = fopen($myFile, 'r');
   $password = fgets($fh);
   fclose($fh);
} else die("No password file");
if ($user_input == $password) {
   ...... Authentication succeeded ..........
   ......your relatively protected code .....
} else die("Wrong password");

如果您想要更高的安全性,而不是将密码存储为该文本文件中的文本。 疼痛是哈希,然后当你想将它与用户输入进行比较时,从用户输入生成哈希值并将其与从文本文件加载的密码哈希值进行比较

sha1($user_input) == $password_from_txt

只要您的PHP安装正常工作,这就不比任何其他方法安全。 我宁愿命名常量(define)而不是变量。 另外,您可以考虑存储密码的哈希值,而不是普通密码。 即使网站遭到入侵,这也可以防止窃取您的密码。

至于不好的做法,这取决于。 如果您只需要存储一个密码,这种方法就可以了。 将它们存储在文档根目录之外可能会产生额外安全性的错误感觉; 文档根目录不比服务器的任何其他设置更绝对。

除非站点本身被泄露,现在这些密码授予访问权限的所有内容(也许是您的数据库?)。

这取决于你如何定义'安全'。

你是对的,一般用户不会看到它。

然而,这绝对是一种不好的做法; 如果您的网站遭到入侵,这些密码还可以访问哪些内容? 我要说的是,您应该存储密码的哈希,而不是明文。

有时它只是必须是一个邮件应用程序,你只能使用普通密码登录而不是哈希。 如果您的应用程序没有安全问题,它不应该影响您。

我相信大多数时候纯文本密码都是MySQL的数据库密码,例如,不接受哈希进行身份验证。

如前所述,最佳解决方案是在Webroot之外保留带有密码的PHP配置文件。

如果您担心有人在查看文件时可能会看到您的密码,您可以使用base64功能简单地让人无法阅读。

有关详细信息,请参阅此文章 ,甚至是Windows,Linux和Mac的小实用程序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM