我的开发人员在config.php
文件中向客户端提供了几个函数。
客户说这是一个安全风险,并且非php
人想知道是否有人知道这是为什么。
config.php
中哪些安全漏洞?
代码:
<?php
//$config["ALLOWED_IPS"] = Array("rrrr,tttt,uuuu");
$config["PRIVATE_KEY"] = "sssss";
$config["PUBLIC_KEY"] = "aaaaa";
$config["DB_HOST"] = "wwwww";
$config["DB_NAME"] = "334455ffff";
$config["DB_USER"] = "uuuu";
$config["DB_PASS"] = "uuuu";
//AWS access info
if (!defined('awsAccessKey')) define('awsAccessKey', 'xxxxx');
if (!defined('awsSecretKey')) define('awsSecretKey', 'yyyyy');
function uploadS3($FilePath,$name=""){
$FilePath = str_replace("https://s3.amazonaws.com/","",$FilePath);
$info_path2 = explode("/",$FilePath);
if (count($info_path2)>1){
$Bucket = $info_path2[0];
$Object_info = str_replace($Bucket."/","",$FilePath);
if (!class_exists('S3')) require_once('S3.php');
//instantiate the class
$s3 = new S3(awsAccessKey, awsSecretKey);
$s3>putBucket($Bucket, S3::ACL_PRIVATE);
if ($s3>getObject($Bucket, $Object_info, $name)) {
return true;
}else{
return false;
}
}
return false;
}
?>
答案 0 :(得分:1)
如果配置值存储在可扩展类中的变量中,可以想象它们可以从代码中可以实例化该类的任何其他位置覆盖。根据您管理或公开代码的确切方式,这可能会被归类为安全问题。
这里有更多内容可以帮助您了解如何覆盖变量: Why is it possible to override instance variables in PHP but not in Java?
答案 1 :(得分:1)
将秘密放在文档根目录中的文件被认为是一种不好的做法,因为如果服务器配置错误并将.php作为普通文件提供,或者如果打印出包含相关行的堆栈跟踪,那么您只是泄露了您的秘密。 (这种情况比您想象的要多,尤其是在服务器移动和维护方面。)
此外,将秘密和实际活动代码混合在同一个文件中会使代码和部署难以管理 - 最终可能会将密码检查到源代码存储库中,这不是一件好事。
通常的建议是将数据库凭据和API密钥等秘密保存在一个静态配置文件中,该文件存储在外部 Web服务器的文档根目录中,并在需要时从PHP中读取。