如何强化PHP以提高安全性

PHP在许多站点中被广泛使用 & 应用程序,但应加强安全性。以下是一些用于保护您的PHP配置文件的高级技巧.


如何强化PHP

PHP是迄今为止使用的最流行的Web后端编程语言。迄今为止, 80%的网站带有后端 实现PHP。 WordPress,Joomla和Drupal均受其支持。不幸的是,PHP已成为黑客尝试的流行目标,因此保护其配置至关重要。请按照以下简单步骤来加强您的PHP配置并帮助保护其免受黑客攻击.

找到PHP配置文件

PHP的配置文件的名称是php.ini,您需要对其进行编辑。文件的位置因您的托管公司和服务器类型而异.

使用共享主机进行编辑

如果不确定php.ini文件的位置,请与您的托管服务提供商联系。某些提供程序要求您将PHP设置放在Web根目录的“ .htaccess”文件中。在这种情况下,应该以“ php_value名称值”的格式每行添加一个PHP设置。请记住,您的托管服务提供商可能会阻止某些设置被修改.

使用VPS或专用服务器进行编辑

Web Host Manager(WHM)通过提供简单的用户界面来简化编辑PHP配置文件的过程。只需在WHM中找到“服务配置”部分,然后单击“ PHP配置编辑器”。在出现的页面上,选择“高级模式”.

PHP配置编辑器

如果您未使用WHM之类的控制面板,则需要直接打开并编辑php.ini。 php.ini的位置将根据您服务器的操作系统而有所不同。许多Linux系统将文件放在“ /etc/php.ini”路径中。您可以通过命令行确认其位置。首先通过SSH登录服务器(请与您的主机提供商联系以获取说明)。连接后,输入命令“ php –ini”,然后按Enter。搜索返回的标题为“ Loaded Configuration File”的行,并注意php.ini文件路径.

您可以使用在命令行中运行的文本编辑器(例如Linux的“ nano”)打开和编辑php.ini。只需键入“ nano /path/to/php.ini”,然后按Enter.
适用于Linux的Nano

php.ini结构

在php.ini中,每个设置都以“ settingname = settingvalue”的格式放置在自己的行中。以分号开头的任何行都是注释,因此请勿更新任何这些行.

编辑配置设置

以下是应查看和更新​​以提高安全性的设置列表。这些设置根据用途分为以下几部分.

第1节:远程连接

allow_url_fopen = 0
allow_url_include = 0

不允许fopen包装器打开远程URL。远程内容不能总是被信任;禁用这些选项可确保fopen包装器只能加载本地内容.

第2节:运行时设置

max_input_time = 30
max_execution_time = 30

限制允许处理输入的最大时间,以及PHP脚本可以运行的最大时间。在此,两个设置都设置为30秒限制。这样可以确保在脚本被破坏的情况下,它不会读取输入内容或长时间运行。编写良好的脚本运行所需的时间不应超过30秒.

memory_limit = 8M

确保PHP脚本永远不会占用超过8MB的内存。万一脚本遭到破坏,此设置将有效地限制脚本可以利用的内存量.

register_globals =关

禁用此设置将有效地禁止将请求数据自动存储为变量。注册全局变量引起了一些问题。一个例子是环境变量可以轻松修改。为避免这些问题,请确保已禁用此设置.

Exposure_php = 0

默认情况下,PHP的存在及其版本号作为HTTP响应的一部分公开。由于这提供了对服务器的不必要的了解,因此建议将其关闭.

cgi.force_redirect = 1

确保只能通过Web服务器重定向规则运行PHP。这样可以防止直接调用PHP,从而提高了安全性.

第3节:输入数据限制

post_max_size = 256K
max_input_vars = 100

黑客可以尝试通过向其发送大量数据来淹没Web应用程序资源,从而降低传输速度和可用的服务器资源。可以通过减少POST数据的最大大小以及限制请求数据的数量来最大程度地减少此类攻击的影响。请注意,“ post_max_size”也会影响文件上传的最大大小;如果您的应用程序具有文件上传功能,请确保此设置的值至少与“ upload_max_filesize”一样大.

第4节:错误处理

display_errors = 0
display_startup_errors = 0

错误消息永远不要显示给最终用户,因为错误消息通常包含有关应用程序代码和服务器的详细信息。该信息可能会被用于协助黑客。而是,将错误消息记录到服务器上的安全文件中.

log_errors = 1
error_log = / home / johndoe / error_log

应该记录PHP错误,以便调试应用程序代码以及调查潜在的漏洞。如果您正在使用文件管理器(例如cPanel附带的文件管理器),则错误日志的方便且安全的位置直接位于Web根目录之外.

第5节:限制文件访问

open_basedir = "/ home / johndoe / public_html"

Open_basedir确保PHP仅可包含所列目录中的文件。通过防止PHP脚本意外访问白名单路径之外的安全文件,可以提高安全性。请注意,您必须添加PHP需要访问白名单的每个目录,包括临时文件上传和会话目录(请参见下文)。您可以通过在每个目录之间放置一个冒号来将多个目录添加到列表中。例如:

open_basedir = "/ home / johndoe / public_html:/ var / lib / php / tmp_upload:/ var / lib / php / session"

第6节:文件上传

file_uploads = 0

如果您的应用程序不包含用于从用户的计算机上载文件的功能,则建议完全禁用此PHP功能。这有助于防止黑客上传脚本,然后将脚本注入到应用程序中.

file_uploads = 1
upload_max_filesize = 1M

如果您的应用程序需要文件上传功能,则将“ upload_max_filesize”保持为尽可能小的值.

upload_tmp_dir = / var / lib / php / tmp_upload

默认情况下,临时文件上载放在所有系统用户均可写的目录中。该位置应切换到更安全的目录。确保新目录位置不在Web根目录内。如果您使用的是文件管理器(例如cPanel附带的文件管理器),那么用于创建上传目录的简便且安全的位置就位于网络根目录的外部(即,与public_html所在的目录相同)。另一个安全的位置是在“ / var / lib”中的PHP目录中创建目录。该路径取决于操作系统,即“ / var / lib / php”或“ / var / lib / php5”。如果有有效的open_basedir限制,请确保将临时上传目录包含在open_basedir白名单中.

第7节:会话安全

会话用于保留多个针对单个用户的请求中的信息。实际信息存储在服务器上,包含会话ID的cookie(或不太安全的HTTP请求数据)用于验证用户。会话用于将身份验证包括到Web应用程序中,这是其安全性如此重要的原因之一。可以更新以下设置,以帮助减少会话拦截的风险.

session.use_strict_mode = 1

如果浏览器发送先前未初始化的ID,则创建一个新的会话ID。这有助于防止称为会话固定的攻击.

session.cookie_httponly = 1

允许只能从HTTP请求访问会话cookie,而不能从其他来源(例如JavaScript)访问会话cookie。这有助于防止称为XSS攻击的攻击.

session.use_cookies = 1
session.use_only_cookies = 1
session.use_trans_sid = 0

将会话ID保存在Cookie中,而不是将其作为URL参数发送。通过防止会话固定攻击来帮助确保用户的会话安全.

session.name = custom_session_id

Cookies以键值格式存储其信息。建议更新存储会话ID的cookie的默认键名。使用自定义值更新“ custom_session_id”.

session.cookie_secure = 1

如果您的Web应用程序通过HTTPS协议运行以确保安全,请启用此设置以强制仅通过安全连接访问包含会话ID的cookie。.

session.referer_check = example.com

检查请求来自何处,以确定是否允许访问会话数据。将此设置值更新为您的应用程序的域名,以帮助防止从外部源加载脚本时访问会话信息.

session.save_path = "/ var / lib / php / session"

默认会话文件保存路径可由所有系统用户写入。该位置应切换到更安全的目录。确保新目录位置不在Web根目录内。如果您使用的是文件管理器(例如cPanel附带的文件管理器),那么创建会话目录的简单位置就位于Web根目录的外部(即,位于public_html所在的目录)。另一个安全的位置是在“ / var / lib”中的PHP目录中创建目录。该路径取决于操作系统,即“ / var / lib / php”或“ / var / lib / php5”。如果有有效的open_basedir限制,请确保会话保存路径包含在open_basedir白名单中.

session.hash_function = sha512

与默认的MD5哈希函数相比,SHA-512是一种用于创建会话ID的更安全的哈希算法。 PHP 5.3+中提供了此算法。如果运行的是PHP的较低版本,请改用SHA1哈希算法。为此,设置“ session.hash_function = 1”.

session.bug_compat_42 = 0
session.bug_compat_warn = 0

禁用这些设置将确保无法全局初始化会话变量,从而提高了安全性.

禁用漏洞功能

disable_functions = ini_set,php_uname,getmyuid,getmypid,passthru,泄漏,监听,磁盘可用空间,tmpfile,链接,ignore_user_abord,shell_exec,dl,set_time_limit,exec,系统,highlight_file,源,show_source,fpaththru,虚拟,posix_ctermid,posix_ctermid,posix posix_geteuid,posix_getgid,posix_getgrgid,posix_getgrnam,posix_getgroups,posix_getlogin,posix_getpgid,posix_getpgrp,posix_getpid,POSIX,_getppid,posix_getpwnam,posix_getpwuid,posix_getrlimit,posix_getsid,posix_getuid,posix_isatty,posix_kill,posix_mkfifo,posix_setegid,posix_seteuid,posix_setgid,posix_setpgid,posix_setsid,posix_setuid, posix_times,posix_ttyname,posix_uname,proc_open,proc_close,proc_get_status,proc_nice,proc_terminate,phpinfo,popen,curl_exec,curl_multi_exec,parse_ini_file,allow_url_fopen,allow_url_include,pcntl_exec,chgrpl,chmod,chownrpch,chmod,

如果使用不当,一些PHP函数可以为Web应用程序破解提供门户。例如,向许多功能发送未经验证的输入会导致安全问题。完全禁用这些功能是解决该问题的简单有效的方法。但是,如果您的应用程序需要列出的任何功能,请从列表中将其删除。.

肥皂缓存

soap.wsdl_cache_dir = / var / lib / php / soap_cache

与文件上载和会话数据一样,SOAP缓存数据不应存储在默认的临时目录中。将此设置为更安全的目录.

重新启动PHP

对php.ini文件进行更改后,将需要重新启动Web服务器。 WHM提供了一个按钮,可在编辑文件后重新启动服务器。如果未使用WHM等控制面板,则需要通过命令行重新启动服务器。对于Apache,输入命令“ sudo apachectl graceful”,然后按Enter.

结论

通过更新这些设置,您的PHP环境可以进一步防止黑客入侵。保护PHP环境免受黑客攻击是保护您的企业声誉的重要一步。但是请记住,即使使用强化的PHP配置,编码不佳的应用程序也始终是黑客的门户。首先要保持配置坚固,然后从那里开始编写安全的应用程序代码.

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me
    Like this post? Please share to your friends:
    Adblock
    detector
    map