一个关于阿里云PHP webshell报警的一丁点思考

一大早就看到阿里云控制台一片红,作为红点强迫症必须要把它去掉,点开一看是几个webshell,并且是几台服务器的同一个文件,想必不是被入侵应该是代码问题,如果这么多服务器被入侵,可是够忙活的了。于是我把文件下载下来,查看一下代码:大约的逻辑是这样的$act = $request->get('act'); $userId = $request->get('user_id); ... $params = [$userId,...]; call_user_func_array($act,$params); 很明显这样是有问题的,问题原因是如果act是一...

Laravel中间件的实现

Laravel 中间件 是通过pipeline执行的。pipeline 顾名思义,就是管道,相当于unnix中的管道符(|),laravel中间件大部分都是对request的过滤,这种过滤的行为相当于管道符对输出结果的处理,举个例子 ls -alh|grep acb.txt 这里grep abc.txt 就是对ls的结果进行处理,在laravel框架中相当于一个中间件。Laravel 中pipeline实现的方式非常简洁、有力,不但其实现原理如此,面对开发人员,它的调用方式也十分清晰,利用匿名函数使得前置与后置的调用都很直观。不过,很多人看到源码也很迷惑,因为中间存在着非常多的回调,只要...

更改Laravel的密码加密方式

我们知道laravel在数据库存储时默认的加密算法是Bcrypt,可以使用提供的辅助函数bcrypt 或者使用Hash Facade 来完成密码的加密,使用Laravel的Auth Facade来完成认证,实际上,我们在很多项目因为各种原因并不使用Bcrypt加密存储用户密码,而很多项目还在使用md5或者自己造的乱七八糟的加密方式,这里举个例子使用base64(password + salt)的加密方式来尝试无痛的更换laravel的密码加密方式,从而能够使用laravel的Auth,当然,实际的项目中我相信没人用这样的加密方式。这个例子有助于理解laravel的ServiceProvi...

Supervisor的安装

yum install python-setuptoolseasy_install supervisor如果easy_install不好使就从官方下载,然后通过python安装tar zxf supervisor-3.1.3.tar.gzcd supervisorpython setup.py install成功安装后可以登陆python控制台输入import supervisor 查看是否能成功加载。生成配置文件(supervisord.conf):echo_supervisord_conf > /etc/supervisord.conf 启动:supervisord -c /e...

从源码看Laravel queue:listen queue:work queue:work --daemon的区别

功能概述Laravel的队列监听有多个命令可以实现,其中queue:listen和queue:work --daemon仅仅从运行命令后的的表现看不出明显的区别,那么他们到底有什么区别呢?laravel给queue:listen 和 queue:work的描述分别是:queue:listen:Listen to a given queue//监听一个队列 queue:work:Start processing jobs on the queue as a daemon//作为守护进程处理队列中的任务但是好像并没有说清楚根本区别在哪里,所以我们还是简单的查看下源码来了解下根本区别.源码解读...

Laravel 访问频率限制中间件throttle的使用

访问频率限制概述频率限制经常用在API中,用于限制独立请求者对特定API的请求频率。例如,如果设置频率限制为每分钟1000次,如果一分钟内超过这个限制,那么服务器就会返回 429: Too Many Attempts.响应。通常,一个编码良好的、实现了频率限制的应用还会回传三个响应头: X-RateLimit-Limit, X-RateLimit-Remaining和 Retry-After(如果达到限制次数只能获取到 Retry-After头)。 X-RateLimit-Limit告诉我们在指定时间内允许的最大请求次数, X-RateLimit-Remaining指的是在指定时间段内剩...

PHP单例设计模式实例

特点单例模式是PHP中一种常见的设计模式,主要有以下几个特点:单例类只能有一个实例。单例类必须自己创建自己的唯一实例。单例类必须给所有其他对象提供这一实例。实现基于单例模式特点,要实现单例模式非常简单:构造方法(__constructor)设为私有(必须自己创建实例,保证不被外部创建)关闭clone,关闭serialize(还是为了保证唯一)一个静态(static)属性保存实例一个静态(static)方法创建实例(因为不能被new,所以只能是静态方法)看起来已经很严密了,来个实际例子吧final class Singleton { private static $instance...

Centos7 关闭防火墙

CentOS 7.0默认使用的是firewall作为防火墙,使用iptables必须重新设置一下直接关闭防火墙systemctl stop firewalld.service #停止firewallsystemctl disable firewalld.service #禁止firewall开机启动