通常部署完php環境后會進行一些安全設置,除了熟悉各種php漏洞外,還可以通過配置php.ini來加固PHP的運行環境,PHP官方也曾經多次修改php.ini的默認設置。
下面對php.ini中一些安全相關參數的配置進行說明
register_globals 當register_globals = ON時,PHP不知道變量從何而來,也容易出現一些變量覆蓋的問題。因此從最佳實踐的角度,強烈建議設置 register_globals = OFF,這也是PHP新版本中的默認設置。 open_basediropen_basedir 可以限制PHP只能操作指定目錄下的文件。這在對抗文件包含、目錄遍歷等攻擊時非常有用,應該為此選項設置一個值。 需要注意的是,如果設置的值是一個指定的目錄,則需要在目錄最后加上一個“/”,否則會被認為是目錄的前綴。 open_basedir = /home/web/html/ allow_url_include = Off 為了對抗遠程文件包含,請關閉此選項,一般應用也用不到此選項。同時推薦關閉的還有allow_url_fopen。 display_errors = Off 錯誤回顯,一般常用于開發模式,但是很多應用在正式環境中也忘記了關閉此選項。錯誤回顯可以暴露出非常多的敏感信息,為攻擊者下一步攻擊提供便利。推薦關閉此選項。 log_errors = On 在正式環境下用這個就行了,把錯誤信息記錄在日志里。正好可以關閉錯誤回顯。 magic_quotes_gpc = Off 推薦關閉,它并不值得依賴(請參考“注入攻擊”一章),已知已經有若干種方法可以繞過它,甚至由于它的存在反而衍生出一些新的安全問題。XSS、SQL注入等漏洞,都應該由應用在正確的地方解決。同時關閉它還能提高性能。 cgi.fix_pathinfo = 0 若PHP以CGI的方式安裝,則需要關閉此項,以避免出現文件解析問題(請參考“文件上傳漏洞”一章)。 session.cookie_httponly = 1 開啟HttpOnly session.cookie_secure = 1 若是全站HTTPS則請開啟此項。 sql.safe_mode = Off PHP的安全模式是否應該開啟的爭議一直比較大。一方面,它會影響很多函數;另一方面,它又不停地被黑客們繞過,因此很難取舍。如果是共享環境(比如App Engine),則建議開啟safe_mode,可以和disable_functions配合使用; 如果是單獨的應用環境,則可以考慮關閉它,更多地依賴于disable_functions控制運行環境安全。 disable_functions = 能夠在PHP中禁用函數(如上默認=號后面什么都不配置)。這是把雙刃劍,禁用函數可能會為開發帶來不便,但禁用的函數太少又可能增加開發寫出不安全代碼的幾率,同時為黑客獲取webshell提供便利。 一般來說,如果是獨立的應用環境,則推薦禁用以下函數: disable_functions = escapeshellarg, escapeshellcmd, exec,passthru, proc_close, proc_get_status, proc_open, proc_nice,proc_terminate, shell_exec, system, ini_restore, popen, dl,disk_free_space, diskfreespace, set_time_limit, tmpfile, fopen,readfile, fpassthru, fsockopen, mail, ini_alter, highlight_file,openlog, show_source, symlink, apache_child_terminate,apache_get_modules, apache_get_version, apache_getenv,apache_note, apache_setenv, parse_ini_file
php 上傳大文件主要涉及配置upload_max_filesize和post_max_size兩個選項
曾經遇到的問題: 在網站后臺上傳圖片的時候出現一個非常怪的問題,有時候表單提交可以獲取到值,有時候就獲取不到了,連普通的字段都獲取不到了,苦思冥想還沒解決,最后問了師傅, 師傅看了說挺奇怪的,然后問我 upload_max_filesize的值改了嗎,我說改了啊,師傅也解決不了了。過了一會師傅問 post_max_size改了嗎,我說那個和上傳沒關系吧, 師傅沒理我,我還是照著自己的想法繼續測試,弄了半天還是不行,最后試了師傅提的意見,成功了,原來上傳是和 post_max_size有關系的。 問題總結 : php.ini配置文件中的默認文件上傳大小為 2M,默認upload_max_filesize = 2M ,即文件上傳的大小為 2M,如果你想上傳超過8M的文件,比如 20M, 必須設定 upload_max_filesize = 20M。但是光設置upload_max_filesize = 20M還是無法實現大文件的上傳功能,你必須修改 php.ini配置文件中的post_max_size選項, 其代表允許 POST的數據最大字節長度,默認為 8M。如果POST 數據超出限制,那么 $_POST和$_FILES 將會為空。要上傳大文件, 你必須設定該選項值大于 upload_max_filesize指令的值,我一般設定upload_max_filesize和 post_max_size值相等。 另外如果啟用了內存限制,那么該值應當小于 memory_limit選項的值。 文件上傳的其他注意事項 : 在上傳大文件時,你會有上傳速度慢的感覺,當超過一定的時間,會報腳本執行超過 30秒的錯誤,這是因為在php.ini配置文件中 max_execution_time 配置選項在作怪, 其表示每個腳本最大允許執行時間 (秒) ,0 表示沒有限制。你可以適當調整 max_execution_time的值,不推薦設定為0。 ******************************************************************************************************** 解釋: 具體可查看 PHP手冊 中的 〔php.ini 核心配置選項說明〕 upload_max_filesize 所上傳的文件的最大大小。 post_max_size 設定 POST 數據所允許的最大大小。 memory_limit 設定了一個腳本所能夠申請到的最大內存字節數。 一般來說:memory_limit > post_max_size > upload_max_filesize upload_max_filesize是限制本次上傳的最大值 post_max_size是post數據的最大值, 通過POST提交數據的最大值 一般我們在php中用的是POST方式上傳
【網站聲明】本站除付費源碼經過測試外,其他素材未做測試,不保證完整性,網站上部分源碼僅限學習交流,請勿用于商業用途。如損害你的權益請聯系客服QQ:2655101040 給予處理,謝謝支持。