四时宝库

程序员的知识宝库

「安全与防护」PHP后门新玩法:一款猥琐的PHP后门分析

0x00 背景

近日,360网站卫士安全团队近期捕获一个基于PHP实现的webshell样本,其巧妙的代码动态生成方式,猥琐的自身页面伪装手法,让我们在分析这个样本的过程中感受到相当多的乐趣。接下来就让我们一同共赏这个奇葩的Webshell吧。

【Api】PHP与微信公众号支付,很简单

你可能喜欢的文章

1-1:Nginx+PHP+FastCGI加速模式

1-2:Nginx服务优化(隐藏版本号、修改用户和组、设置链接超时)

1-3:Nginx服务优化(日志切割与设置链接超时)

2-1:Nginx均衡TCP协议服务器案例

Laravel中使用MinIO进行文件操作及ZIP解压

Laravel中使用MinIO进行文件操作及ZIP解压指南

介绍

如何打造一款自己的恶意样本检测工具

文章来源:台下言书

前言


每次出去做应急都能碰到各种各样的恶意软件、webshell,有的运气好能在网上遇到大神对该样本的分析文章,这样处理起来就会比较高效。运气不好网上找不到,只能自己去做分析了,比较耗时。而一个恶意软件,就拿碰到最多的挖矿系列来说,基本上都是有下载器、守护程序、释放的主程序、横向程序等多个文件,分布在系统的不同位置。还有就是webshell,找起来同样十分困难。

php 基于redis的分布式锁(php redis 分布式锁)

<?php

namespace app\api\service;

use app\api\traits\Singleton;

/**
 * 分布式锁
 * Class LockService
 * @package app\api\service
 */
class LockService extends BaseService
{
    private $lockValue;
    //有效期,5秒钟
    private $expireTime = 5;

    //使用场景
    private $scene;
    //redis连接实例
    private $redis;

    public function __construct($scene = 'kill', $expireTime = 5)
    {
        $this->scene = $scene;
        $this->expireTime = $expireTime;
        $this->redis = RedisService::getInstance()->client();
    }

    //加锁
    public function lock()
    {
        $this->lockValue = md5(uniqid());
        $result = $this->redis->set($this->scene, $this->lockValue,
            'EX', $this->expireTime,'NX');
        if(empty($result)){
            return false;
        }
        return true;
    }

    //释放锁
    public function unlock()
    {
        $script = <<<LUA
        local key=KEYS[1]
        local value=ARGV[1]
        if(redis.call('get', key) == value)
        then
            return redis.call('del', key)
        end
LUA;
        $this->redis->eval($script, 1, $this->scene, $this->lockValue);
    }

}

/*
//调用执行
$lockService = new LockService('kill');
if($lockService->lock()){
    //自行相关操作

    //释放锁
    $lockService->unlock();
}
else{
    echo "请求频繁,请稍后再操作\n";
}
*/

3分钟短文 | PHP伪随机Token生成器,实地测试,效果感人

引言

我们经常可能会用到邀请码,邮件验证码,或者需要使用unique 字符串标记用户属性的情况。

今天我们且不说高深的“全局唯一ID”的生成方案,我们说一个简单的,如何生成一个唯一的,随机的,数组字母组成的字符串。

appId和appSecret生成算法(appid和appsecret设计)

<?php

$appId = AppUtils::getAppId();

$appSecret = AppUtils::getAppSecret();

var_dump($appId,$appSecret);

技术分享:从开发角度浅谈CSRF攻击及防御

什么是CSRF

CSRF可以叫做(跨站请求伪造),咱们可以这样子理解CSRF,攻击者可以利用你的身份你的名义去发送(请求)一段恶意的请求,从而导致可以利用你的账号(名义)去--购买商品、发邮件,恶意的去消耗账户资源,导致的一些列恶意行为.CSRF可以简单分为Get型和Post型两种。

excel导出合并单元格(excel导入合并单元格)

站点名字一样的需要合并在一起,样式图如下


1.先数据填充 后修改样式

$sheet->rows($data1);

php 利用redis分布式锁秒杀解决超卖问题

后续还有优化,目前只有大体思路

public function miaosha(){

$uid=uniqid(); //模仿用户id 随机数代替
#redis 连接
$redis =new \Redis();
$redis->connect('127.0.0.1',6379);
try{
    do{
        $list =[];
        $key='test_key';
        $value =uniqid();
        $numkey ='storeid'.'11111';  //商品的Key 用来存商品数量
        $redis->watch($numkey);  //监听商品数量
      #一个用户只能购买一个
        if($redis->hget('www',$uid)){
            return ['msg'=>'不能重复'];
        }
      //加锁
            $is_lock = $redis->set($key,$value,['nx','ex'=>'10']);
            if($is_lock){
                $arr[$key] =$value; //记录当前获取锁的用户
                $stock = $redis->get($numkey); 
                if($stock<=0){//商品数量为0秒杀结束,删除锁
                    if($redis->get($key)==$arr[$key]){
                        $redis->del($key);
                    }
                    return ['msg'=>'结束'];
                }
              #开启事务
                $redis->multi();
                $redis->decr($numkey);
              $redis->hSet('www',$uid,'11111');
                $redis->lPush('list',$uid);
                $redis->exec();
                #提交事务解锁
                if($redis->get($key)==$arr[$key]){
                    $redis->del($key);
                }
                break;
            }else{
              //没有获取锁睡眠重试
                usleep(5000);
            }

        }while(!is_lock);
    return $redis->lLen('list');
    }catch (\Exception $e){
        $redis->discard();//redis 回滚
        return $e->getMessage();

    }
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接