/* TEMPLATE GENERATED TESTCASE FILE Filename: CWE90_LDAP_Injection__getQueryString_Servlet_22b.java Label Definition File: CWE90_LDAP_Injection.label.xml Template File: sources-sink-22b.tmpl.java */ /* * @description * CWE: 90 LDAP Injection * BadSource: getQueryString_Servlet Parse id param out of the URL query string (without using getParameter()) * GoodSource: A hardcoded string * Sinks: * BadSink : data concatenated into LDAP search, which could result in LDAP Injection * Flow Variant: 22 Control flow: Flow controlled by value of a public static variable. Sink functions are in a separate file from sources. * * */ package testcases.CWE90_LDAP_Injection; import testcasesupport.*; import javax.servlet.http.*; import java.util.StringTokenizer; public class CWE90_LDAP_Injection__getQueryString_Servlet_22b { public String badSource(HttpServletRequest request, HttpServletResponse response) throws Throwable { String data; if (CWE90_LDAP_Injection__getQueryString_Servlet_22a.badPublicStatic) { data = ""; /* initialize data in case id is not in query string */ /* POTENTIAL FLAW: Parse id param out of the URL querystring (without using getParameter()) */ { StringTokenizer tokenizer = new StringTokenizer(request.getQueryString(), "&"); while (tokenizer.hasMoreTokens()) { String token = tokenizer.nextToken(); /* a token will be like "id=foo" */ if(token.startsWith("id=")) /* check if we have the "id" parameter" */ { data = token.substring(3); /* set data to "foo" */ break; /* exit while loop */ } } } } else { /* INCIDENTAL: CWE 561 Dead Code, the code below will never run * but ensure data is inititialized before the Sink to avoid compiler errors */ data = null; } return data; } /* goodG2B1() - use goodsource and badsink by setting the static variable to false instead of true */ public String goodG2B1Source(HttpServletRequest request, HttpServletResponse response) throws Throwable { String data; if (CWE90_LDAP_Injection__getQueryString_Servlet_22a.goodG2B1PublicStatic) { /* INCIDENTAL: CWE 561 Dead Code, the code below will never run * but ensure data is inititialized before the Sink to avoid compiler errors */ data = null; } else { /* FIX: Use a hardcoded string */ data = "foo"; } return data; } /* goodG2B2() - use goodsource and badsink by reversing the blocks in the if in the sink function */ public String goodG2B2Source(HttpServletRequest request, HttpServletResponse response) throws Throwable { String data; if (CWE90_LDAP_Injection__getQueryString_Servlet_22a.goodG2B2PublicStatic) { /* FIX: Use a hardcoded string */ data = "foo"; } else { /* INCIDENTAL: CWE 561 Dead Code, the code below will never run * but ensure data is inititialized before the Sink to avoid compiler errors */ data = null; } return data; } }