|
16 | 16 | * See the License for the specific language governing permissions and |
17 | 17 | * limitations under the License. |
18 | 18 | */ |
19 | | -package de.dominikschadow.webappsecurity; |
| 19 | +package de.dominikschadow.webappsecurity.servlets; |
20 | 20 |
|
21 | 21 | import java.io.IOException; |
22 | 22 | import java.io.PrintWriter; |
|
29 | 29 | import javax.servlet.http.HttpServletRequest; |
30 | 30 | import javax.servlet.http.HttpServletResponse; |
31 | 31 |
|
32 | | -import de.dominikschadow.webappsecurity.csrf.CSRFTokenHandler; |
| 32 | +import de.dominikschadow.webappsecurity.token.CSRFTokenHandler; |
| 33 | +import org.apache.log4j.Logger; |
33 | 34 |
|
34 | 35 | /** |
| 36 | + * Basic protected servlet for GET and POST requests. Checks the CSRF-Token value to identify |
| 37 | + * CSRF attacks. Prints out all information to standard out and returns the received parameter |
| 38 | + * as response. |
| 39 | + * |
35 | 40 | * @author Dominik Schadow |
36 | 41 | */ |
37 | 42 | @WebServlet(name = "ProtectedServlet", urlPatterns = {"/ProtectedServlet"}) |
38 | 43 | public class ProtectedServlet extends HttpServlet { |
39 | 44 | private static final long serialVersionUID = 1L; |
| 45 | + private static final Logger LOGGER = Logger.getLogger(ProtectedServlet.class); |
40 | 46 |
|
41 | | - /** |
42 | | - * @see HttpServlet#HttpServlet() |
43 | | - */ |
44 | | - public ProtectedServlet() { |
45 | | - super(); |
46 | | - } |
47 | | - |
48 | 47 | /** |
49 | 48 | * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) |
50 | 49 | */ |
51 | 50 | protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException { |
52 | | - System.out.println("Processing protected GET request"); |
| 51 | + LOGGER.info("Processing protected GET request"); |
53 | 52 |
|
54 | 53 | response.setContentType("text/html"); |
55 | 54 |
|
56 | 55 | try { |
57 | 56 | if (!CSRFTokenHandler.isValid(request)) { |
58 | | - System.out.println("CSRF token is invalid"); |
| 57 | + LOGGER.warn("CSRF token is invalid"); |
59 | 58 | response.setStatus(401); |
60 | 59 |
|
61 | 60 | try (PrintWriter out = response.getWriter()) { |
62 | 61 | out.println("CSRF token is invalid"); |
63 | 62 | } catch (IOException ex) { |
64 | | - ex.printStackTrace(); |
| 63 | + LOGGER.error(ex.getMessage(), ex); |
65 | 64 | } |
66 | 65 |
|
67 | 66 | return; |
68 | 67 | } |
69 | 68 | } catch (NoSuchAlgorithmException | NoSuchProviderException ex) { |
70 | | - ex.printStackTrace(); |
| 69 | + LOGGER.error(ex.getMessage(), ex); |
71 | 70 | } |
72 | | - |
73 | | - System.out.println("CSRF token is valid"); |
| 71 | + |
| 72 | + LOGGER.info("CSRF token is valid"); |
74 | 73 |
|
75 | 74 | String name = request.getParameter("name"); |
76 | | - System.out.println("Protected: Received " + name + " as GET parameter"); |
| 75 | + LOGGER.info("Received " + name + " as GET parameter"); |
77 | 76 |
|
78 | 77 | try (PrintWriter out = response.getWriter()) { |
79 | | - out.println("Received " + name + " as GET parameter"); |
| 78 | + out.println("<html>"); |
| 79 | + out.println("<head>"); |
| 80 | + out.println("<title>Ch08_CSRF</title>"); |
| 81 | + out.println("<link rel=\"stylesheet\" type=\"text/css\" href=\"styles.css\" />"); |
| 82 | + out.println("</head>"); |
| 83 | + out.println("<body>"); |
| 84 | + out.println("<h1>Ch08_CSRF</h1>"); |
| 85 | + out.println("<p>Received <b>" + name + "</b> as GET parameter.</p>"); |
| 86 | + out.println("<p><a href=\"requests-protected.jsp\">Back</a></p>"); |
| 87 | + out.println("</body>"); |
| 88 | + out.println("</html>"); |
80 | 89 | } catch (IOException ex) { |
81 | | - ex.printStackTrace(); |
| 90 | + LOGGER.error(ex.getMessage(), ex); |
82 | 91 | } |
83 | 92 | } |
84 | 93 |
|
85 | 94 | /** |
86 | 95 | * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) |
87 | 96 | */ |
88 | 97 | protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException { |
89 | | - System.out.println("Processing protected POST request"); |
| 98 | + LOGGER.info("Processing protected POST request"); |
90 | 99 |
|
91 | 100 | response.setContentType("text/html"); |
92 | 101 |
|
93 | 102 | try { |
94 | 103 | if (!CSRFTokenHandler.isValid(request)) { |
95 | | - System.out.println("CSRF token is invalid"); |
| 104 | + LOGGER.warn("CSRF token is invalid"); |
96 | 105 | response.setStatus(401); |
97 | 106 |
|
98 | 107 | try (PrintWriter out = response.getWriter()) { |
99 | 108 | out.println("CSRF token is invalid"); |
100 | 109 | } catch (IOException ex) { |
101 | | - ex.printStackTrace(); |
| 110 | + LOGGER.error(ex.getMessage(), ex); |
102 | 111 | } |
103 | 112 |
|
104 | 113 | return; |
105 | 114 | } |
106 | 115 | } catch (NoSuchAlgorithmException | NoSuchProviderException ex) { |
107 | | - ex.printStackTrace(); |
| 116 | + LOGGER.error(ex.getMessage(), ex); |
108 | 117 | } |
109 | | - |
110 | | - System.out.println("CSRF token is valid"); |
| 118 | + |
| 119 | + LOGGER.info("CSRF token is valid"); |
111 | 120 |
|
112 | 121 | String name = request.getParameter("name"); |
113 | | - System.out.println("Protected: Received " + name + " as POST parameter"); |
| 122 | + LOGGER.info("Received " + name + " as POST parameter"); |
114 | 123 |
|
115 | 124 | try (PrintWriter out = response.getWriter()) { |
116 | | - out.println("Received " + name + " as POST parameter"); |
| 125 | + out.println("<html>"); |
| 126 | + out.println("<head>"); |
| 127 | + out.println("<title>Ch08_CSRF</title>"); |
| 128 | + out.println("<link rel=\"stylesheet\" type=\"text/css\" href=\"styles.css\" />"); |
| 129 | + out.println("</head>"); |
| 130 | + out.println("<body>"); |
| 131 | + out.println("<h1>Ch08_CSRF</h1>"); |
| 132 | + out.println("<p>Received <b>" + name + "</b> as POST parameter.</p>"); |
| 133 | + out.println("<p><a href=\"requests-protected.jsp\">Back</a></p>"); |
| 134 | + out.println("</body>"); |
| 135 | + out.println("</html>"); |
117 | 136 | } catch (IOException ex) { |
118 | | - ex.printStackTrace(); |
| 137 | + LOGGER.error(ex.getMessage(), ex); |
119 | 138 | } |
120 | 139 | } |
121 | 140 | } |
0 commit comments