当前位置 主页 > 服务器问题 > Linux/apache问题 >
PHP是一种开源服务器端脚本语言,应用很广泛。Apache web服务器提供了这种便利:通过HTTP或HTTPS协议,访问文件和内容。配置不当的服务器端脚本语言会带来各种各样的问题。所以,使用php时要小心。以下是Linux下PHP+Apache的26个PHP程序员必知的安全方面的设置
为PHP安全提示而提供的示例环境
文件根目录(DocumentRoot):/var/www/html
默认的Web服务器:Apache(可以使用Lighttpd或Nginx来取代Apache)
默认的PHP配置文件:/etc/php.ini
默认的PHP加载模块配置目录:/etc/php.d/
我们的示例php安全配置文件:/etc/php.d/security.ini(需要使用文本编辑器来创建该文件)
操作系统:RHEL/CentOS/FedoraLinux(相关指令应该与Debian/Ubuntu等其他任何Linux发行版或者OpenBSD/FreeBSD/HP-UX等其他类似Unix的操作系统兼容)。
默认的php服务器TCP/UDP端口:无
为本文所列的大多数操作编写代码时,假定它们将由运行bash外壳程序或其他任何现代外壳程序的根用户来执行:
$ 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
出于演示的用途,我会使用以下操作系统:
$cat/etc/redhat-release
示例输出:
Red HatEnterprise Linux Server release 6.1 (Santiago)
基于PHP的应用程序面临不同类型的攻击。我注意到了几种不同类型的攻击:
XSS:跨站脚本是Web PHP应用程序中的一种安全漏洞,攻击者可以利用该漏洞来窃取用户的信息。你可以配置Apache,编写更安全的PHP脚本(验证所有的用户输入),以避免XSS攻击。
SQL注入攻击:这是PHP应用程序的数据库层中的安全漏洞。用户输入不正确地过滤时,应用程序就能执行任何SQL语句。你可以配置Apache,编写安全代码(验证和转换所有的用户输入),以避免SQL注入攻击。PHP中的一个常见做法是,在发送SQL查询之前,使用名为mysql_real_escape_string()的函数,转换参数。
文件上传:它让访客可以将文件放在(将文件上传到)你的服务器上。这会带来众多安全问题,比如删除你的文件、删除数据库、获取用户详细资料,不一而足。你可以使用php来禁用文件上传,或编写安全代码(比如验证用户输入,只允许PNG或GIF等图像文件类型)。
添加本地和远程文件:攻击者可以从远程服务器打开文件,执行任何PHP代码。这让他们得以上传文件、删除文件和安装后门。可以配置php以禁用远程文件执行功能。
eval() :将字符串作为PHP代码来进行评估。攻击者常常利用该函数来隐藏其在服务器本身上面的代码和工具。你可以配置PHP,禁用eval()。
sea-surf攻击(跨站请求伪造,CSRF):这种攻击迫使最终用户针对目前已验证其身份的Web应用程序执行有害的操作。如果是平常的用户,得逞的CSRF攻击会危及最终用户的数据和操作。但如果被盯上的最终用户使用管理员帐户,这会危及整个Web应用程序。
想查看一组编译进去的PHP模块,请输入以下命令:
# php -m
我建议你使用模块数量减少的PHP,以增强性能和安全。比如说,你可以通过删除(移除)配置文件或者更名(或移动)一个名为/etc/php.d/sqlite3.ini的文件来禁用sqlite3模块,操作如下:
#rm/etc/php.d/sqlite3.ini
或者
#mv/etc/php.d/sqlite3.ini /etc/php.d/sqlite3.disable