以纯文本forms存储密码在PHPvariables或PHP常量是否可以?
按照每个问题,是否安全的密码存储在PHP页面如
$password = 'pa$$w0rd';
如果用户看不到,这是安全的,对吧?
编辑:有些人居然build议使用哈希,但是,会有一个数据库服务器连接密码的问题,不是吗?
简短的答案是不,也取决于。
以纯文本格式存储密码几乎不是一个好主意,尤其是在可访问网页的位置,除非是简单的服务器错误configuration或错误的地方的回声可能会使其暴露于世界之外。
如果你必须存储一个密码(这是可能的),你可以尝试把它存储在webroot之外,例如/var/www/public_html/
把你的codez放在这里
/var/www/includes/
把你的密码放在这里
甚至比这更好的是让系统,你需要密码(例如数据库包装)返回一个对象已经实例化。 所以不是要求$databasepassword
而是要求一个PDO对象,并将数据库类存储在webroot之外。
它取决于攻击向量会导致某人访问密码文本,并且它会要求它们已经在您的文件系统中,如果是这样的话,您可能已经搞砸了。
另外,如果你的supa-secrit用户内容的密码,那么你所失去的只是一些订阅费用,如果你的数据库存在的话,你可能会遇到一个问题,如果这是你的网上银行的细节,那么对你有好处。
密码保护的价值有多大?
根据你对安全的定义,任何方法都有其积极和消极的方面。
如果你真的想在你的源代码中存储密码,那么做一些这样的事情可能是个好主意:
文件: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 ) ...
纯文本从来不是一个好主意,总是存储你想存储的密码的散列。
此外,尝试从你的主源文件中分离出这样的定义。
通常他们看不到。 但是如果在服务器上发生了什么不好的事情,那么服务器很可能会以纯文本的forms返回你的php代码而不执行它,因此用户将看到该文件的所有来源以及密码。
我会将密码存储在不在文档根目录的地方(无法在浏览器中打开),然后用php打开该文件并阅读内容(密码)。 或者,如果您有多个密码/用户,我会将它们存储在数据库中以便快速访问。
如果你想使用文件方法的目录布局应该看起来像这样(服务器上的deprences)
/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");
如果你想更安全,而不是将密码存储为文本文件。 痛苦它的散列,然后当你想比较它与用户input生成哈希从用户input,并将其与从文本文件加载的密码的散列
sha1($user_input) == $password_from_txt
只要您的PHP安装正常工作,这不会比任何其他方法安全。 我宁愿命名常量(定义)在variables。 此外,您可能会考虑存储密码的散列,而不是简单的密码。 即使网站遭到入侵,也可以防止窃取您的密码。
至于不好的做法,这取决于。 如果你只需要存储一个密码,这种方法是可以的。 将它们存储在文档根目录之外可能会带来错误的额外安全感; 文档根目录不比服务器的任何其他设置更绝对。
除非网站本身被破坏,现在密码也允许访问(你的数据库,也许?)。
这取决于你如何定义“安全”。
你是正确的,一般用户不会看到它。
然而,这绝对是一个不好的做法。 如果您的网站遭到入侵,这些密码还能提供哪些访问权限? 我会说在最低限度你应该存储密码散列,而不是明文。
有时它只能是一个邮件应用程序,你只能用普通密码login,而不能用哈希。 如果你的应用程序没有安全问题,它不应该影响你。
我相信大多数时候明文密码都是数据库密码,比如MySQL,例如,不会接受哈希进行validation。
正如之前提到的,最好的解决scheme是在webroot之外保留带有密码的PHPconfiguration文件。
如果您担心在查看文件时有人可能会看到您的密码,您可以简单地使用base64function让人不可读。
有关详细信息,请参阅此文章 ,甚至可以使Windows,