php 扫描磁盘文件 显示威胁文件并清除病毒文件 简单示例

<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;

class TestController extends Controller
{
    // 定义恶意代码的正则表达式模式
    private $maliciousPattern = "/eval\(/";
    // 这里只是一个简单的示例模式,实际中可能需要更复杂的模式匹配

    // 扫描文件的方法
    public function scanFiles(Request $request)
    {
        // 获取要扫描的目录,这里假设传递了一个名为 "directory" 的参数
        $directory = $request->input('directory');

        // 检查目录是否存在
        if (!is_dir($directory)) {
            return response()->json(['error' => '目录不存在'], 404);
        }

        // 获取是否清理病毒的参数值
        $isClear = $request->input('is_clear');

        // 递归地扫描目录及其所有子目录中的文件
        return $this->recursiveScan($directory, $isClear);

        // 如果没有找到恶意代码,返回成功消息

    }

    // 递归地扫描目录及其所有子目录中的文件
    private function recursiveScan($directory, $isClear)
    {
        $files = scandir($directory);
        $result = [];

        foreach ($files as $file) {
            // 排除 . 和 .. 目录
            if ($file != '.' && $file != '..') {
                $file_path = $directory . '/' . $file;
                // 如果是文件,则检查是否包含恶意代码
                if (is_file($file_path)) {

                    $content = file_get_contents($file_path);

                    if (preg_match($this->maliciousPattern, $content)) {

                        if ($isClear === true) {
                            // 清理病毒
                            unlink($file_path);
                        }
                        // 如果找到恶意代码,将相关信息添加到结果数组中
                        $result[] = ['message' => '找到了病毒威胁,并根据您的需求做处理', 'file' => $file_path];
                    }
                } elseif (is_dir($file_path)) {
                    // 如果是目录,则递归调用自身,并将结果合并到当前结果数组中
                    $result = array_merge($result, $this->recursiveScan($file_path, $isClear));
                }
            }
        }

        return $result;
    }

}

本作品采用《CC 协议》,转载必须注明作者和本文链接
chowjiawei
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 4
fatrbaby

建议使用RecursiveDirectoryIterator

2个月前 评论
chowjiawei (楼主) 2个月前

我想看这个函数maliciousPattern源码

1个月前 评论

额,我想知道你砸来判断,是否是病毒

1个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!