PHP 一些安全配置建议

| 选择喜欢的代码风格  

PHP 的配置文件


当你在为你的应用程序创建配置文件时,最好的选择时参照以下的做法

  • 推荐你将你的配置信息存储在无法被直接读取和上传的位置上。
  • 如果你一定要存储配置文件在根目录下,那么请使用 .php 的扩展名来进行命名。这将可以确保即使脚本被直接访问到,它也不会被以明文的形式输出出来。
  • 配置文件中的信息需要被针对性的保护起来,对其进行加密或者设置访问权限。
  • 建议不要把敏感信息如密码或者 API 令牌放到版本控制器中。

PHP 注册全局变量


注意: 自 PHP 5.4.0 开始,register_globals 选项已经被移除并不再使用。这是在提醒你如果你正在升级旧的应用程序的话,你需要注意这一点。

register_globals 选项被开启时,它会使许多类型的变量(包括 $_POST, $_GET$_REQUEST)被注册为全局变量。这将很容易使你的程序无法有效地判断数据的来源并导致安全问题。

例如:$_GET['foo'] 可以通过 $foo 被访问到,也就是可以对未声明的变量进行覆盖。 如果你使用低于 5.4.0 版本的 PHP 的话,请 确保 register_globals 是被设为 off 的。

PHP 全局变量扩展阅读


错误报告


错误日志对于发现程序中的错误是非常有帮助的,但是有些时候它也会将应用程序的结构暴露给外部。为了有效的保护你的应用程序不受到由此而引发的问题。你需要将在你的服务器上使用开发和生产(线上)两套不同的配置。

开发环境


为了在 开发 环境中显示所有可能的错误,将你的 php.ini 进行如下配置:

display_errors = On
display_startup_errors = On
error_reporting = -1
log_errors = On

将值设为 -1 将会显示出所有的错误,甚至包括在未来的 PHP 版本中新增加的类型和参数。 和 PHP 5.4 起开始使用的 E_ALL 是相同的。- php.net

E_STRICT 类型的错误是在 5.3.0 中被引入的,并没有被包含在 E_ALL 中。然而从 5.4.0 开始,它被包含在了 E_ALL 中。这意味着什么?这表示如果你想要在 5.3 中显示所有的错误信息,你需要使用 -1 或者 E_ALL | E_STRICT。

不同 PHP 版本下开启全部错误显示


  • < 5.3 -1 或 E_ALL
  • 5.3 -1 或 E_ALL | E_STRICT
  • > 5.3 -1 或 E_ALL

生产环境


为了在 生产 环境中隐藏错误显示,将你的 php.ini 进行如下配置:

display_errors = Off
display_startup_errors = Off
error_reporting = E_ALL
log_errors = On

当在生产环境中使用这个配置时,错误信息依旧会被照常存储在 web 服务器的错误日志中,唯一不同的是将不再显示给用户。更多关于设置的信息,请参考 PHP 手册:



发表评论