如何在php中隐藏/保护密码详细信息?
Posted
技术标签:
【中文标题】如何在php中隐藏/保护密码详细信息?【英文标题】:How to hide/protect password details in php? 【发布时间】:2013-06-05 22:02:08 【问题描述】:我正在创建一个网站,我正在尝试创建一个表单,将用户输入发送到我的谷歌文档/驱动器中的谷歌电子表格......我找到了一个 Github 项目,可以让人们编写 php ...它包括脚本所需的其他 2 个 php 文件。代码如下:
我的问题是,如何在 $u = / $p = 下隐藏我的密码? 任何查看代码的人都可以看到我的密码。我该如何防止这种情况发生?
脚本来源的链接是:http://www.farinspace.com/saving-form-data-to-google-spreadsheets/
<?php
// Zend library include path
set_include_path(get_include_path() . PATH_SEPARATOR . "$_SERVER[DOCUMENT_ROOT]/ZendGdata-1.8.1/library");
include_once("Google_Spreadsheet.php");
$u = "username@gmail.com";
$p = "password";
$ss = new Google_Spreadsheet($u,$p);
$ss->useSpreadsheet("My Spreadsheet");
$ss->useWorksheet("wks2");
// important:
// adding a leading alpha char prevents errors, there are issues
// when trying to lookup an identifier in a column where the
// value starts with both alpha and numeric characters, using a
// leading alpha character causes the column and its values to be
// seen as a strictly a strings/text
$id = "z" . md5(microtime(true));
$row = array
(
"id" => $id // used for later lookups
, "name" => "John Doe"
, "email" => "john@example.com"
, "comments" => "Hello world"
);
if ($ss->addRow($row)) echo "Form data successfully stored";
else echo "Error, unable to store data";
$row = array
(
"name" => "John Q Doe"
);
if ($ss->updateRow($row,"id=".$id)) echo "Form data successfully updated";
else echo "Error, unable to update spreadsheet data";
?>
【问题讨论】:
需要有一个用户可以访问您的文件。因此,您的密码将是可读的。不与任何人共享该用户或与任何人共享您的服务器怎么样? 为什么/如何有人会/可以阅读代码吗?如果它应该是安全的,请不要在代码中输入密码 - 就这么简单。 @BLaZuRE:访问用户是什么意思?电子表格将保存到“我的”谷歌文档帐户,所以帐户密码不应该是我自己的帐户密码吗?或者我也可以在谷歌文档上创建一个虚拟用户吗?喜欢雅虎邮件上的身份? 【参考方案1】:您可以尝试使用下面的代码隐藏 if 以防被窥视。如果您尝试过,它仍然可以被发现,但至少它远离打开的文本视图。它所做的只是在文本中添加字符,然后在使用密码之前减去它们。
使用您的原始密码运行此脚本
<?php
$password = "test";
echo "Original Password In Plain Text = $password\n";
$len=strlen($password);
$NewPassword = "";
for( $i = 0; $i <= $len-1; $i++ )
$charcode = ord(substr( $password, $i, 1 ));
$NewChar = $charcode+5; $NewLetter = chr($NewChar);
$NewPassword = $NewPassword . $NewLetter;
echo "Modified Password to Use in Script = $NewPassword\n";
$OrigPassword = "";
for( $i = 0; $i <= $len-1; $i++ )
$charcode = ord(substr( $NewPassword, $i, 1 ));
$OrigChar = $charcode-5; $OrigLetter = chr($OrigChar);
$OrigPassword = $OrigPassword . $OrigLetter;
echo "Convert the Modified back to the Original = $OrigPassword\n";
?>
使用上述脚本中的新密码将此部分添加到您的脚本中
$password = "yjxy";
$OrigPassword = "";
for( $i = 0; $i <= $len-1; $i++ )
$charcode = ord(substr( $password, $i, 1 ));
$OrigChar = $charcode-5; $OrigLetter = chr($OrigChar);
$OrigPassword = $OrigPassword . $OrigLetter;
$password = $OrigPassword;
echo "Script thinks this is the password = $password\n";
【讨论】:
谢谢!是否有任何 PHP 函数也可以将密码字符串编码为 md5 或 sha?我在网上某处读到 PHP 支持将字符串解密为这两种格式.... 看起来他们在这里link 这样做了,但它对我不起作用,我的 php5-mcrypt 出于某种原因不喜欢我。他们在这里提供了修复它的提示link 这很有效,然后我运行了 md5 脚本,效果很好! 嗯,我在网上找到了一个网站,可以将字符串转换为 md5 并转换回字符串!这是link【参考方案2】:隐藏密码的最佳方法是将其保存在外部文件中,然后将其包含在您的 php 脚本中。假设您使用此密码的文件“config.php
”应高于DOCUMENT_ROOT
,以使其无法通过浏览器访问。这是常见的方法,例如,您可以在 Zend Framework 目录结构中看到它,其中只有“公共”目录对用户可见。该文件也应设置正确的 CHMOD。
在this link 下,您有 ZF 目录结构,您可以在其中检查配置文件的位置。
【讨论】:
所以我应该通过以下方式包含它:'include("config.php");'命令?如果是这样,“config.php”文件的代码是什么?? just 当有人想从网络访问它时,他将看不见它。正如我所写,最好的解决方案是将此文件移至文档根目录上方。 好的!谢谢!我现在明白了.. 另外,通过文档根目录,您的意思是 ' 检查我给你的目录结构。假设您的应用程序显示在/user/
下,您的页面显示在/user/public/index.php
下 htaccess 可以访问 public/ 并为此目录绑定域,但配置位于 /user/config/config.php
中,因此用户无法通过浏览器访问,但您的脚本可以
好的。谢谢!这是有道理的,但我必须用 ZF 目录检查该页面链接......【参考方案3】:
这个问题已经在这里被问过很多次(但不是专门针对 Google 文档)。简短的回答是您无能为力。
更长的答案是,您可以降低凭据被以下因素破坏的可能性:
使用提供给用户而不是存储在代码中的凭据 使用用户提供的令牌作为解密存储在您的代码中的凭据的一种方式(但对于很多用户来说,这会变得非常复杂) 将凭据存储在文档根目录之外的包含文件中【讨论】:
以上是关于如何在php中隐藏/保护密码详细信息?的主要内容,如果未能解决你的问题,请参考以下文章
JQuery DataTables:如何显示/隐藏多个表的行详细信息?