`

[转]十大PHP最佳安全实践

    博客分类:
  • PHP
阅读更多
PHP被广泛用于各种Web开发。而当服务器端脚本配置错误时会出现各种问题。现今,大部分Web服务器是基于Linux环境下运行(比如:Ubuntu,Debian等)。本文例举了十大PHP最佳安全实践方式,能够让您轻松、安全配置PHP。



PHP安全性设置提示:

引用
DocumentRoot: /var/www/
Default Web server: Apache

Default PHP configuration file: /etc/php.ini

Default PHP extensions config directory: /etc/php.d/

Our sample php security config file: /etc/php.d/security.ini (you need to create this file using a text editor)

Operating systems: Ubuntu (the instructions should work with any other Linux distributions such as RHEL / CentOS / Fedora or other Unix like operating systems such as OpenBSD/FreeBSD/HP-UX).


1. 减少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

删除一个模块,并执行此命令。例如:删除模块sqlite3

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

或者

引用
# mv /etc/php.d/sqlite3.ini /etc/php.d/sqlite3.disableRestrict

2. 使PHP信息泄露最小化

在默认PHP时在HTTP抬头处会生成一条线介于每个响应中,(比如X-Powered-By: PHP/5.2.10)。而这个在系统信息中为攻击者创建了一个非常有价值的信息。

HTTP示例:
引用

HTTP/1.1 200 OK 
X-Powered-By: PHP/5.2.10 
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 

...
因此,我们强烈建议,禁止PHP信息泄露,想要要禁止它,我们要编辑/etc/php.d/secutity.ini,并设置以下指令:

引用
expose_php=Off

3. 使PHP加载模块最小化

在默认情况下,RHEL加载的所有模块可以在/etc/php.d/目录中找到。要禁用或启用一个特定的模块,只需要在配置文件/etc/php.d/目录中中注释下模块名称。而为了优化PHP性能和安全性,当你的应用程序需要时,我们强烈建议建议启用扩展功能。举个例子:当禁用GD扩展时,键入以下命令:

引用
# cd /etc/php.d/ 

# mv gd.{ini,disable} 

# /etc/init.d/apache2 restart

为了扩展PGP GD模块,然后键入以下命令:

引用
# mv gd.{disable,ini} 

# /sbin/service httpd restart

4. 记录PHP错误信息

为了提高系统和Web应用程序的安全,PHP错误信息不能被暴露出。要做到这一点,需要编辑/etc/php.d/security.ini 文件,并设置以下指令:

引用
display_errors=Off

为了便于开发者Bug修复,所有PHP的错误信息都应该记录在日志中。

引用
log_errors=On

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


5. 禁用远程执行代码

如果远程执行代码,允许PHP代码从远程检索数据功能,如FTP或Web通过PHP来执行构建功能。比如:file_get_contents()。

很多程序员使用这些功能,从远程通过FTP或是HTTP协议而获得数据。然而,此法在基于PHP应用程序中会造成一个很大的漏洞。由于大部分程序员在传递用户提供的数据时没有做到适当的过滤功能,打开安全漏洞并且创建了代码时注入了漏洞。要解决此问题,需要禁用_url_fopen in /etc/php.d/security.ini,并设置以下命令:

引用
allow_url_fopen=Off

除了这个,我还建议禁用_url_include以提高系统的安全性。

引用
allow_url_include=Off

6. 禁用PHP中的危险函数

PHP中有很多危险的内置功能,如果使用不当,它可能使你的系统崩溃。你可以创建一个PHP内置功能列表通过编辑/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

7. 资源控制

为了提高系统的稳定性,强烈建议设置每个脚本解析请求数据所花费的时间和脚本可能消耗的最大内存量。正确的配置这些参数可以防止PHP任何脚本消耗太多的资源或是内存,从而避免系统不安全或降低安全系数。

引用
# set in seconds 

max_execution_time = 30

max_input_time = 30

memory_limit = 40M


8. 限制PHP访问文件系统

该open_basedir指令指定的目录是允许PHP访问使用fopen()等功能。如果任何脚本试图访问超出open_basdir定义的路径文件,PHP将拒绝打开。值得注意的是,你不能使用一个符号链接作为一种变通方法。
引用

; 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/"
; ------------------------------------

9.限制文件/目录访问

进行适当的安全设置:确保Apache作为非root用户运行,比如www-data或www。对于文件和目录在基于/var/www/下同样属于非root用户。想要更改所有者,执行以下命令:
引用

# chown -R apache:apache /var/www/

10.编译保护Apache,PHP和MySQL的配置文件

使用charrt命令编译保护配置文件
引用

# 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/

使用charrt命令可以编译保护PHP文件或者是文件中的/var/www/html的目录:

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

# chattr +i /var/www/html/

(注:本文由夏梦竹编译,转载请注明出处。)

中文出处:http://sd.csdn.net/a/20120130/311203.html
英文出处:http://www.ansoncheung.tk/articles/top-10-php-best-security-practices-sys-admins
分享到:
评论

相关推荐

    十大PHP最佳安全实践

    ### 十大PHP最佳安全实践 在Web开发领域,PHP是一种广泛使用的服务器端脚本语言。随着互联网技术的发展,网络安全问题日益突出,保障网站的安全变得至关重要。为了帮助开发者更好地理解和应用安全措施,本文将详细...

    PHP经典十大案例

    理解缓存的工作原理和最佳实践,可以显著提升网站响应速度。 10. **表单验证与Ajax异步提交**: 结合JavaScript和jQuery,实现无刷新的表单验证和数据提交。这部分会涉及到AJAX请求、JSON数据交换、服务器端的响应...

    php 开发十大项目

    同时,注意代码的可维护性和安全性,遵循最佳实践,如输入验证、SQL注入防护和CSRF防止。 通过以上十个项目的实战,开发者可以系统地掌握PHP开发的核心技能,理解Web应用的工作原理,并逐步成长为一名精通PHP的全栈...

    PHP+加密+代码安全+php_screw_plus

    在实际开发中,还需要结合其他安全实践: 1. **输入验证**:对用户提交的数据进行严格的过滤和验证,防止SQL注入、跨站脚本(XSS)等攻击。 2. **密码哈希**:存储用户密码时应使用强哈希算法(如bcrypt、scrypt或...

    PHP代码审计资料整理

    - 设立审计标准:依据最佳实践和安全规范建立代码审计指南。 - 使用自动化工具:利用静态代码分析工具,如PHPMD、PHPStan、PHP-CS-Fixer等,自动检测潜在问题。 - 手动审查:对于工具无法检测到的问题,需要人工进行...

    PHP大神的十大优良习惯

    【PHP大神的十大优良习惯】是每个...以上十大习惯是PHP开发者进阶为大神的必经之路,它们涵盖了学习、编码、设计、安全、效率等多个方面,通过不断实践和改进,开发者能够编写出更高效、更安全、更易于维护的PHP代码。

    2021-2022年收藏的精品资料软件工程师让PHP开发者事半功倍的技巧.docx

    最佳实践是在config.php文件中存储全局变量,如数据库连接信息,以保持代码整洁。 6. **限制直接访问**:确保只有通过index.php才能访问其他页面,可以防止未经授权的直接访问。通过定义常量并在其他页面检查,可以...

    国外十大最流行的PHP框架排名

    国外十大最流行的PHP框架排名涉及到了当前流行的PHP MVC框架,以下是一些重点知识点的详细说明: 1. **Yii框架** - Yii是一个高性能的PHP框架,适合开发大规模的Web应用。 - 它使用严格的面向对象编程(OOP)原则...

    让PHP开发者事半功倍的十大技巧小结

    【PHP开发十大技巧详解】 1. **创建Index页面的高效方式**:在PHP开发中,通常我们会为每个网站创建一个index.php作为入口页面。...在实践中,不断学习和适应这些最佳实践,将使你成为更出色的PHP程序员。

    2010 OWASP TOP 10 security issues

    《2010 OWASP TOP 10 安全风险》是 OWASP(开放式网络应用安全项目)在2010年发布的关于网络应用程序最严重的十个...开发者、管理员和安全专业人员应当遵循最佳实践,定期评估并更新安全策略,以应对不断演变的威胁。

    Mysql注入.pdf

    为了防止MySQL注入,开发者应遵循以下最佳实践: 1. **参数化查询**:使用预编译的SQL语句,如PHP的PDO或MySQLi的预处理语句,确保用户输入被作为数据而不是代码处理。 2. **输入验证**:对用户提供的数据进行严格...

    www-chapter-kerala:OWASP 喀拉拉邦分会的 OWASP 基金会 Web 存储库

    1. **Web安全最佳实践**:OWASP十大 web 应用程序安全风险,如注入漏洞、身份验证和会话管理问题、跨站脚本攻击(XSS)、跨站请求伪造(CSRF)、不安全的直接对象引用等。 2. **HTML与安全**:如何编写安全的HTML,...

Global site tag (gtag.js) - Google Analytics