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 に答える