11package dev .aikido .agent_api .vulnerabilities ;
22
33import dev .aikido .agent_api .context .ContextObject ;
4+ import dev .aikido .agent_api .helpers .ContentDispositionFilename ;
45import dev .aikido .agent_api .helpers .extraction .StringExtractor ;
56
7+ import java .util .HashMap ;
8+ import java .util .List ;
69import java .util .Map ;
10+ import java .util .Optional ;
11+
12+ import static dev .aikido .agent_api .context .ContextObject .getHeader ;
713
814public class StringsFromContext {
915 private final Map <String , String > bodyStrings ;
@@ -15,7 +21,15 @@ public class StringsFromContext {
1521 public StringsFromContext (ContextObject contextObject ) {
1622 bodyStrings = loadFromCache (contextObject , "body" , contextObject .getBody ());
1723 queryStrings = loadFromCache (contextObject , "query" , contextObject .getQuery ());
18- headersStrings = loadFromCache (contextObject , "headers" , contextObject .getHeaders ());
24+
25+ HashMap <String , List <String >> headers = new HashMap <>(contextObject .getHeaders ());
26+
27+ // parse special headers like Content-Disposition to already extract certain values
28+ Optional <String > filename = ContentDispositionFilename .extract (contextObject .getHeader ("Content-Disposition" ));
29+ filename .ifPresent (s -> headers .put ("Content-Disposition[filename]" , List .of (s )));
30+
31+ headersStrings = loadFromCache (contextObject , "headers" , headers );
32+
1933 cookieStrings = loadFromCache (contextObject , "cookies" , contextObject .getCookies ());
2034 routeParamStrings = loadFromCache (contextObject , "routeParams" , contextObject .getParams ());
2135 }
0 commit comments