2013-07-11 60 views
0

我的開發人員通過config.php文件中的一些功能將代碼交付給客戶端。在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; 
} 
?> 
+3

*「config.php文件」*?您可能必須比這更具體一點。 – deceze

+0

您好,一個小型php應用程序的配置文件,用於存儲數據庫信息以及s3信息 –

+0

對不起,點擊回車即可:<?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訪問信息 if(!defined('awsAccessKey'))define('awsAccessKey','xxxxx'); (!defined('awsSecretKey'))define('awsSecretKey','yyyyy'); ?> –

回答

1

把祕密在文檔根目錄的文件被認爲是不好的做法,因爲如果服務器配置錯誤和服務於.PHP作爲一個普通的文件,或者如果打印的堆棧跟蹤包括有問題的行,你就泄露了你的祕密。 (這種情況發生得比您想象的要多,尤其是在服務器移動和維護中)。

此外,在上述相同文件中混淆機密和實際活動代碼會導致難以管理代碼和部署 - 最終可能會導致將密碼檢查到源代碼庫中,這不是件好事。

通常的建議是保持在存儲 Web服務器的文檔根目錄靜態僅配置文件的祕密,如數據庫證書和API密鑰,當你需要它從PHP讀取它。

1

如果配置值存儲在位於一個可擴展的類中的變量,可以想象,他們可以從其他地方可以實例化類的代碼中被覆蓋。具體取決於你如何管理或暴露你的代碼,這可能被歸類爲安全問題。

這裏有更多的讓你開始壓倒一切的變量怎麼可能: Why is it possible to override instance variables in PHP but not in Java?