PHP的安全設定有哪些

藏色散人
發布: 2023-03-03 12:58:01
原創
2972 人瀏覽過

PHP的安全設定有:1、屏蔽PHP錯誤輸出;2、屏蔽PHP版本;3、關閉全域變數;4、檔案系統限制;5、禁止遠端資源存取;6、安裝擴充等等。

PHP的安全設定有哪些

推薦:《PHP教學

最近和同事說起了PHP安全相關的問題,記錄下一些心得體會。

由於腳本語言和早期版本設計的許多原因,php專案存在不少安全隱患。從配置選項來看,可以做如下的最佳化。

1.屏蔽PHP錯誤輸出。
在/etc/php.ini(預設設定檔位置),將下列設定值改為Off

display_errors=Off
登入後複製

不要將錯誤堆疊資訊直接輸出到網頁上,防止駭客加以利用相關資訊。

正確的做法是:
把錯誤日誌寫到日誌檔案中,方便排查問題。

2.屏蔽PHP版本。
預設情況下PHP版本會被顯示在回傳頭裡,如:
Response Headers X-powered-by: PHP/7.2.0

將php.ini中如下的設定值改為Off

expose_php=Off
登入後複製

3.關閉全域變數。
如果開啟全域變數會使一些表單提交的資料被自動註冊為全域變數。程式碼如下:

<form action="/login" method="post">
<input name="username" type="text">
<input name="password" type="password">
<input type="submit" value="submit" name="submit">
</form>
登入後複製

如果開啟了全域變量,則伺服器端PHP腳本可以用$username和$password來取得到使用者名稱和密碼,這會造成極大的腳本注入危險。

開啟方法是在php.ini中修改如下:

register_globals=On
登入後複製

建議關閉,參數如下:

register_globals=Off
登入後複製

當關閉後,就只能從$_POST、$_GET 、$_REQUEST裡面取得相關參數。

4.檔案系統限制
可以透過open_basedir來限制PHP可以存取的系統目錄。

如果不限制使用下面的腳本程式碼(hack.php)可以取得到系統密碼。

<?php
echo file_get_contents(&#39;/etc/passwd&#39;);
登入後複製

當設定了後則會報錯,不再顯示相關信息,讓系統目錄b不會被非法訪問:

PHP Warning: file_get_contents(): open_basedir restriction in effect. File(/etc/passwd) is not within the allowed path(s): (/var/www) in /var/www/hack.php on line 3

Warning: file_get_contents(): open_basedir restriction in effect. File(/etc/passwd) is not within the allowed path(s): (/var/www) in /var/www/hack. php on line 3 PHP Warning: file_get_contents(/etc/passwd): failed to open stream: Operation not permitted in /var/www/hack.php on line 3



  1. ##Warning: file_get_contents(/etc/passwd): failed to open stream: Operation not permitted in /var/www/hack.php on line 3
  2. 設定方法如下:
  3. open_basedir=/var/www
    登入後複製
  4. 5.禁止遠端資源存取。

allow_url_fopen=Off

allow_url_include=Off
登入後複製
其他第三方安全擴充

######6.Suhosin。 ###############Suhosin是一個PHP程式的保護系統。它的設計初衷是為了保護伺服器和用戶,抵禦PHP程式和PHP核心中已知或未知的缺陷(感覺挺實用的,可以抵禦一些小攻擊)。 Suhosin有兩個獨立的部分,使用時可以分開使用或合併使用。 ######第一部分是一個用於PHP核心的補丁,它能抵禦緩衝區溢位或格式化串的弱點(這個必須的!);######第二部分是一個強大的PHP擴充(擴充模式挺好的,安裝方便…),包含其他所有的保護措施。 ######安裝擴充功能###
wget http://download.suhosin.org/suhosin-0.9.37.1.tar.gztar zxvf suhosin-0.9.37.1.tar.gz
cd suhosin-0.9.37.1/phpize./configure  --with-php-config=/usr/local/bin/php-config
make
make install
在php.ini下加入suhosin.so即可

extension=suhosin.so
登入後複製
#########特性################模擬器保護模式#######增加兩個函數sha256()和sha256_file()到PHP核心中######所有平台,加入CRYPT_BLOWFISH到函數crypt()中######開啟對phpinfo()頁的透明保護###### SQL資料庫使用者保護(測試階段)###############執行階段保護##########
  1. 加密cookies
  2. 防止不同种类的包含漏洞(不允许远程URL包含(黑/白名单);不允许包含已上传的文件;防止目录穿越攻击)
  3. 允许禁止preg_replace()
  4. 允许禁止eval()函数
  5. 通过配置一个最大执行深度,来防止无穷递归
  6. 支持每个vhost配置黑白名单
  7. 为代码执行提供分离的函数黑白名单
  8. 防止HTTP响应拆分漏洞
  9. 防止脚本控制memory_limit选项
  10. 保护PHP的superglobals,如函数extract(),import_request_vars()
  11. 防止mail()函数的新行攻击
  12. 防止preg_replace()的攻击

Session 保护

  1. 加密session数据
  2. 防止session被劫持
  3. 防止超长的session id
  4. 防止恶意的session id

SESSION里的数据通常在服务器上的明文存放的。这里通过在服务端来加解密$_SESSION。这样将Session的句柄存放在Memcache或数据库时,就不会被轻易攻破,很多时候我们的session数据会存放一些敏感字段。

这个特性在缺省情况下是启用的,也可以通过php.ini来修改:

suhosin.session.encrypt = On
suhosin.session.cryptkey = zuHywawAthLavJohyRilvyecyondOdjo
suhosin.session.cryptua = On
suhosin.session.cryptdocroot = On

;; IPv4 only
suhosin.session.cryptraddr = 0suhosin.session.checkraddr = 0
登入後複製

Cookie加密

Cookie在客户端浏览器的传输的HTTP头也是明文的。通过加密cookie,您可以保护您的应用程序对众多的攻击,如

  • Cookie篡改:攻击者可能会尝试猜测其他合理的cookie值来攻击程序。
  • 跨应用程序使用Cookie:不正确配置的应用程序可能具有相同的会话存储,如所有会话默认存储在/tmp目录下,一个应用程序的cookie可能永远不会被重新用于另一应用,只要加密密钥不同。

Cookie加密在php.ini中的配置:

suhosin.cookie.encrypt = On

;; the cryptkey should be generated, e.g. with &#39;apg -m 32&#39;suhosin.cookie.cryptkey = oykBicmyitApmireipsacsumhylWaps1
suhosin.cookie.cryptua = On
suhosin.cookie.cryptdocroot = On

;; whitelist/blacklist (use only one)
;suhosin.cookie.cryptlist = WALLET,IDEAS
suhosin.cookie.plainlist = LANGUAGE

;; IPv4 only
suhosin.cookie.cryptraddr = 0suhosin.cookie.checkraddr = 0Blocking Functions
测试##默认PHP的Session保存在tmp路径下ll  -rt /tmp | grep sess##扩展未开启时查看某条sesson的数据cat  sess_ururh83qvkkhv0n51lg17r4aj6//记录是明文的##扩展开启后查看某条sesson 的数据cat  sess_ukkiiiheedupem8k4hheo0b0v4//记录是密文的可见加密对安全的重要性
登入後複製

阻断功能

白名单

##显式指定指定白名单列表
suhosin.executor.func.whitelist = htmlentities,htmlspecialchars,base64_encode
suhosin.executor.eval.whitelist = htmlentities,htmlspecialchars,base64_encode

<?php
echo htmlentities(&#39;<test>&#39;);
eval(&#39;echo htmlentities("<test>");&#39;);
登入後複製

黑名单

##显式指定指定黑名单列表
suhosin.executor.func.blacklist = assert,unserialize,exec,popen,proc_open,passthru,shell_exec,system,hail,parse_str,mt_srand
suhosin.executor.eval.whitelist = assert,unserialize,exec,popen,proc_open,passthru,shell_exec,system,hail,parse_str,mt_srand
通过日志来查看非法调用黑白名单

suhosin.simulation = 1
suhosin.log.file = 511
suhosin.log.file.name = /tmp/suhosin-alert.log
登入後複製

其他配置项

suhosin.executor.include.max_traversal    扩目录的最大深度,可以屏蔽切换到非法路径
suhosin.executor.include.whitelist        允许包含的URL,用逗号分隔
suhosin.executor.include.blacklist        禁止包含的URL,用逗号分隔
suhosin.executor.disable_eval = On        禁用eval函数

suhosin.upload.max_uploads
suhosin.upload.disallow_elf
suhosin.upload.disallow_binary
suhosin.upload.remove_binary
suhosin.upload.verification_script        上传文件检查脚本,可以来检测上传的内容是否包含webshell特征
登入後複製

使用Suhosin,你可以得到一些错误日志,你能把这些日志放到系统日志中,也可以同时写到其他任意的日志文件中去;

它还可以为每一个虚拟主机创建黑名单和白名单;

可以过滤GET和POST请求、文件上载和cookie;

你还能传送加密的会话和cookie,可以设置不能传送的存储上线等等;

它不像原始的PHP强化补丁,Suhosin是可以被像Zend Optimizer这样的第三方扩展软件所兼容的。

以上是PHP的安全設定有哪些的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板