Skip to content

Commit 3bf6dc2

Browse files
Jami CogswellJami Cogswell
authored andcommitted
Java: Stapler tests and stubs
1 parent 26b7c1a commit 3bf6dc2

File tree

12 files changed

+259
-1
lines changed

12 files changed

+259
-1
lines changed

java/ql/test/query-tests/security/CWE-352/CsrfUnprotectedRequestTypeTest.java

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,15 @@
1313
import java.sql.Connection;
1414
import java.sql.ResultSet;
1515
import java.sql.Statement;
16+
import org.kohsuke.stapler.WebMethod;
17+
import org.kohsuke.stapler.interceptor.RequirePOST;
18+
import org.kohsuke.stapler.verb.POST;
19+
import org.kohsuke.stapler.verb.GET;
20+
import org.kohsuke.stapler.verb.PUT;
21+
import org.kohsuke.stapler.StaplerRequest;
22+
import org.kohsuke.stapler.QueryParameter;
23+
import org.kohsuke.stapler.HttpRedirect;
24+
import org.kohsuke.stapler.HttpResponses;
1625

1726
@Controller
1827
public class CsrfUnprotectedRequestTypeTest {
@@ -212,9 +221,71 @@ public void bad10(@RequestParam String user) { // $ hasCsrfUnprotectedRequestTyp
212221
myBatisService.bad10(user);
213222
}
214223

224+
// Test name-based heuristic
225+
215226
// BAD: method name implies a state-change
216227
@GetMapping(value = "delete")
217228
public String delete(@RequestParam String user) { // $ hasCsrfUnprotectedRequestType
218229
return "delete";
219230
}
231+
232+
// Test Stapler web methods with name-based heuristic
233+
234+
// BAD: Stapler web method annotated with `@WebMethod` and method name that implies a state-change
235+
@WebMethod(name = "post")
236+
public String doPost(String user) { // $ hasCsrfUnprotectedRequestType
237+
return "post";
238+
}
239+
240+
// GOOD: nothing to indicate that this is a Stapler web method
241+
public String postNotAWebMethod(String user) {
242+
return "post";
243+
}
244+
245+
// GOOD: Stapler web method annotated with `@RequirePOST` and method name that implies a state-change
246+
@RequirePOST
247+
public String doPost1(String user) {
248+
return "post";
249+
}
250+
251+
// GOOD: Stapler web method annotated with `@POST` and method name that implies a state-change
252+
@POST
253+
public String doPost2(String user) {
254+
return "post";
255+
}
256+
257+
// BAD: Stapler web method annotated with `@GET` and method name that implies a state-change
258+
@GET
259+
public String doPost3(String user) { // $ hasCsrfUnprotectedRequestType
260+
return "post";
261+
}
262+
263+
// BAD: Stapler web method annotated with `@PUT` and method name that implies a state-change
264+
// We treat this case as bad for Stapler since the Jenkins docs only say that @POST/@RequirePOST
265+
// provide default protection against CSRF.
266+
@PUT
267+
public String doPut(String user) { // $ hasCsrfUnprotectedRequestType
268+
return "put";
269+
}
270+
271+
// BAD: Stapler web method parameter of type `StaplerRequest` and method name that implies a state-change
272+
public String doPost4(StaplerRequest request) { // $ hasCsrfUnprotectedRequestType
273+
return "post";
274+
}
275+
276+
// BAD: Stapler web method parameter annotated with `@QueryParameter` and method name that implies a state-change
277+
public String doPost5(@QueryParameter(value="user", fixEmpty=false, required=false) String user) { // $ hasCsrfUnprotectedRequestType
278+
return "post";
279+
}
280+
281+
// BAD: Stapler web method with declared exception type implementing HttpResponse and method name that implies a state-change
282+
public String doPost6(String user) throws HttpResponses.HttpResponseException { // $ hasCsrfUnprotectedRequestType
283+
return "post";
284+
}
285+
286+
// BAD: Stapler web method with return type implementing HttpResponse and method name that implies a state-change
287+
public HttpRedirect doPost7(String url) { // $ hasCsrfUnprotectedRequestType
288+
HttpRedirect redirect = new HttpRedirect(url);
289+
return redirect;
290+
}
220291
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
semmle-extractor-options: --javac-args -cp ${testdir}/../../../stubs/springframework-5.3.8/:${testdir}/../../../stubs/org.mybatis-3.5.4/
1+
//semmle-extractor-options: --javac-args -cp ${testdir}/../../../stubs/springframework-5.3.8/:${testdir}/../../../stubs/org.mybatis-3.5.4/:${testdir}/../../../stubs/stapler-1.263/:${testdir}/../../../stubs/javax-servlet-2.5:${testdir}/../../../stubs/apache-commons-jelly-1.0.1:${testdir}/../../../stubs/apache-commons-fileupload-1.4:${testdir}/../../../stubs/saxon-xqj-9.x:${testdir}/../../../stubs/apache-commons-beanutils:${testdir}/../../../stubs/dom4j-2.1.1:${testdir}/../../../stubs/apache-commons-lang:${testdir}/../../../stubs/jaxen-1.2.0

java/ql/test/stubs/stapler-1.263/org/kohsuke/stapler/AnnotationHandler.java

Lines changed: 13 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

java/ql/test/stubs/stapler-1.263/org/kohsuke/stapler/QueryParameter.java

Lines changed: 28 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

java/ql/test/stubs/stapler-1.263/org/kohsuke/stapler/WebMethod.java

Lines changed: 18 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

java/ql/test/stubs/stapler-1.263/org/kohsuke/stapler/interceptor/Interceptor.java

Lines changed: 15 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

java/ql/test/stubs/stapler-1.263/org/kohsuke/stapler/interceptor/InterceptorAnnotation.java

Lines changed: 21 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

java/ql/test/stubs/stapler-1.263/org/kohsuke/stapler/interceptor/RequirePOST.java

Lines changed: 25 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

java/ql/test/stubs/stapler-1.263/org/kohsuke/stapler/interceptor/Stage.java

Lines changed: 10 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

java/ql/test/stubs/stapler-1.263/org/kohsuke/stapler/verb/GET.java

Lines changed: 19 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)