支持的協議和封裝協議
- file:// — 訪問本地文件系統
- http:// – https:// — 訪問 HTTP(s) 網址
- ftp:// – ftps:// — 訪問 FTP(s) URLs
- php:// — 訪問各個輸入/輸出流(I/O streams)
- zlib:// – bzip2:// – zip:// — 壓縮流
- data:// — 數據(RFC 2397)、
- glob:// — 查找匹配的文件路徑模式
- phar:// — PHP 歸檔
- ssh2:// — Secure Shell 2
- rar:// — RAR
- ogg:// — 音頻流
- expect:// — 處理交互式的流
doc_root
和user_dir
- 可以通過配置文件內的
doc_root
或設置環境變量PHP_DOCUMENT_ROOT
來定義 PHP 腳本主目錄。如果設置了該項,那麼 PHP 就只會解釋doc_root
目錄下的文件,並確保目錄外的腳本不會被 PHP 解釋器執行(下面所說的 user_dir 除外); - 另一個可用的選項就是
user_dir
。當user_dir
沒有設置的時候,doc_root
就是唯一能控制在哪裏打開文件的選項。訪問如 http://my.host/~user/doc.php 這個 URL 時,並不會打開用戶主目錄下文件,而只會執行 doc_root 目錄下的 ~user/doc.php(這個子目錄以 [~] 作開頭); - 如果設置了
user_dir
,例如public_php
,那麼像 http://my.host/~user/doc.php 這樣的請求將會執行用戶主目錄下的public_php
子目錄下的 doc.php 文件。假設用戶主目錄的絕對路徑是 /home/user,那麼被執行文件將會是 /home/user/public_php/doc.php;
文件系統安全
- PHP被設計成以用戶來級別來訪問文件系統,在Linux中一切皆文件,如果權限控制不當,則有越權攻擊的可能;
- PHP中的null字符同C語言中的一樣,有截取字符串的作用,可以造成類似於SQL中的’;'SQL注入攻擊;
數據庫安全
- 應用程序永遠不要使用超級用戶來鏈接數據庫;
- 權限最小原則;
- 事務可以使用數據庫的視圖、觸發器來實現,不建議全部使用業務代碼控制;
register_globals
- PHP4.2開始,將register_global的默認值從on改爲了off。因爲該選項on的話,會默認將傳過來的參數加入到上下文中,如果不小心使用了該變量,則會造成不可預估的問題,例如越權;
- 推薦使用 超全局變量而不要依賴 register_globals;