毫无疑问,PHP是最常用的服务器脚本编程语言之一。但对于攻击者来说,可以找到各种方法来操纵攻击PHP,因为它通常与MySQL配对并允许访问用户的私有数据。
当然,不管怎样,这里并不是说PHP在默认情况下容易受到攻击或存在一些严重的问题,但必须要调整PHP安全策略使以便使其更加的牢固,不轻易被黑客操控。本文简单几种方法,可以有效加固PHP安全,从而保障Linux服务器的安全运行。
1、删除不必要的PHP模块
默认情况下,会同时安装多个PHP模块,它们对某些任务确实有帮助,但一些不必要的模块可能是没有一点用处,所以要将其删除。要列出可用的PHP模块,请使用以下命令
$ php -m
这些模块位于/etc/php.d/
目录中,可以使用cd命令轻松地将当前目录更改为/etc/php.d/:
cd /etc/php.d/
之所以更改目录以删除模块的原因是,模块在原始目录中的命名完全不同。现在,通过以下命令列出可用的模块:
$ ls
$ sudo rm -r 20-curl.ini
2、禁用远程PHP代码执行
在大多数情况下,远程连接是不安全的。通过禁用对fopen函数的访问,它们只能访问本地文件。要禁用fopen,需要使用以下命令打开PHP配置文件:
$ sudo nano /etc/php.ini
现在,使用CRTL + w
并输入allow_url_fopen
这将导航到需要禁用这些选项的特定行。
allow_url_fopen=Off allow_url_include=Off
完成更改后,CTRL + O
并按Enter保存配置文件。
3、禁用PHP信息泄露
如果未禁用,任何人都可以轻松识别Web服务器当前使用的PHP版本,这看起来似乎不是什么大问题,但让攻击者知道确切的版本可能很危险。
$ sudo nano /etc/php.ini
“Off”
.expose_php=Off
4、禁用PHP错误日志
默认情况下,网络服务器的每个错误都对问者可见,包括攻击者。为了确保任何人都看不到任何错误,必须在PHP配置文件中进行更改。
$ sudo nano /etc/php.ini
并将显示错误日志的默认设置更改为“Off”
.
display_errors = Off
但是,如果自己是开发人员并且需要有错误日志来克服开发问题怎么办?不用担心,有一种方法可以通过在同一个配置文件中稍作更改来获取日志文件。
很简单,只需要启用log_errors并给出error_log的路径,这样的话,日志文件将存储在该路径中。
log_errors=On error_log=/var/log/httpd/php_scripts_error.log
5、PHP资源控制
本文选择了25秒的执行和输入时间以及30MB的内存限制。当然,你可以根据自己的需要对其进行自定义。
max_execution_time = 25 max_input_time = 25 memory_limit = 30M
6、限制PHP文件访问
为了限制PHP文件访问,这里将启用open_basedir
这样可以确保PHP文件只能包含我们列出的目录中的文件。
重要:这将阻止所有其他目录,并要求我们手动添加重要目录,其中还包括添加临时文件和会话目录。
open_basedir = "/home/sagar/public_html:/var/lib/php/tmp_upload:/var/lib/php/session"
7、配置PHP文件上传
如果应用程序不需要从用户端上传文件,则始终建议禁用文件上传,这可以防止攻击者上传可能最终损坏整个应用程序的危险脚本。
file_uploads = Off
但是,如果你的应用程序旨在从用户端获取文件怎么办?在这种情况下,必须启用文件上传,但尝试减少最大空间并减少可以从单个请求上传的最大文件数,例如:
file_uploads = On upload_max_filesize = 1M max_file_uploads = 1
在PHP中,默认情况下,临时文件放置在所有系统用户都可以写入的目录中。必须将默认位置切换到更安全的位置,并确保它不在Web根目录中。
由于本文使用了open_basedir,所要这里将使用与我们已经将其列入白名单的位置相同的位置。
upload_tmp_dir = /var/lib/php/tmp_upload
8、禁用危险的PHP函数
PHP默认启用了各种功能,有助于开发目的。但是黑客可以使用许多功能来攻击网络服务器,禁用它们将增加一层安全性。
这里有一组禁用的功能,并确保在更改配置文件之前对它们进行核对。
disable_functions = exec、passthru、shell_exec、system、proc_open、popen、curl_exec、curl_multi_exec、parse_ini_file、show_source
9、更改SOAP缓存目录
上面已经更改了默认临时目录和会话,这同样适用于SOAP缓存,因为它不应保存到默认目录,确保将其保存到安全的地方。
soap.wsdl_cache_dir = /var/lib/php/soap_cache
10、控制PHP POST大小
通过控制POST大小,可以保护Linux服务器免受黑客试图通过发送大文件来阻塞服务器资源的攻击,这样就能免于不必要的服务器崩溃和缓慢的响应时间。
post_max_size=4M
11. 保护PHP配置
在删除不必要的文件时,我们经常会删除一些关键文件甚至目录。所以必须调整设置,即使是root用户也不能删除它们。为了制作文件和目录,可以使用带有不同标志的chattr 。
使用给定命令后,将无法再修改或删除特定文件。
$ sudo chattr +i /etc/php.ini
这样在尝试删除不可变文件时,它会显示一条错误消息“Operation not permitted(不允许操作)”:
$ sudo rm -r /etc/php.ini
+a
标志而不是+i
.$ sudo chattr +a /etc/php.ini
可能在某些情况下你不再需要旧的配置文件,在这种情况下,必须取消设置属性。
$ sudo chattr -i /etc/php.ini
同样,如果在使文件不可变的过程中使用了+a
属性,可以使使用以下命令来反转它:
$ sudo chattr -a /etc/php.ini
12、为HTTP使用SSL证书
如今,很多浏览器(例如Google Chrome、Firefox、Opera等)都建议对Web服务器使用HTTPS。由于HTTPS为不受信任的站点提供了安全和加密的访问通道,可以为用户提供可靠的体验。
所要通过添加HTTPS,可以防止XSS攻击,包括防止黑客使用代码读取传输的数据。
要启用HTTPS,可以在服务器上安装并使用免费的Let’s Encrypt SSL证书。
$ sudo dnf install epel-release $ sudo dnf install certbot python3-certbot-apache mod_ssl $ sudo certbot --apache -d domain.com [Apache服务器] $ sudo certbot --nginx -d domain.com [Nginx服务器]
13、定期更新PHP
由于PHP是一种开源语言,因此经常都会对其进行更新修补。这似乎不是一个重要的步骤,但可以免于重大漏洞。因此,请确保PHP包保持最新,这将使你免受许多可能的漏洞的影响。
# yum update & yum upgrade [基于RHEL系统] # apt update && apt upgrade [基于Debian系统]
总结
在互联网的安全方面,PHP的文件包含漏洞正在容易增加,而且在各种各样的PHP应用中挖出的文件包含漏洞数不胜数,所要保护PHP安全已经成为众多Linux服务器管理员必须要解决多的问题。
在Linux服务器系统中,增强PHP安全性的方法有很多,而在上面的介绍中,小编也整理了PHP安全加固的常见方法,希望对大家有所帮助。