原标题:PHP项目安全:PHP的安装与升级

PHP脚本通过PHP解析器解析进行执行,PHP解析器本身会存在安全漏洞,合理地安装使用PHP解析器可以提高系统的安全性。

当PHP各版本中发现存在安全漏洞时,PHP官方会及时发布安全补丁来修复漏洞,应该时刻关注PHP官方发布的最新发版。表1所列是各个PHP版本的CVE漏洞数量。在每个版本中官方都会及时发布新版来修复安全漏洞,要对PHP及时升级,降低系统的安全隐患。

表1 PHP各版本的CVE漏洞数量

在PHP 4、PHP 5这些历史版本中由于支持不安全的MySQL函数,如果研发人员不重视安全问题,任意拼接字符串,那么会经常性地引起SQL注入漏洞。

在PHP 7中,有几个比较重大的改动,这些改动对于提高应用安全性有很大帮助。

1)PHP 7中移除了一些不安全的函数。如移除了对于MySQL函数的支持,MySQL函数在许多情况下是不安全的,经常由于使用不当而造成SQL注入;移除了对ereg函数的支持,ereg函数存在%00截断漏洞,导致了正则过滤被绕过。

2)在PHP 7中,password_hash函数的盐(salt)选项被弃用,因为研发人员会生成自己的salt,通常自己生成的salt是不安全的。该功能本身提供salt的加密安全,函数内部默认带有salt能力,无须研发人员提供salt。

3)capture_session_meta函数中的SSL上下文选项被弃用,PHP 7中通过stream_get_meta_data函数使用SSL元数据。

4)PHP 7中允许在代码中增加标量类型说明,有效地防止了因数据转换造成的安全隐患。PHP 7中标量类型声明有如下两种模式。

强制模式:强制模式是默认模式,不需要指定。强制模式代码示例如下。

functionsum(int …$ints) {

returnarray_sum($ints);

}

print(sum(6,'6',6.1));

上述强制模式执行代码输出“18”。

严格模式:严格模式必须明确标明。给每一个PHP文件,添加一个新的可选指令“declare(strict_types=1);”可让同一个PHP文件内的全部函数调用和语句返回,都有一个“严格约束”的标量类型声明检查,且必须按指定变量类型来进行赋值,使变量传递变得更加安全,否则PHP会抛出错误异常。下面代码是严格模式的示例。

declare(strict_types=1);

functionsum(int …$ints) {

returnarray_sum($ints);

}

print(sum(6,'6',6.1));

图1所示是严格模式的执行输出结果。由于传入参数与定义参数的数据类型不一致,因此PHP抛出了异常。

图1 PHP 7标量的严格模式

5)在PHP 7版本中使用了更安全的随机数生成器,添加了更好的随机数random_int、random_bytes,并用其代替PHP 5的mt_rand。代码示例如下。

var_dump(random_int(100,999)); // 输出int(521)

var_dump(random_int(-1000,0)); // 输出int(-660)

random_bytes函数返回string类型,并接收一个int类型为参数,该参数规定了所返回字符串的字节长度。代码示例如下。

$bytes=random_bytes(5); // 指定5字节长度

var_dump(bin2hex($bytes)); // 输出string(10) "a435b73450"

1、尽量减少非必要模块加载

加载尽量少的模块在优化PHP性能的同时增加了安全性,使用php -m命令可以查看当前PHP加载的模块。

php-m

[PHP Modules]

bcmath

bz2

Core

Redis

[Zend Modules]

Suhosin

例如,如果用不到Redis或者ImageMagick,则完全可以将其禁用,以避免不必要的漏洞引起的安全问题。如下在配置文件中添加分号(;)将所在模块行注释化,PHP在启动后就不会加载Redis和ImageMagick模块。

#cat /etc/php.ini

; extension=php_redis.so # 禁用Redis扩展

; extension=imageick.so # 禁用Imageick扩展

2、使用第三方安全扩展

Suhosin是PHP项目的一个保护系统,它的设计初衷是为了保护服务器和用户抵御PHP项目和PHP核心中已知或者未知的缺陷。

Suhosin有两个独立的部分,可以分开使用或者联合使用。第一部分是一个用于PHP核心的补丁,它能抵御缓冲区溢出或者格式化串的弱点;第二部分是一个强大的PHP扩展,它包含其他所有的保护措施。更多的信息可以到Suhosin的官方网站进行学习。

Taint是一个用于检测xss/sqli/shell注入的PHP扩展模块,用来监测来自GET、POST、Cookie中的数据。这些从客户端接收到的数据如果没有经过过滤或转义处理而被服务端直接使用,Taint会抛出安全提示信息来警示研发人员。返回搜狐,查看更多

责任编辑:

php项目升级包制作,PHP项目安全:PHP的安装与升级相关推荐

  1. C#实现自动更新之(程序升级包制作)

    前言 做客户端(C/S)系统开发的人都会遇到软件的自动更新:系统发布后怎样自动的更新程序? ①更新程序与任何宿主程序是完全独立的:只要在主程序里面启动更新程序就行了: ②更新程序也是一个可执行文件,在 ...

  2. 为利用 QT 制作的项目设置图标

    为利用 QT 制作的项目设置图标 在 .pro 文件末尾添加语句 RC_ICONS = logo.ico logo.ico 即为图标文件的名称

  3. asp.net core web 解决方案多项目模板制作打包总结

    一.文件夹\项目结构 1.1.文件夹 net6.0:针对.net 6.0 项目模板 net6.0pack:针对net6.0打包 1.2.项目结构 Web\WebApi多项目.各层项目.单元测试项目 目 ...

  4. c++项目,制作GIF动态图

    项目目录 项目背景 项目简介 项目可行性分析 第三方库以及项目工具介绍 项目总体设计流程图 项目详细设计 项目测试 项目结果 项目源代码 项目背景 在很多时候,人们所说的一句话在不同的的环境和状态下回 ...

  5. unity 使用姿态传感器制作互动项目--太极平衡桩

    使用深圳维特智能WT931姿态传感器来制作互动项目,就是一个人站在平衡桩上,同步控制场景中的迷宫模型旋转,从而让小球进入洞里面.画面大概是这样的. 需要使用WT931姿态传感器和三合一模块,以及长一点 ...

  6. 网页设计与制作教程 项目1

    网页设计与制作教程 项目1 Hello 大家好,我是白熊就是白熊 欢迎各位有缘人来看我的文章(●'◡'●) 今天跟大家分享一下老师教我们在课堂上敲写的一些项目,今天就先分享一下项目1(适用于初学者), ...

  7. VisualStudio2022制作多项目模板及Vsix插件

    一.安装工作负载 在vs2022上安装"visual studio扩展开发 "工作负载 二.制作多项目模板 导出项目模板这个我就不再多说了(项目→导出模板→选择项目模板,选择要导出 ...

  8. 【Inno Setup】安装包制作,项目打包方案

    系列文章 MySQL安装教程(详细) 本文链接:https://blog.csdn.net/youcheng_ge/article/details/126037520 MySQL卸载教程(详细) 本文 ...

  9. VS2005 ASP.NET2.0安装项目的制作(包括数据库创建、站点创建、IIS属性修改、Web.Config文件修改)

    站点: 如果新建默认的Web安装项目,那它将创建的默认网站下的一个虚拟应用程序目录而不是一个新的站点.故我们只有创建新的安装项目,而不是Web安装项目.然后通过安装类进行自定义操作,创建新站如下图: ...

  10. 简历制作(项目经验)

    Java就是用来做项目的!Java的主要应用领域就是企业级的项目开发!要想从事企业级的项目开发,你必须掌握如下要点: 1.掌握项目开发的基本步骤 2.具备极强的面向对象的分析与设计技巧 3.掌握用例驱 ...

最新文章

  1. AI4U:以用户友好为目标,智源重大研究方向“机器学习”学者候选人发布
  2. 【Android】Java回调原理并结合Android源码进行理解
  3. Antdv日期选择组件国际化问题
  4. ajaxbootstrap
  5. python数据分析天气预报论文_用python+sklearn(机器学习)实现天气预报数据 模型和使用...
  6. 构建前端自动化工作流环境
  7. ORACLE坏块检查
  8. ios底部栏设计规范_2016年全新Apple iOS设计规范指南!
  9. java接口的关键字_java关键字-interface
  10. Uipath打包流程为.nupkg文件
  11. 青云决最新服务器,青云决合区表
  12. jmeter做秒杀活动测试
  13. 论文代码复现 | 无人机与卡车联合配送(Python+Gurobi)(The flying sidekick traveling salesman problem)
  14. Unknown integral data type for ids : java.lang.String; nested exception is org.hibernate.id.Identifi
  15. 回炉篇5—数据结构(4)之冒泡、选择、插入排序算法
  16. java课程任务_修真院java后端工程师学习课程--任务1(day three)
  17. 自然辩证法课后思考题
  18. python七段电子管
  19. STM32 I2C通信操作24C02写数据、读数据
  20. 圆圆的球像什么_圆圆的月亮像什么的比喻句

热门文章

  1. 阶段5 3.微服务项目【学成在线】_day03 CMS页面管理开发_16-异常处理-可预知异常处理-自定义异常类型和抛出类...
  2. mac下git安装与使用
  3. Qt不规则窗体和按键
  4. 身份证识别+银行卡识别:开启移动互金新体验
  5. 光在参与介质中的传播及辐射传递方程
  6. [面试备忘]数组(一维)最大子串总结
  7. ssh登录失败处理步骤
  8. chrome断点调试其他技巧
  9. 洛谷2805 [NOI2009]植物大战僵尸 (拓扑排序+最小割)
  10. (数据科学学习手札07)R在数据框操作上方法的总结(初级篇)