2

我有一个使用摘要身份验证来调用另一个设备的 PHP 文件。不幸的是,我需要将用户名和密码放在 PHP 文件中才能使其工作。我猜这不安全,我想知道如何使这更安全。

<?php  
function getdata($url, $username, $password) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_DIGEST);
    curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    $results = curl_exec($ch);    
    curl_close($ch);
    return $results;
    }

$livedata = getdata("http://examplesite.com?options","User","SecretPassword");
?>
4

5 回答 5

2

例如,Magento 处理此问题的方式是使用在安装时生成的全局密钥。敏感数据以加密方式存储在数据库中,并根据请求使用存储在文件系统上的密钥进行透明解密。如果入侵者可以访问数据库,但不能访问文件系统,他将无法(通常)访问敏感数据。

如果需要,将密钥保存在文件中还可以使其成为快速使站点上所有敏感数据无效的一站式商店。

于 2013-10-13T01:55:05.460 回答
1

您可以将其设置为服务器变量。在 Apache 中,使用该mod_env模块,您应该使用httpd.conf(有时称为apache.confapache2.conf在某些服务器上)。也可以将其放入您的.htaccess文件中(但是要 100% 确保它无法从外部访问!)。

SetEnv EXAMPLE_SITE_USERNAME myusername
SetEnv EXAMPLE_SITE_PASSWORD s0m3pazw0rd

然后在 PHP 中,您可以使用以下命令访问它$_SERVER

$user = $_SERVER['EXAMPLE_SITE_USERNAME'];
$pass = $_SERVER['EXAMPLE_SITE_PASSWORD'];
$data = getdata('http://examplesite.com?options', $user, $pass);
于 2013-10-13T02:12:02.387 回答
0

如果您担心 Apache 意外提供 php 源代码,例如如果 php 被关闭,那么您总是可以将登录凭据放在您的 webroot 上方的配置文件中。

于 2013-10-13T01:53:37.907 回答
-1

最安全的方法是通过数据库进行通信,或者正如 Technobyte 所说,您可以使用另一个受 .htaccess 文件限制的文件

于 2013-10-13T01:54:14.393 回答
-2

This is standard practice. At some point your script will need to know the password, so you can't hash it. PHP files are not generally web visible but you could further protect it with an .htaccess file to deny remote access to the file.

If you are concerned about casual users who have ftp access seeing the file then you could take one additional step and obfuscate the string by encoding it with base64 and decoding it when you need to use it.

Example from php.net:

<?php
$str = 'VGhpcyBpcyBhbiBlbmNvZGVkIHN0cmluZw==';
echo base64_decode($str);
?>

The above example will output:

"This is an encoded string"
于 2013-10-13T01:48:01.473 回答