PHP防注入之程式裡的敏感資訊

來源:互聯網
上載者:User


簡單點來說就是你不想讓別人知道的資訊,比如說資料庫的地址,使用者名稱,密碼等等,此類資訊往往知道的人越少越好。

通常,PHP程式裡的設定檔大致如下所示:

 代碼如下 複製代碼

<?php
 
return array(
    'database' => array(
        'host'     => '192.168.0.1',
        'user'     => 'administrator',
        'password' => 'e1bfd762321e409cee4ac0b6e841963c',
    ),
);
 
?>

有時候出於某些原因,比如說代碼審查,亦或者合作開發等等,第三方需要擷取代碼版本倉庫的讀許可權,一旦授權,資料庫的地址,使用者名稱,密碼等敏感資訊就暴露了。當然也可以不在代碼版本倉庫裡儲存設定檔,取而代之是撰寫文檔進行說明,但我不喜歡這樣的方法,因為如此一來,代碼本身是不完整的。

如何解決此類問題呢?最直接的方法是把敏感資訊從代碼中拿掉,換個地方儲存。具體儲存到哪裡呢?有很多選擇,比如說通過nginx的fastcgi_param來設定:

 代碼如下 複製代碼

fastcgi_param DATABASE_HOST 192.168.0.1;
fastcgi_param DATABASE_USER administrator;
fastcgi_param DATABASE_PASSWORD e1bfd762321e409cee4ac0b6e841963c;


經過這樣的映射後,我們的代碼就不會直接包含敏感資訊了:

 代碼如下 複製代碼

<?php
 
return array(
    'database' => array(
        'host'     => $_SERVER['DATABASE_HOST'],
        'user'     => $_SERVER['DATABASE_USERNAME'],
        'password' => $_SERVER['DATABASE_PASSWORD'],
    ),
);
 
?>

此外,還可以通過php-fpm的env指令來設定:

 代碼如下 複製代碼

env[DATABASE_HOST] = 192.168.0.1
env[DATABASE_USERNAME] = administrator
env[DATABASE_PASSWORD] = e1bfd762321e409cee4ac0b6e841963c


需要說明的一點是,這個設定必須放在主設定檔php-fpm.conf裡,不能放到include指令設定的子設定檔裡,否則會報錯:「Array are not allowed in the global section」;另外一點,雖然是通過env設定的,但結果還是在$_SERVER裡,而不是$_ENV。

說明: @Laruence 提醒了我,如果配置資訊通過nginx的fastcgi_param來設定的話,當nginx和php互動時,會帶來大量的資料轉送(如此看來通過php-fpm的env來設定相對更有優勢),鳥哥建議使用獨立的擴充來搞定,比如「hidef」。

通過nginx和php-fpm設定檔來解決問題的話,有一個缺點,僅對Web有效,如果通過命令列來運行,那麼無法在$_SERVER裡擷取相關資訊,不過這不算什麼難事兒,只要寫個公用的指令碼正則匹配一下nginx或者php-fpm的設定檔,就可以動態把這些資訊映射到命令列環境,具體怎麼搞就留給大家自己操作吧。

代碼乾淨了,剩下的工作就是如何確保nginx或php-fpm設定檔的安全了,不過和代碼比起來,nginx或php-fpm設定檔並不需要很多人有許可權,所以相對更容易管理

還有一個重要的函數phpinfo()這個大家一定要注意了,如能正常顯示phpinfo函數我們可


詳情
PHPInfo提供了以下一些資訊:
*PHP 版本 (包括build版本在內的精確版本資訊)
*系統版本資訊(包括build版本在內的精確版本資訊)
*擴充目錄(PHP所在目錄)
*SMTP伺服器資訊
*Sendmail路徑(如果Sendmail安裝了的話)
*Posix版本資訊
*資料庫
*ODBC 設定(包括的路徑,資料庫名,預設的密碼等等)
*MySQL 用戶端的版本資訊(包括build版本在內的精確版本資訊)
*Oracle版本資訊和庫的路徑
*所在位置的實際路徑
*Web 服務器
*IIS 版本資訊
*Apache 版本資訊
*如果在Win32下運行:
*電腦名稱
*Windows目錄的位置
*路徑(能用來泄漏已安裝的軟體資訊)

例子:
訪問一個類似於下面的URL:
http://www.example.com/PHP/phpinfo.php

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.