Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 检测REST API扫描/攻击的启发式方法_Regex_Rest_Security_Heuristics - Fatal编程技术网

Regex 检测REST API扫描/攻击的启发式方法

Regex 检测REST API扫描/攻击的启发式方法,regex,rest,security,heuristics,Regex,Rest,Security,Heuristics,我正在开发一个RESTAPI,并且我已经编写了一个控制器来处理“未处理”的路由(不存在的“资源类型”路由) 我已经创建了一些代码,以启发式的方式检测潜在的攻击尝试并记录它们(以便稍后执行诸如阻止IP或为机器学习系统提供信息等操作) 我只是分析请求的路径(而不是它的主体)。我使用的regexp如下所示: const SUSPICIOUS_PATH_COMPONENTS = '\.\.|sys|shadow|passwd'; const SUSPICIOUS_FILE_EXTENSIONS = '\

我正在开发一个RESTAPI,并且我已经编写了一个控制器来处理“未处理”的路由(不存在的“资源类型”路由)

我已经创建了一些代码,以启发式的方式检测潜在的攻击尝试并记录它们(以便稍后执行诸如阻止IP或为机器学习系统提供信息等操作)

我只是分析请求的路径(而不是它的主体)。我使用的regexp如下所示:

const SUSPICIOUS_PATH_COMPONENTS = '\.\.|sys|shadow|passwd';
const SUSPICIOUS_FILE_EXTENSIONS = '\.jsp|\.asp|\.php|\.pl';
const SUSPICIOUS_AUTH_ATTEMPT    = 'admin|root|auth|login|password';
const SUSPICIOUS_CONFIG_ATTEMPT  = 'config|setting';
const SUSPICIOUS_OF_INJECTION    = 'cgi|script|eval|execute|code|insert|update|delete|select|phpinfo';
const SUSPICIOUS_OTHER_KEYWORDS  = 'pass|install|super|secure|security|token';

// Heuristic regexp used to detect security threats
const SUSPICIOUS_PATH_REGEX  = '/'
    . self::SUSPICIOUS_PATH_COMPONENTS . '|'
    . self::SUSPICIOUS_FILE_EXTENSIONS . '|'
    . self::SUSPICIOUS_AUTH_ATTEMPT    . '|'
    . self::SUSPICIOUS_CONFIG_ATTEMPT  . '|'
    . self::SUSPICIOUS_OF_INJECTION    . '|'
    . self::SUSPICIOUS_OTHER_KEYWORDS
. '/i';
如果路由与regexp匹配,则在日志中插入一行:

$this->get('logger')->notice(
       'SECURITY: Potential malicious scan ('.$httpMethod.' request)',
        [
            'route' => $route,
            'client_ips' => $request->getClientIps(),
            'user_agent' => $request->headers->has('User-Agent') ? $request->headers->get('User-Agent') : '',
            'request_body' => preg_replace('/[^\x00-\x7F]+/', '', substr($request->getContent(), 0, 1024))
        ]
    );
我的问题是,如果有人有关于如何改进这种启发式的想法,以及如何改进日志记录(您认为我应该记录其他内容/更多内容吗?)


感谢您的时间和建议。

标准是什么?如果我在征求新的想法,我应该将其发送给codereview吗?我发布代码是为了展示我已经想到并实现了什么,以避免收到与我相同的想法。@blueygh2否。这个问题特别要求改进启发式方法。对于codereview来说,要求这样做是不合主题的,因为识别启发式被认为是一种特性。更改功能不是codereview的目的。有关更多信息,请参阅您是否确保常规URL不能包含这些术语?e、 g.禁止用户名、文档等在其名称中包含“设置”,或重写其URL(如果有)?如果没有,你很可能会面临大量的误报,最终会错过真正的误报。在此基础上,您可能希望使用更具体的REs。在此点之前处理常规URL,如果URL与常规URL不匹配,则由此控制器处理。