0

我的开发人员通过文件中的几个函数将代码交付给客户端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;
}
?>
4

2 回答 2

1

如果配置值存储在位于可扩展类中的变量中,那么可以想象它们可以从代码中可以实例化该类的任何其他地方覆盖。根据您管理或公开代码的确切方式,这可能被归类为安全问题。

这里有更多内容可以让您开始了解如何覆盖变量: 为什么可以在 PHP 中覆盖实例变量,但在 Java 中却不能?

于 2013-07-11T13:58:54.503 回答
1

将机密信息放在文档根目录的文件中被认为是一种不好的做法,因为如果服务器配置错误并将 .php 作为纯文件提供服务,或者如果打印了包含相关行的堆栈跟踪,那么您只是泄露了机密信息。(这种情况比你想象的要多,尤其是在服务器移动和维护中。)

此外,将机密信息和实际活动代码混合在上述同一个文件中会使管理代码和部署变得困难——您最终可能会将密码检查到源代码存储库中,这不是一件好事。

通常的建议是将数据库凭据和 API 密钥等机密信息保存在存储在 Web 服务器文档根目录之外的静态配置文件中并在需要时从 PHP 中读取。

于 2013-07-11T21:34:57.550 回答