外链论坛

 找回密码
 立即注册
搜索
查看: 48|回复: 0

架构师必须晓得的26项PHP安全实践

[复制链接]

2900

主题

144

回帖

9912万

积分

论坛元老

Rank: 8Rank: 8

积分
99129424
发表于 2024-8-22 14:52:02 | 显示全部楼层 |阅读模式

PHP是一种开源服务器端脚本语言,应用很广泛。Apacheweb服务器供给了这种便利:经过HTTP或HTTPS协议,拜访文件和内容。配置欠妥的服务器端脚本语言会带来各样各样的问题。因此运用php时要小心。以下是25个PHP安全方面的最佳实践。

文件根目录(DocumentRoot):/var/www/html

默认的PHP配置文件:/etc/php.ini

咱们的示例php安全配置文件:/etc/php.d/security.ini(需要运用文本编辑器来创建该文件)

默认的php服务器TCP/UDP端口:无

$ php v

PHP 5.3.3 (cli) (built: Oct 24 2011 08:35:41)

Zend Engine v2.3.0, Copyright (c) 19982010 Zend Technologies

$cat/etc/redhatrelease

Red HatEnterprise Linux Server release 6.1 (Santiago)

基于PHP的应用程序面临区别类型的攻击。我重视到了几种区别类型的攻击:

SQL注入攻击:这是PHP应用程序的数据库层中的安全漏洞。用户输入不正确地过滤时,应用程序就能执行任何SQL语句。你能够配置Apache,编写安全代码(验证和转换所有的用户输入),以避免SQL注入攻击。PHP中的一个平常做法是,在发送SQL查找之前,运用名为mysql_real_escape_string()的函数,转换参数。

添加本地和远程文件:攻击者能够从远程服务器打开文件,执行任何PHP代码。这让她们得以上传文件、删除文件和安装后门。能够配置php以禁用远程文件执行功能。

seasurf攻击(跨站请求伪造,CSRF):这种攻击迫使最后用户针对日前已验证其身份的Web应用程序执行有害的操作。倘若是平常的用户,得逞的CSRF攻击会危及最后用户的数据和操作。但倘若被盯上的最后用户运用管理员帐户,这会危及全部Web应用程序。

想查看一组编译进去的PHP模块,请输入以下命令:

意见运用模块数量减少的PHP,以加强性能和安全。例如说,你能够经过删除(移除)配置文件更名(或移动)一个名为/etc/php.d/sqlite3.ini的文件来禁用sqlite3模块,操作如下:

其他编译进去的模块只能经过重新安装精简配置的PHP来移除。能够从php.net下载php源代码,而后按以下办法编译它,支持GD、fastcgi和mysql:

参阅怎样编译php,并重新安装到类似Unix的操作系统上(http://www.php.net/manual/en/install.unix.php),以认识更加多信息。

要限制PHP信息泄密,就要禁用expose_php。编辑/etc/php.d/secutity.ini,执行以下指令:

upload_tmp_dir="/var/lib/php/session"

#lsZ /var/lib/php/

drwxrwx. root apache system_ubject_r:httpd_var_run_t:s0 session

第17个最佳实践:保持PHP、软件和操作系统版本最新

#yumupdate

#aptgetupdate && aptget upgrade

重视:经常拜访php.net(http://php.net/),寻找源代码安装的最新版本。

保证你以Apache或www等非根用户的身份来运行Apache。所有文件和目录都应该归非根用户(或apache用户)所有,放在/var/www/html下:

/var/www/html/是个子目录,这是其他用户能够修改的文件根目录,由于根目录从来不在那里执行任何文件,不会在那里创建文件。

#chmodR 0444 /var/www/html/

#find/var/www/html/ type d print0 |xargs0 I {} chmod 0445 {}

chown和chmod命令保证:不管在什么状况下,文件根目录或文件根目录里面的文件都能够被Web服务器用户apache写入。请重视:你需要设置对你网站的研发模型最恰当的权限,因此能够按照自己需要,随意调节chown和chmod命令。在这个示例中,Apache服务器以apache用户的身份来运行。这能够在你的httpd.conf文件中用User和Group命令来配置。apache用户需要对文件根目录下的所有内容享有读取拜访权,然则不该该享有写入拜访权。

AllowOverride None

你只要在需要时才应该授予写入拜访权。WordPress等有些Web应用程序及其他应用程序可能需要缓存目录。你能够运用以下命令,授予写入到缓冲目录的拜访权:

### block access to all ###

第19个最佳实践:写守护Apache、PHP和MySQL配置文件

# chattr +i /etc/php.ini

# chattr +i /etc/my.ini

# chattr +i /etc/chattr

# chattr +i /var/www/html/file1.php

第20个最佳实践:运用Linux安全加载模块(如SELinux)

# getsebool a | grep httpd

allow_httpd_anon_write > off

allow_httpd_mod_auth_pam > off

httpd_builtin_scripting > on

httpd_can_network_connect > off

httpd_can_network_connect_db > off

httpd_can_network_relay > off

httpd_dbus_avahi > on

httpd_enable_ftp_server > off

httpd_execmem > off

httpd_setrlimit > off

httpd_tmp_exec > off

httpd_unified > on

httpd_use_gpg > off

要禁用Apache cgi支持,请输入:

参阅红帽SELinux指南(http://docs.redhat.com/docs/enUS/Red_Hat_Enterprise_Linux/6/html/SecurityEnhanced_Linux/index.html),就可认识更加多信息。

ModSecurity是一个守护Web应用程序的开源入侵检测和预防引擎。你在Linux下很容易安装mod_security,安装后就能守护基于Apache和PHP的应用程序,远离XSS及其他各样攻击:

#不准许打开/etc/中的文件

#阻止SQL注入攻击

SecFilter "select.+from"

将PHP及/或Apache放在chroot jail环境中能够尽可能减小潜在的入侵事件导致的破坏,由于它将Web服务器隔离到文件系统的一小部分。你能够运用Apache自带的那种传统的chroot jail环境。不外意见运用FreeBSD jail、运用容器概念的XEN虚拟化、KVM虚拟化或OpenVZ虚拟化。

攻击者会运用wget之类的工具,将文件本地下载到你的Web服务器上。你能够运用iptables阻止apache用户的出站连接。ipt_owner模块会试图比对本地创建的数据包与数据包创建者的各个特点。它仅有在OUTPUT链中才有效。在这个示例中,准许vivek用户运用端口80连接外界(这适用于RHN或centos repo拜访)。

下面是另一个示例,阻止apache用户的所有出站连接(通向咱们自己的smtp服务器的出站连接除外),以及垃圾邮件验证API服务:

# /sbin/iptables append apache_user jreject

检测apache日志文件:

# grep login.php /var/log/httpd/error_log

检测php日志文件:

# grep "...etc/passwd" /var/log/httpd/php_scripts_error.log

第25个最佳实践:根据系统或虚拟机实例来运行服务

区别的服务器或虚拟机实例上运行区别的网络服务。这限制了可能受到危及的其他服务的数量。例如说,倘若攻击者成功地利用了Apache flow等软件的漏洞,就能拜访全部服务器,包含在同一台服务器上运行的其他服务(例如MySQL和电子邮件服务等)。然则以上例子中,按以下方式供给区别内容:

phpcgi1.lan.cyberciti.biz和phpcgi2.lan.cyberciti.biz:Apache web服务器,php用于生成动态内容。

mcache1.lan.cyberciti.biz:Memcached服务器是用于MySQL的速度非常快的缓存系统。它运用libevent或epoll(Linux运行时环境),能够扩展至任何数量的打开的连接,并运用非阻塞的网络输入/输出。

第26个最佳实践:其他工具

PHPIDS(PHP入侵检测系统)是面向基于PHP的web应用程序的安全层,拥有运用简单、结构良好、运行快捷、技术先进等优点。IDS没法清除、净化或过滤任何恶意输入内容,仅仅识别攻击者何时企图闯入你的网站,安全根据期盼它采取的办法来采取相应办法

来自PhpSecInfo项目网页(http://phpsec.org/projects/phpsecinfo/index.html):

参阅Linux安全加固要点(http://www.cyberciti.biz/tips/linuxsecurity.html),减少系统面临的攻击途径数量。

你可能碰到过PHP脚本或所说平常后门,例如c99、c99madshell和r57等。后门php脚本其实便是一段隐匿的脚本,用于绕开所有的验证机制,按照需要拜访你的服务器。攻击者安装它的目的是,拜访你的服务器,同期又企图不被发掘。误用的PHP脚本(或其他任何CGI脚本)一般准许添加钻Web浏览器中安全漏洞空子的代码。攻击者能够运用这种被钻空子的安全漏洞,上传后门外壳程序,从而让攻击者能够得到许多功能,例如

上传文件

设置垃圾邮件服务器/中继服务器

掌控服务器

窃取所有信息

打开TCP/UDP端口及更加多端口

能够运用Unix/Linux grep命令,搜索c99或r57外壳:

# grep iR r57 /var/www/html/

# grep RPn "(passthru|shell_exec|system|base64_decode|fopen|fclose|eval)" /var/www/html/

Thanksgiving day

感恩于上苍的赐予

感恩父母的养育,

感恩伴侣帮忙

感恩大自然的恩赐,

感恩花草鱼宠,

感恩困难逆境。

算了,

还是先,

吃鸡

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

站点统计|Archiver|手机版|小黑屋|外链论坛 ( 非经营性网站 )|网站地图

GMT+8, 2024-11-6 11:03 , Processed in 0.083050 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.