搭建了一个在线的机器学习webshell检测RESTful API

时间:2021-01-15 21:27:49

# 地址:

http://118.190.147.89:5000/

# 说明:

简单的基于机器学习检测webshell:
目前只支持php的检测

#使用方法:
 1.上传检测文件
 接口地址: /put
 请求方式: POST
 接收参数: file
 例如:
   目前上传的方式支持2中文件格式[php,zip]
   curl http://127.0.0.1:5000/put -F file=@test.php
   curl http://127.0.0.1:5000/put -F file=@aaa.zip
   执行命令后将会返回任务id (taskid)

 2.获取检测结果
  接口地址: /result/<taskid>
  请求方式: GET
  例如:
   http://127.0.0.1:5000/result/9b4c561a111b25a95666bcd5f062ce00

  返回数据结构:
  类型: json
  字段:
   code(int),msg(dict):
   当code为1时, 任务正在进行中, msg返回相应信息
   当code为2时, 任务尚未开始, msg返回消息,如果常时间未开始可能队列出现异常,可联系管理员解决
   当code为0时, 任务执行完成, msg返回相应的数据内容
   当code为0具体结构如下:

   {
    code:0,
    msg: {
     status: 0,
     file_hash: string,
     file_name: string,
     result: {
      filename: boolean
     }
    }
   }

 

# 更新日志
 2018年06月12日 部署添加

# 联系方式:
 sevck#jdsec.com

# 杂项

简单说说架构吧,使用flask,mongodb,rabbitmq

flask主要做来web:

  /index,比较简单的使用说明

  /put, 上传任务,返回taskid

  /result/<taskid>, 任务查询结果,根据动态路由,taskid,32位,查询任务结果

mongodb主要用来存取任务结果:

  put任务的时候会把这次的任务ID,文件属性等进行上传,任务状态存到mongodb中,result查询这个taskid的任务结果

check主要是核心的机器学习引擎:

     检测文件是不是webshell

rabbitmq,消息队列,来一个push到队列里

  为了保证任务的顺序和后期更新迭代,采用消息队列进行传输,中间做了持久化,防止中途挂掉或者其他意外情况。