Linux: 适用于Sys管理员的Linux 25个PHP安全最佳实践, Linux 25 PHP Security Best Practices For Sys Admins

 

PHP是一种开源的服务器端脚本语言,它被广泛使用。Apache / Nginx / Lighttpd Web服务器通过HTTP或HTTPS协议提供对文件和内容的访问。配置错误的服务器端脚本语言可能会产生各种问题。因此,应谨慎使用PHP。这里有25个用于Linux和Unix系统管理员的PHP安全最佳实践,用于安全地配置PHP。

 

PHP安全最佳实践

我们的PHP安全提示示例设置

  • DocumentRoot:/ var / www / html
  • 默认Web服务器:Apache(您可以使用Lighttpd或Nginx而不是Apache)
  • 默认PHP配置文件:/etc/php.ini或/etc/php/7.0/fpm/php.ini
  • 默认PHP扩展配置目录:/etc/php.d/或/etc/php/7.0/fpm/conf.d/
  • 我们的示例php安全配置文件:/etc/php.d/security.ini/etc/php/7.0/fpm/conf.d/99-security.conf(您需要使用文本编辑器创建此文件)
  • 操作系统:RHEL / CentOS / Fedora Linux(这些说明适用于任何其他Linux发行版,如Debian / Ubuntu或其他类Unix操作系统,如OpenBSD / FreeBSD / HP-UX)。
  • 默认PHP服务器TCP / UDP端口:无

本文中列出的大多数操作都是在假设它们将由运行bash的root用户或任何其他现代shell执行的情况下编写的:

$ php -v

 

示例输出:

PHP 5.3.3 (cli) (built: Oct 24 2011 08:35:41)
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies

 

或者

PHP 7.3.7 (cli) (built: Jul  8 2019 09:58:12) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.7, Copyright (c) 1998-2018 Zend Technologies
    with Zend OPcache v7.3.7, Copyright (c) 1999-2018, by Zend Technologies

 

出于演示目的,我将使用以下操作系统:

$ cat /etc/redhat-release

 

示例输出:

Red Hat Enterprise Linux Server release 6.1 (Santiago)

 

让我们看看一些php安全性最佳实践。

 

1.了解你的敌人

基于PHP的应用程序可以面对不同类型的攻击。我注意到了不同类型的攻击:

  1. XSS – 跨站点脚本是php Web应用程序中的一个漏洞,攻击者可能利用该漏洞来窃取用户的信息。您可以配置Apache并编写更安全的PHP脚本(验证所有用户输入)以避免xss攻击。
  2. SQL注入 – 这是php应用程序的数据库层中的漏洞。当用户输入被错误地过滤时,应用程序可以执行任何SQL语句。您可以配置Apache并编写安全代码(验证和转义所有用户输入)以避免SQL注入攻击。PHP中的一种常见做法是在发送SQL查询之前使用名为mysql_real_escape_string()的函数来转义参数。
    欺骗
  3. 文件上传 – 它允许访问者在您的服务器上放置文件(上传文件)。这可能会导致各种安全问题,例如删除文件,删除数据库,获取用户详细信息等等。您可以使用php禁用文件上传或编写安全代码(例如验证用户输入并仅允许图像文件类型,如png或gif)。
  4. 包括本地和远程文件 – 攻击者可以从远程服务器打开文件并执行任何PHP代码。这允许他们上传文件,删除文件和安装后门。您可以配置php以禁用远程文件执行。
  5. eval() – 将字符串计算为PHP代码。攻击者经常使用它来隐藏服务器本身的代码和工具。您可以配置php以禁用eval()。
  6. Sea-surf Attack(跨站点请求伪造 – CSRF) – 此攻击迫使最终用户在其当前正在进行身份验证的Web应用程序上执行不需要的操作。成功的CSRF利用可能会损害最终用户数据和普通用户的操作。如果目标最终用户是管理员帐户,则可能会危及整个Web应用程序。

 

2.查找内置PHP模块

要查看已编译的PHP模块集,请键入以下命令:

# php -m

 

示例输出:

[PHP Modules]
apc
bcmath
bz2
calendar
Core
ctype
curl
date
dom
ereg
exif
fileinfo
filter
ftp
gd
gettext
gmp
hash
iconv
imap
json
libxml
mbstring
memcache
mysql
mysqli
openssl
pcntl
pcre
PDO
pdo_mysql
pdo_sqlite
Phar
readline
Reflection
session
shmop
SimpleXML
sockets
SPL
sqlite3
standard
suhosin
tokenizer
wddx
xml
xmlreader
xmlrpc
xmlwriter
xsl
zip
zlib

[Zend Modules]
Suhosin

 

我建议您使用PHP和减少的模块来提高性能和安全性。例如,您可以通过删除(删除)配置文件来禁用sqlite3模块,或者重命名(移动)一个名为/etc/php.d/sqlite3.ini 的文件,如下所示:

# rm /etc/php.d/sqlite3.ini

 

OR

# mv /etc/php.d/sqlite3.ini /etc/php.d/sqlite3.disable

 

或者其他编译模块只能通过重新安装PHP来删除配置减少。您可以从php.net下载php源代码,并使用GD,fastcgi和MySQL支持编译如下:

./configure --with-libdir=lib64 --with-gd --with-mysql --prefix=/usr --exec-prefix=/usr \
--bindir=/usr/bin --sbindir=/usr/sbin --sysconfdir=/etc --datadir=/usr/share \
--includedir=/usr/include --libexecdir=/usr/libexec --localstatedir=/var \
--sharedstatedir=/usr/com --mandir=/usr/share/man --infodir=/usr/share/info \
--cache-file=../config.cache --with-config-file-path=/etc \
--with-config-file-scan-dir=/etc/php.d  --enable-fastcgi \
--enable-force-cgi-redirect

 

有关更多信息,请参阅如何在Unix上编译和重新安装php,如操作系统

 

3.限制PHP信息泄漏

要限制PHP信息泄漏,请禁用expose_php。编辑/etc/php.d/secutity.ini并设置以下指令:

expose_php=Off

 

启用后,expose_php向全世界报告服务器上安装了PHP,其中包括HTTP标头中的PHP版本(例如,X-Powered-By:PHP / 5.3.3)。PHP徽标guids(参见示例)也会公开,因此将它们附加到启用PHP的站点的URL将显示相应的徽标。启用expose_php后,您可以使用以下命令查看php版本:

$ curl -I https://www.cyberciti.biz/index.php

 

示例输出:

HTTP/1.1 200 OK
X-Powered-By: PHP/5.3.3
Content-type: text/html; charset=UTF-8
Vary: Accept-Encoding, Cookie
X-Vary-Options: Accept-Encoding;list-contains=gzip,Cookie;string-contains=wikiToken;string-contains=wikiLoggedOut;string-contains=wiki_session
Last-Modified: Thu, 03 Nov 2011 22:32:55 GMT
...

 

我还建议您在httpd.conf中设置ServerTokens和ServerSignature指令以隐藏Apache版本在使用Nginx时隐藏PHP 5/7版本

 

4.最小化可加载的PHP模块(动态扩展)

PHP支持“动态扩展”。默认情况下,RHEL会加载/etc/php.d/目录中的所有扩展模块。要启用或禁用特定模块,只需在/etc/php.d/目录中找到配置文件并注释模块名称。您还可以重命名或删除模块配置文件。为了获得最佳的PHP性能和安全性,您应该只启用webapps所需的扩展。例如,要禁用gd扩展,请键入以下命令:要启用名为gd的php模块,请输入:

# cd /etc/php.d/
# mv gd.{ini,disable}
# /sbin/service httpd restart

 

要启用名为gd的php模块,请输入:

# mv gd.{disable,ini}
# /sbin/service httpd restart

 

5.记录所有PHP错误

不要向所有站点访问者公开PHP错误消息。编辑/etc/php.d/security.ini并设置以下指令:

display_errors=Off

 

确保将所有php错误记录到日志文件中

log_errors=On
error_log=/var/log/httpd/php_scripts_error.log

 

6.禁止上传文件

编辑/etc/php.d/security.ini并设置以下指令以出于安全原因禁用文件上载:

file_uploads=Off

 

如果您的应用程序的用户需要上传文件,请通过设置upload_max_filesize限制 PHP将通过上传接受的文件的最大大小来启用此功能:

file_uploads=On
# user can only upload upto 1MB via php
upload_max_filesize=1M

 

7.关闭远程执行代码

如果启用,allow_url_fopen允许PHP的文件功能(例如file_get_contents()和include和require语句)可以从远程位置(如FTP或网站)检索数据。

该allow_url_fopen选项选项允许PHP的文件的功能-如file_get_contents()函数和include和require语句-可以检索使用FTP或HTTP协议的远程位置的数据。程序员经常忘记这一点,并且在将用户提供的数据传递给这些函数时不会进行适当的输入过滤,从而将代码注入漏洞打开。基于PHP的Web应用程序中报告的大量代码注入漏洞是由启用allow_url_fopen和错误输入过滤的组合引起的。编辑/etc/php.d/security.ini并设置以下指令:

allow_url_fopen=Off

我还建议出于安全原因禁用allow_url_include:

allow_url_include=Off

 

8.启用SQL安全模式

编辑/etc/php.d/security.ini并设置以下指令:

sql.safe_mode = on

如果打开,mysql_connect()和mysql_pconnect()将忽略传递给它们的任何参数。请注意,您可能需要对代码进行一些更改。启用sql.safe_mode时,第三方和开源应用程序(如WordPress)和其他应用程序可能根本无法运行。我还建议您为所有php 5.3.x安装关闭magic_quotes_gpc,因为它的过滤效果不佳且不够强大。mysql_escape_string()和自定义过滤功能有更好的用途:

magic_quotes_gpc = off

 

9.控制POST大小

当客户端(浏览器或用户)需要将数据作为请求的一部分发送到Apache Web服务器时,例如上载文件或提交完整的表单时,将使用HTTP POST请求方法。攻击者可能会尝试发送超大的POST请求以占用您的系统资源。您可以限制PHP将处理的最大POST请求大小。编辑/etc/php.d/security.ini并设置以下指令:

; Set a realistic value here
post_max_size = 1K

1K设置php应用程序允许的最大发布数据大小。此设置也会影响文件上载。要上传大文件,此值必须大于upload_max_filesize。我还建议您使用Apache Web服务器限制可用的方法。编辑httpd.conf并为DocumentRoot / var / www / html设置以下指令:

<directory /var/www/html>
    <limitExcept GET POST>
        Order allow,deny
    </limitExcept>
## Add rest of the config goes here... ##
</directory>

 

10.资源控制(DoS控制)

您可以设置每个PHP脚本的最长执行时间,以秒为单位。另一个推荐选项是设置每个脚本可能花费在解析请求数据上的最长时间,以及脚本可能消耗的最大内存量。编辑/etc/php.d/security.ini并设置以下指令:

#set in seconds
max_execution_time  =   30 
max_input_time  = 30 
memory_limit  = 40M

 

11.安装适用于PHP的Suhosin高级保护系统

从项目页面:

Suhosin是PHP安装的高级保护系统。它旨在保护服务器和用户免受PHP应用程序和PHP核心中的已知和未知缺陷的影响。Suhosin有两个独立的部分,可以单独使用或组合使用。第一部分是针对PHP核心的小补丁,它实现了针对缓冲区溢出或格式化字符串漏洞的一些低级保护,第二部分是实现所有其他保护的强大PHP扩展。

了解如何在Linux操作系统下安装和配置suhosin。

 

12.禁用危险的PHP函数

PHP有很多功能,如果使用不当可以用来破解你的服务器。您可以使用disable_functions指令在/etc/php.d/security.ini中设置函数列表:

disable_functions =exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source

 

13. PHP Fastcgi / CGI – cgi.force_redirect指令

PHP与FastCGI一起使用。Fascgi减少了Web服务器的内存占用,但仍然提供了整个PHP语言的速度和功能。您可以按照此处的说明配置Apache2 + PHP + FastCGI或cgi。配置指令cgi.force_redirect阻止任何人直接使用http://www.cyberciti.biz/cgi-bin/php/hackerdir/backdoor.php这样的URL调用PHP。出于安全原因启用cgi.force_redirect。编辑/etc/php.d/security.ini并设置以下指令:

; Enable cgi.force_redirect for security reasons in a typical *Apache+PHP-CGI/FastCGI* setup

 

14. PHP用户和组ID

mod_fastcgi是Apache Web服务器的cgi模块。它可以连接到外部FASTCGI服务器。您需要确保php以非root用户身份运行。如果PHP作为根或UID低于100执行,它可以访问和/或操作系统文件。您必须使用Apache的suEXEC或mod_suPHP作为非特权用户执行PHP CGI 。suEXEC功能使Apache用户能够在不同于调用Web服务器的用户ID的用户ID下运行CGI程序。在这个例子中,我的php-cgi作为phpcgi用户运行,apache作为apache用户运行:
# ps aux | grep php-cgi
示例输出:

phpcgi 6012 0.0 0.4 225036 60140?S Nov22 0:12 / usr / bin / php-cgi
phpcgi 6054 0.0 0.5 229928 62820?S Nov22 0:11 / usr / bin / php-cgi
phpcgi 6055 0.1 0.4 224944 53260?S Nov22 0:18 / usr / bin / php-cgi
phpcgi 6085 0.0 0.4 224680 56948?S Nov22 0:11 / usr / bin / php-cgi
phpcgi 6103 0.0 0.4 224564 57956?S Nov22 0:11 / usr / bin / php-cgi
phpcgi 6815 0.4 0.5 228556 61220?S 00:52 0:19 / usr / bin / php-cgi
phpcgi 6821 0.3 0.5 228008 61252?S 00:55 0:12 / usr / bin / php-cgi
phpcgi 6823 0.3 0.4 225536 58536?S 00:57 0:13 / usr / bin / php-cgi

您可以使用spawn-fcgi等工具将远程和本地FastCGI进程生成为phpcgi用户(首先,将phpcgi用户添加到系统中):
# spawn-fcgi -a 127.0.0.1 -p 9000 -u phpcgi -g phpcgi -f /usr/bin/php-cgi

现在,您可以配置Apache,Lighttpd和Nginx Web服务器以使用运行的外部php FastCGI端口9000在127.0.0.1 IP地址。

 

15.限制PHP访问文件系统

open_basedir指令设置允许PHP使用fopen()等函数访问文件的目录。如果文件在open_basdir定义的路径之外,PHP将拒绝打开它。您不能使用符号链接作为解决方法。例如,只允许访问/ var / www / html目录,而不允许访问/ var / www或/ tmp或/ etc目录:

; Limits the PHP process from accessing files outside
; of specifically designated directories such as /var/www/html/
open_basedir="/var/www/html/"
; ------------------------------------
; Multiple dirs example
; open_basedir="/home/httpd/vhost/cyberciti.biz/html/:/home/httpd/vhost/nixcraft.com/html/:/home/httpd/vhost/theos.in/html/"
; ------------------------------------

 

16.会话路径

PHP中的会话支持包括一种在后续访问中保留某些数据的方法。这使您可以构建更多自定义应用程序并增加网站的吸引力。此路径在/etc/php.ini文件中定义,与特定会话相关的所有数据都将存储在session.save_path选项指定的目录中的文件中。RHEL / CentOS / Fedora Linux下的默认值如下:

session.save_path="/var/lib/php/session"
; Set the temporary directory used for storing files when doing file upload
upload_tmp_dir="/var/lib/php/session"

 

确保路径在/ var / www / html之外,并且被任何其他系统用户读取或写入
# ls -Z /var/lib/php/
示例输出:

drwxrwx ---。root apache system_u:object_r:httpd_var_run_t:s0 session

注意:ls命令的-Z选项显示SELinux安全上下文,例如文件模式,用户,组,安全上下文和文件名。

 

17.保持PHP,软件和操作系统最新

应用安全补丁是维护Linux,Apache,PHP和MySQL服务器的重要部分。应使用以下任一工具(如果您通过软件包管理器安装PHP)尽快审查并应用所有php安全更新:或者您可以配置Red Hat / CentOS / Fedora Linux以发送yum软件包更新通知通过邮件。另一种选择是通过cron作业应用所有安全更新。在Debian / Ubuntu Linux下,您可以使用apticron发送安全通知。
# yum update

# apt-get update && apt-get upgrade

 

18.限制文件和目录访问

确保以非root用户身份运行Apache,例如Apache或www。所有文件和目录应由/ var / www / html下的非root用户(或apache用户)拥有:/ var / www / html /是一个子目录和DocumentRoot,可由其他用户修改,因为root从不执行任何文件那里,不应该在那里创建文件。
# chown -R apache:apache /var/www/html/

确保/ var / www / html /下的文件权限设置为0444(只读):
# chmod -R 0444 /var/www/html/
确保/ var / www / html /下的所有目录权限都设置为0445:
# find /var/www/html/ -type d -print0 | xargs -0 -I {} chmod 0445 {}

 

关于设置正确的文件权限的注意事项

chown和chmod命令确保在任何情况下DocumentRoot或DocumentRoot中包含的文件都不可由Web服务器用户apache写入。请注意,您需要设置对您网站的开发模型最有意义的权限,因此可以根据您的要求随意调整chown和chmod命令。在此示例中,Apache服务器作为apache用户运行。这是使用httpd.conf文件中的UserGroup指令配置的。apache用户需要对DocumentRoot下的所有内容具有读取权限,但不应具有对任何内容的写入权限。

确保httpd.conf具有以下用于限制性配置的指令:

<directory / >
    Options None
    AllowOverride None
    Order allow,deny
</directory>

 

您应该只在需要时授予写访问权限。某些Web应用程序(如wordpress等)可能需要缓存目录。您可以使用以下命令授予对缓存目录的写访问权限:
# chmod a+w /var/www/html/blog/wp-content/cache
### block access to all ###
# echo 'deny from all' > /var/www/html/blog/wp-content/cache/.htaccess

 

19.编写保护Apache,PHP和MySQL配置文件

使用chattr命令写保护配置文件:
# chattr +i /etc/php.ini
# chattr +i /etc/php.d/*
# chattr +i /etc/my.ini
# chattr +i /etc/httpd/conf/httpd.conf
# chattr +i /etc/

chattr命令也可以在/ var / www / html目录中写保护你的php文件或文件:
# chattr +i /var/www/html/file1.php
# chattr +i /var/www/html/

 

20.使用Linux安全扩展(例如SELinux)

Linux附带了各种安全补丁,可用于防止错误配置或受损的服务器程序。如果可能,请使用SELinux其他Linux安全扩展来强制限制网络和其他程序。例如,SELinux为Linux内核和Apache Web服务器提供了各种安全策略。要列出所有Apache SELinux保护变量,请输入:
# getsebool -a | grep httpd

Sample outputs:

allow_httpd_anon_write --> off
allow_httpd_mod_auth_ntlm_winbind --> off
allow_httpd_mod_auth_pam --> off
allow_httpd_sys_script_anon_write --> off
httpd_builtin_scripting --> on
httpd_can_check_spam --> off
httpd_can_network_connect --> off
httpd_can_network_connect_cobbler --> off
httpd_can_network_connect_db --> off
httpd_can_network_memcache --> off
httpd_can_network_relay --> off
httpd_can_sendmail --> off
httpd_dbus_avahi --> on
httpd_enable_cgi --> on
httpd_enable_ftp_server --> off
httpd_enable_homedirs --> off
httpd_execmem --> off
httpd_read_user_content --> off
httpd_setrlimit --> off
httpd_ssi_exec --> off
httpd_tmp_exec --> off
httpd_tty_comm --> on
httpd_unified --> on
httpd_use_cifs --> off
httpd_use_gpg --> off
httpd_use_nfs --> off

 

要禁用Apache cgi支持,请输入:
# setsebool -P httpd_enable_cgi off

有关详细信息,请参阅Red Hat SELinux指南

 

21.安装Mod_security

ModSecurity是一个用于Web应用程序的开源入侵检测和防御引擎。您可以在Linux下轻松安装mod_security,并保护来自xss和其他各种攻击的基于apache和php的应用程序:

## A few Examples ##
# Do not allow to open files in /etc/
SecFilter /etc/
 
# Stop SQL injection
SecFilter "delete[[:space:]]+from"
SecFilter "select.+from"

 

22.如果可能的话,在Chroot Jail中运行Apache / PHP

将PHP和/或Apache放在chroot jail中可以通过将Web服务器隔离到文件系统的一小部分来最大限度地减少潜在破坏所造成的损害。您可以使用传统的chroot类型的Apache设置。但是,我推荐使用容器概念的FreeBSD jails,XEN virtulization,KVM virtulization或OpenVZ虚拟化。

 

23.使用防火墙限制传出连接

攻击者将使用wget等工具在您的Web服务器上本地下载文件。使用iptables阻止来自apache用户的传出连接。对于本地生成的数据包,ipt_owner模块尝试匹配数据包创建者的各种特征。它仅在OUTPUT链中有效。在此示例中,允许vivek用户使用端口80连接到外部(对RHN或centos repo访问很有用):

/sbin/iptables -A OUTPUT -o eth0 -m owner --uid-owner vivek -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT

 

这是阻止来自apache用户的所有传出连接的另一个示例,除了我们自己的smtp服务器和垃圾邮件验证API服务:

# ....
/sbin/iptables --new-chain apache_user
/sbin/iptables --append OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
/sbin/iptables --append OUTPUT -m owner --uid-owner apache -j apache_user
# allow apache user to connec to our smtp server
/sbin/iptables --append apache_user -p tcp --syn -d 192.168.1.100 --dport 25 -j RETURN
# Allow apache user to connec to api server for spam validation
/sbin/iptables --append apache_user -p tcp --syn -d 66.135.58.62 --dport 80 -j RETURN
/sbin/iptables --append apache_user -p tcp --syn -d 66.135.58.61 --dport 80 -j RETURN
/sbin/iptables --append apache_user -p tcp --syn -d 72.233.69.89 --dport 80 -j RETURN
/sbin/iptables --append apache_user -p tcp --syn -d 72.233.69.88 --dport 80 -j RETURN
#########################
## Add more rules here ##
#########################
# No editing below
# Drop everything for apache outgoing connection
/sbin/iptables --append apache_user -j REJECT

 

有关详细信息,请参阅如何在Ubuntu 16.04 LTS服务器上设置UFW防火墙

 

24.观察您的日志和审核

检查apache日志文件。使用grep命令 / egrep的命令:检查PHP的日志文件:看日志文件是一个很好的PHP的安全做法。日志文件可以让您了解针对服务器的攻击,并允许您检查是否存在必要的安全级别。审计服务是为系统审计提供的。将其打开以审核SELinux事件,验证事件,文件修改,帐户修改等。我还建议使用标准的“ Linux系统监视工具 ”来监视您的Web服务器。

# tail -f /var/log/httpd/error_log
# grep 'login.php' /var/log/httpd/error_log
# egrep -i "denied|error|warn" /var/log/httpd/error_log

# tail -f /var/log/httpd/php_scripts_error.log
# grep "...etc/passwd" /var/log/httpd/php_scripts_error.log

 

25.运行每个系统或VM实例的服务

对于大型安装,建议您从不同的服务器运行,数据库,静态和动态内容。

///////////////
/ ISP/Router /
//////////////
  \
   |
   Firewall
     \
      |
     +------------+
     | LB01       |
     +------------+                 +--------------------------+
                  |                 | static.lan.cyberciti.biz |
		  +-----------------+--------------------------+
                                    | phpcgi1.lan.cyberciti.biz|
                                    +--------------------------+
                                    | phpcgi2.lan.cyberciti.biz|
                                    +--------------------------+
                                    | mysql1.lan.cyberciti.biz |
                                    +--------------------------+
                                    | mcache1.lan.cyberciti.biz|
                                    +--------------------------+

 

在单独的服务器或VM实例上运行不同的网络服务。这限制了可能受到危害的其他服务的数量。例如,如果攻击者能够成功利用Apache等软件流,他/她将获得对整个服务器的访问权限,包括在同一服务器上运行的其他服务(如MySQL,电子邮件服务器等)。但是,在上面的例子中,内容如下:

  1. static.lan.cyberciti.biz – 将lighttpd或nginx服务器用于静态资产,例如js / css / images。
  2. phpcgi1.lan.cyberciti.bizphpcgi2.lan.cyberciti.biz – 用于生成动态内容的带有php的Apache web服务器。
  3. mysql1.lan.cyberciti.biz – MySQL数据库服务器。
  4. mcache1.lan.cyberciti.biz – Memcached服务器是MySQL的非常快速的缓存系统。它使用libevent或epoll(Linux运行时)扩展到任意数量的开放连接,并使用非阻塞网络I / O.
  5. LB01 – Apache Web服务器前面的nginx Web和反向代理服务器。来自Internet的发往其中一个Web服务器的所有连接都通过nginx代理服务器进行路由,该服务器可以处理请求本身,也可以将请求全部或部分传递给主Web服务器。LB01提供简单的负载平衡。

 

26.其他工具

从项目页面:

PHPIDS(PHP入侵检测系统)是一个易于使用,结构良好,快速且最先进的安全层,适用于基于PHP的Web应用程序。IDS既不剥离,清理也不过滤任何恶意输入,它只是识别攻击者何时试图破坏您的网站并以您希望的方式做出反应。

您可以使用PHPIDS检测恶意用户,并记录检测到的任何攻击以供日后查看。请注意,我个人没有使用过这个工具。

 

从项目页面:

PhpSecInfo提供了与phpinfo()函数等效的函数,该函数报告有关PHP环境的安全信息,并提供改进建议。它不是安全开发技术的替代品,也不是任何类型的代码或应用程序审计,但可以是多层安全方法中的有用工具。

Linux: 适用于Sys管理员的Linux 25个PHP安全最佳实践, Linux 25 PHP Security Best Practices For Sys Admins
Linux: 适用于Sys管理员的Linux 25个PHP安全最佳实践, Linux 25 PHP Security Best Practices For Sys Admins
图01:关于PHP应用程序的安全信息

请参阅Linux安全加固提示,它可以减少系统上可用的攻击媒介。

 

关于PHP后门的注意事项

你可能会遇到php脚本或所谓的常见后门,如c99,c99madshell,r57等。后门php脚本只不过是一个隐藏的脚本,用于绕过所有身份验证并按需访问您的服务器。攻击者安装它以在尝试保持未被发现时访问您的服务器。通常,PHP(或任何其他CGI脚本)脚本错误地允许包含利用Web浏览器中的漏洞的代码。攻击者可以使用此类利用漏洞来上传后门shell,这可以为他或她提供一些功能,例如:

  • 下载文件
  • 上传文件
  • 安装rootkit
  • 设置垃圾邮件服务器/中继服务器
  • 设置代理服务器以隐藏曲目
  • 控制服务器
  • 控制数据库服务器
  • 窃取所有信息
  • 删除所有信息和数据库
  • 打开TCP / UDP端口等等

 

提示:如何搜索PHP后门?

使用Unix / Linux grep命令搜索c99或r57 shell:

# grep -iR 'c99' /var/www/html/
# grep -iR 'r57' /var/www/html/
# find /var/www/html/ -name \*.php -type f -print0 | xargs -0 grep c99
# grep -RPn "(passthru|shell_exec|system|base64_decode|fopen|fclose|eval)" /var/www/html/

 

结论

您的基于PHP的服务器现在已经适当加固并准备好显示动态网页。但是,漏洞主要是由于没有遵循最佳实践编程规则。您应该为您的Web应用程序安全需求咨询更多资源,尤其是php编程,这超出了sys admin工作的范围。

 

参考文献:

  1. PHP安全 – 来自官方的php项目。
  2. PHP安全指南 – 来自PHP安全联盟项目。
  3. Apache suseexec – Apache项目的文档。
  4. Apache 2.2 – Apache项目的安全提示。
  5. Open Web Application Security Project – 常见的应用程序安全攻击类型。
  6. 25个Nginx安全提示

 

结论:

本页介绍了Linux系统管理员可以应用的各种PHP安全提示。有关更多信息,请参阅以下链接:

  1. 基本PHP安全性kindle版):一本关于专为PHP开发人员编写的Web应用程序安全性的书。它涵盖了30种最常见和最危险的漏洞,以及保护PHP应用程序的简单有效的安全措施。
  2. SQL注入攻击和防御本书涵盖了SQL注入和Web相关攻击。它解释了SQL注入。如何查找,确认和自动化SQL注入发现。它有在代码中查找SQL注入的提示和技巧。您可以使用SQL注入和设计创建漏洞,以避免这些攻击的危险。

有任何其他PHP安全最佳实践?请在下面的评论部分告诉我们。

 

 

 

 

 

本文: Linux: 适用于Sys管理员的Linux 25个PHP安全最佳实践, Linux 25 PHP Security Best Practices For Sys Admins

Leave a Reply