• php组件漏洞


    前言:

    PHP组件漏洞防护

    composer

    环境搭建

    https://blog.csdn.net/weixin_29528865/article/details/116255667
    https://www.phpcomposer.com/

    git客户端 (composer 在安装第三方库时也要用到git,所以也要优先安装git.)
    composer安装包

    🐷composer 需要选择php.exe,对应php环境所使用的php.exe;

    安装php工具箱后, composer 安装时选择如下, 选择php环境所用的php版本下的php.exe即可🐷
    在这里插入图片描述
    在PHP项目中使用 Composer 2.0

    PHP管理依赖(dependency)关系工具 Composer的自动加载(autoload)

    举例,假设项目要使用 monolog 日志工具,就需要在composer.json里告诉composer:

    {
     "require": {
      "monolog/monolog": "1.*"
     }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    之后执行:

    php composer.phar install
    
    • 1

    安装完,怎么使用呢?

    Composer自动生成了一个autoload文件,你只需要引用它

    require '/path/to/vendor/autoload.php';
    
    • 1

    然后就可以非常方便的去使用第三方的类库了,是不是感觉很棒啊!对于我们需要的monolog,就可以这样用了:

    use Monolog\Logger;
    use Monolog\Handler\StreamHandler;
    // create a log channel
    $log = new Logger('name');
    $log->pushHandler(new StreamHandler('/path/to/log/log_name.log', Logger::WARNING));
    // add records to the log
    $log->addWarning('Foo');
    $log->addError('Bar');
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在这个过程中,Composer做了什么呢?

    它生成了一个autoloader,再根据各个包自己的autoload配置,从而帮我们进行自动加载的工作。

    使用composer命令加载ThinkPHP框架下vendor中的第三方类库

    1、首先下载需要的第三方类库,放在TP框架下的vendor文件夹下

    2、给第三方类库SDK写上命名空间,命名空间为该类库的文件夹对应的名字

    在这里插入图片描述

    3、在composer.json文件中添加需要加载的第三方类库

    "autoload": {
            "psr-4": {
                "sina\\": "vendor/sina"
            }
        },
    
    • 1
    • 2
    • 3
    • 4
    • 5

    sina代表命名空间,后面的是路径,

    4、打开cmd,进入到项目根目录,使用composer命令加载第三方类库,执行composer dump-autoload,如下,成功即可

    在这里插入图片描述
    5、使用

    在使用的地方直接用use引用需要的第三方类库即可。

    要使用第3条中的 "sina\\": "vendor/sina" (sina为命名空间,vendor/sina 为对应的文件位置),和 第4条中的命令才可以使用use引入,否则只能使用vendor()方法引入

    php的rpc框架详解

    https://blog.csdn.net/veloi/article/details/111636500
    phprpc的简单使用

    远程调用框架(Remote Procedure Call)


    通常我们调用一个php中的方法,比如这样一个函数方法: localAdd(10, 20),localAdd方法的具体实现要么是用户自己定义的,要么是php库函数中自带的,也就说在localAdd方法的代码实现在本地,它是一个本地调用!远程调用意思就是:被调用方法的具体实现不在程序运行本地,而是在别的某个远程地方。

    远程调用原理:

    比如 A (client) 调用 B (server) 提供的remoteAdd方法:

    1、首先A与B之间建立一个TCP连接;
    2、然后A把需要调用的方法名(这里是remoteAdd)以及方法参数(10, 20)序列化成字节流发送出去;

    3、B接受A发送过来的字节流,然后反序列化得到目标方法名,方法参数,接着执行相应的方法调用(可能是localAdd)并把结果30返回;
    4、A接受远程调用结果,输出30。

    RPC框架就是把以上这几点细节给封装起来,给用户暴露简单友好的API使用。

    远程调用的好处:

    解耦:当server需要对方法内实现修改时,client完全感知不到,不用做任何变更;这种方式在跨部门,跨公司合作的时候经常用到,并且方法的提供者我们通常称为:服务的暴露
    在这里插入图片描述

    php中流行的RPC框架有哪些呢?

    先列举下: phprpc,yar, thrift, gRPC, swoole, hprose

    RPC原理是一样的,都是Client/Server模式,只是每个框架的使用方式不一样而已。

    主要讲解一下 phprpc 和 yar 。

    phprpc

    下载,解压

    有很多文件和文件夹,结构如下:
    在这里插入图片描述
    其中有dhparams和pecl是文件夹,pecl中的是php的xxtea扩展,按照官网的描述,可以安装也可以不安装,不安装phprpc也是可以运行的。但是如果你需要更快的加密处理能力,可以安装下。

    安装步骤如下,先将pecl下的xxtea文件夹复制到php源码的etx目录:/lamp/php-5.4.11/ext下。然后用phpize进行扩展重新编译。

    [root@localhost /]# cd /lamp/php-5.4.11/ext/xxtea
     
    [root@localhost xxtea]# /usr/local/php/bin/phpize
     
    [root@localhost xxtea]# ./configure --enable-xxtea=shared --with-php-config=/usr/local/php/bin/php-config
    
    • 1
    • 2
    • 3
    • 4
    • 5

    编译完成,提示xxtea.so已经在/usr/local/php/lib/php/extensions/no-debug-zts-20100525/xxtea.so 下了。

    下面,我们就需要在php.ini的最后将这个xxtea.so加上:

    [root@localhost /]# vi /usr/local/php/etc/php.ini 
     
    [xxtea]
     
    extension=xxtea.so
    
    • 1
    • 2
    • 3
    • 4
    • 5

    加好了后,我们需要重启下apache或者php-fpm

    重启apache
     
    [root@localhost /]# /usr/local/apache/bin/apachectl restart
     
    平滑重启php-fpm
     
    kill -USR2 cat /usr/local/php/var/run/php-fpm.pid
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    重启完毕后,打开phpinfo()页面,搜索一下,应该就能够看到xxtea了。

    使用:
    服务端:server.php

    
     
    include ("phprpc/phprpc_server.php");
     
    function HelloWorld() {
     
       return 'Hello World!';
     
    }
     
    $server = new PHPRPC_Server();
     
    $server->add('HelloWorld');
     
    $server->start();
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    客户端:client.php

    
     
    include ("phprpc/phprpc_client.php");
     
    $client = new PHPRPC_Client('http://127.0.0.1/server.php');
     
    echo $client->HelloWorld();
     
    ?>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    执行client.php,输出Hello Word!

    yar

    使用纯C编写的用于php的扩展,效率应该是蛮高的,而且支持异步并行

    下载 :http://pecl.php.net/package/yar

  • 相关阅读:
    接口自动化测试 —— Jmeter 6种定时器应用
    摄影构图:如何处理对焦、快门、光圈、ISO 以及拍摄方式
    HTML-09.表单项标签
    存储模型:大端和小端
    表单设计中,印刷模式和拖拽模式选哪个?成年人:全都要
    用Intel MediaSDK 做超高码率编码
    位运算符在SQL中的使用场景
    gin项目对于favicon.ico请求的处理
    Cloud微服务:Ribbon负载均衡
    #循循渐进学51单片机#定时器与数码管#not.4
  • 原文地址:https://blog.csdn.net/weixin_43123409/article/details/125983046