目錄
原文:PHP基礎參考04-安全相關 - 9ong PHP基礎參考05-關于文件上傳 - 9ong
php常被說不安全,是php不安全嗎?肯定不存在絕對安全的語言,但php也足夠安全,很多 PHP 程序所存在的重大弱點并不是 PHP 語言本身的問題,而是編程者的安全意識不高而導致的。因此,必須時時注意每一段代碼可能存在的問題,去發現非正確數據提交時可能造成的影響。
比如錯誤日志導致的安全問題
比如:一個php錯誤日志可能會暴露web服務器具有什么權限、正在使用的php版本、數據庫、文件組織結構、框架等信息。這些暴露的信息往往會提供攻擊者推敲的可能。
有三個常用的辦法處理這些問題。第一個是徹底地檢查所有函數,并嘗試彌補大多數錯誤。第二個是對在線系統徹底關閉錯誤報告。第三個是使用 PHP 自定義的錯誤處理函數創建自己的錯誤處理機制。根據不同的安全策略,三種方法可能都適用。
一個能提前阻止這個問題發生的方法就是利用 error_reporting() 來幫助使代碼更安全并發現變量使用的危險之處。在發布程序之前,先打開 E_ALL 測試代碼,可以幫你很快找到變量使用不當的地方。一旦準備正式發布,就應該把 error_reporting() 的參數設為 0 來徹底關閉錯誤報告或者把 php.ini 中的 display_errors 設為 off 來關閉所有的錯誤顯示以將代碼隔絕于探測。當然,如果要遲一些再這樣做,就不要忘記打開 ini 文件內的 log_errors 選項,并通過 error_log 指定用于記錄錯誤信息的文件。
比如用戶提交數據導致安全問題
必須時常留意我們的代碼,以確保每一個從客戶端提交的變量都經過適當的檢查,然后問自己以下一些問題:
- 此腳本是否只能影響所預期的文件?
- 非正常的數據被提交后能否產生作用?
- 此腳本能用于計劃外的用途嗎?
- 此腳本能否和其它腳本結合起來做壞事?
- 是否所有的事務都被充分記錄了?
記住:用戶提交的數據是不安全的,我們需要適當檢查過濾用戶提交的數據。
盡量隱藏php相關環境信息
-
在 php.ini 文件里設置 expose_php = off ,可以減少他們能獲得的有用信息。
expose_php=Off display_errors=Off
-
web 服務器用 PHP 解析不同擴展名
# 使 PHP 代碼看上去像 HTML 頁面 AddType application/x-httpd-php .htm .html
-
隱藏語言及錯誤日志
error_reporting(0); header("X-Powered-By: ASP.NET");
nginx或apache中rewrite設置
框架路由