diff --git a/webgoat-lessons/cross-site-scripting/src/main/java/org/owasp/webgoat/plugin/CrossSiteScriptingLesson3.java b/webgoat-lessons/cross-site-scripting/src/main/java/org/owasp/webgoat/plugin/CrossSiteScriptingLesson3.java
index 0c3681fd1..d6c65fec0 100644
--- a/webgoat-lessons/cross-site-scripting/src/main/java/org/owasp/webgoat/plugin/CrossSiteScriptingLesson3.java
+++ b/webgoat-lessons/cross-site-scripting/src/main/java/org/owasp/webgoat/plugin/CrossSiteScriptingLesson3.java
@@ -1,5 +1,6 @@
package org.owasp.webgoat.plugin.mitigation;
+
import org.owasp.webgoat.assignments.AssignmentEndpoint;
import org.owasp.webgoat.assignments.AssignmentHints;
import org.owasp.webgoat.assignments.AssignmentPath;
@@ -8,8 +9,6 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
-import org.jsoup.*;
-import org.w3c.dom.*;
import javax.tools.*;
@@ -27,31 +26,36 @@ public class CrossSiteScriptingLesson3 extends AssignmentEndpoint {
@RequestMapping(method = RequestMethod.POST)
@ResponseBody
public AttackResult completed(@RequestParam String editor) {
+ //https://github.com/OWASP/owasp-java-encoder
+ //maybe better idea for assignment
+
+ String line1 ="";
+ String line2 ="";
+
+ String[] lines = editor.split(System.getProperty("line.separator"));
+ for (int i = 0; i < lines.length; i++) {
+ if(lines[i].contains("First Name")){
+ line1 = lines[i+1].replace("
","").replace(" | ","");
+ } else if (lines[i].contains("Last Name")){
+ line2 = lines[i+1].replace(" ", "").replace(" | ", "");
+ }
+ }
- editor = editor.replaceAll("\\<.*?>","");
- //http://www.java67.com/2012/10/how-to-escape-html-special-characters-JSP-Java-Example.html
- //
//
//or
//${fn:escapeXml("param.first_name/last_name")}
- //check html string for regex
- //check for c:out && escapeXml="true" && !request.getParameter
- //Document doc = Jsoup.parse(editor);
- //Element e = doc.getElementById();
-
- System.out.println(editor);
- if (editor.contains("c:out") && editor.contains("escapeXml=\"true\"") && editor.contains("value=\"${last_name}\"") && editor.contains("value=\"${first_name}\"")) {
+ if((line1.equals("") || line1.equals(""))
+ && (line2.equals("")) || line2.equals("")){
System.out.println("true");
- return trackProgress(success().build());
- }
- else if (editor.contains("${fn:escapeXml") && editor.contains("\"param.first_name\"") && editor.contains("\"param.last_name\"")) {
+ return trackProgress(success().feedback("xss-mitigation-3-success").build());
+ } else if(line1.equals("${fn:escapeXml(\"param.first_name\")}") && line2.equals("${fn:escapeXml(\"param.last_name\")}")){
System.out.println("true");
- return trackProgress(success().build());
- }
- else {
+ return trackProgress(success().feedback("xss-mitigation-3-success").build());
+ } else {
System.out.println("false");
- return trackProgress(failed().build());
+ System.out.println(line1 + "\n" + line2);
+ return trackProgress(failed().feedback("xss-mitigation-3-failure").build());
}
}
}
diff --git a/webgoat-lessons/cross-site-scripting/src/main/resources/html/CrossSiteScriptingMitigation.html b/webgoat-lessons/cross-site-scripting/src/main/resources/html/CrossSiteScriptingMitigation.html
index c01ed1ece..f354f5363 100644
--- a/webgoat-lessons/cross-site-scripting/src/main/resources/html/CrossSiteScriptingMitigation.html
+++ b/webgoat-lessons/cross-site-scripting/src/main/resources/html/CrossSiteScriptingMitigation.html
@@ -27,6 +27,29 @@
var editor = ace.edit("editor");
editor.setTheme("ace/theme/monokai");
editor.session.setMode("ace/mode/html");
+ editor.setValue("\n" +
+ "\n" +
+ "\n" +
+ " Using GET and POST Method to Read Form Data\n" +
+ "\n" +
+ "\n" +
+ "\n" +
+ " Using POST Method to Read Form Data
\n" +
+ " \n" +
+ " \n" +
+ " \n" +
+ " First Name: | \n" +
+ " YOUR CODE HERE | \n" +
+ "
\n" +
+ " \n" +
+ " Last Name: | \n" +
+ " YOUR CODE HERE | \n" +
+ "
\n" +
+ " \n" +
+ "
\n" +
+ "\n" +
+ "\n" +
+ "\n");