PHP应用安全漏洞修复
- 检测到目标FTP服务可匿名访问
检查配置文件 vsftpd.conf
中的 anonymous_enable
配置:
anonymous_enable=NO
可以通过
ps -ef|grep vsftpd
配置文件路径。
- phpinfo()函数信息泄漏
限制输出 phpinfo()
脚本的访问权限,或者禁止调用 phpinfo()
函数。
禁用phpinfo()
,检查 PHP 配置文件php.ini
中 disable_functions
的配置:
disable_functions = phpinfo
如果需要指定多个,以逗号分割:
disable_functions = phpinfo,scandir,exec,chown,putenv
- PHP配置中未配置open_basedir
open_basedir
限制用户访问文件的活动范围:
open_basedir=/www/html/
最后以 / 结尾,若指定为
/www/html
,则/www/html
,/www/html5
都是可以访问的。
如需要指定多个目录,以冒号分割(Windows下用分号分割):
open_basedir=/www/html/:/tmp/
- 检测到会话cookie中缺少HttpOnly属性
Refuses access to the session cookie from JavaScript. This setting prevents cookies snatched by a JavaScript injection.
检查 PHP 配置文件php.ini
中 session.cookie_httponly
的配置:
session.cookie_httponly = 1
- PHP配置中开启了display_errors
检查 PHP 配置文件php.ini
中 display_errors
的配置:
display_errors=Off
; display_errors
; Default Value: On
; Development Value: On
; Production Value: Off; display_startup_errors
; Default Value: Off
; Development Value: On
; Production Value: Off; error_reporting
; Default Value: E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED
; Development Value: E_ALL
; Production Value: E_ALL & ~E_DEPRECATED & ~E_STRICT
- PHP配置中开启了allow_url_fopen
本选项激活了 URL 形式的 fopen 封装协议使得可以访问 URL 对象例如文件
检查 PHP 配置文件php.ini
中 allow_url_fopen
的配置:
allow_url_fopen=Off
- 检测到目标X-XSS-Protection响应头缺失
该响应头是用于防范及过滤 XSS 的。
检查 nginx 配置文件 nginx.conf
或被 nginx.conf
进行 inlcude
的相应配置文件:
server {
add_header X-XSS-Protection "1; mode=block";
}
- X-XSS-Protection: 0
- X-XSS-Protection: 1
- X-XSS-Protection: 1; mode=block
- X-XSS-Protection: 1; report=
当设置为 0
时,禁用 XSS 过滤
当设置为 1
时,开启 XSS 过滤
当设置为 1; mode=block
时,开启 XSS 过滤,并且若检查到 XSS 攻击,停止渲染页面。
当设置为 1; report=<reporting-uri>
时,开启 XSS 过滤,并且若检查到 XSS 攻击,将使用指导的 url 来发送报告。
- 检测到目标X-Content-Type-Options响应头缺失
在通的请求响应中,浏览器会根据 HTTP 响应的 Content-Type 来分辨响应的类型。如 text/html 代表 html 文档。 但当响应类型未指定或错误指定时,浏览会尝试启用 MIME-sniffing 来猜测资源的响应类型
检查 nginx 配置文件 nginx.conf
或被 nginx.conf
进行 inlcude
的相应配置文件:
server {
add_header X-Content-Type-Options nosniff;
}
用来指定浏览器对未指定或错误指定 Content-Type 资源真正类型的猜测行为,nosniff 表示不允许任何猜测。
- 检测到目标Content-Security-Policy响应头缺失
该响应头主要用于规定页面可以加载那些资源(css/js/img 等)
检查 nginx 配置文件 nginx.conf
或被 nginx.conf
进行 inlcude
的相应配置文件:
server {
add_header Content-Security-Policy "default-src 'self' 'unsafe-inline' 'unsafe-eval'";
}
self
:允许来自相同来源的内容(相同的协议、域名和端口)
unsafe-inline
:允许加载 inline 资源(例如常见的 style 属性,onclick,inline js 和 inline css 等
unsafe-eval
:允许加载动态js代码
如果不特别指定 'unsafe-inline' 时,页面上所有 inline 样式和脚本都不会执行;
不特别指定 'unsafe-eval',页面上不允许使用 new Function,setTimeout,eval 等方式执行动态代码
- 点击劫持:X-Frame-Options未配置
server {
add_header X-Frame-Options SAMEORIGIN;
}
该响应头用于是否允许浏览器加载 frame、 iframe、 object 等属性。可以使用该功能来避免 点击劫持
- X-Frame-Options: DENY
- X-Frame-Options: SAMEORIGIN
- X-Frame-Options: ALLOW-FROM https://example.com/
当设置为 DENY 时,站点禁止任何页面被嵌入。
当设置为 SAMEORIGIN 时,只允许加载同源的 frame/iframe/object。
当设置为 ALLOW-FROM 时,只允许加载指定的源。
- 检测到错误页面web应用服务器版本信息泄露
隐藏 nginx 的版本信息,检查 nginx 配置文件 nginx.conf
或被 nginx.conf
进行 inlcude
的相应配置文件:
server {
server_tokens off;
}
该响应头用于禁止 nginx 在响应中报文中包含版本信息。
隐藏 php 的版本信息,检查 PHP 配置文件php.ini
中 expose_php
的配置:
expose_php=Off