" + feedback + "
"); + } + out.println(""); + out.close(); + } catch (Exception e) { + throw new ServletException(e); + } + } + + // View feedback file with Path Traversal vulnerability + String filename = request.getParameter("file"); + if (filename != null) { + // Path traversal vulnerability + File file = new File(FEEDBACK_DIR + filename); + if (file.exists()) { + response.setContentType("text/plain"); + Files.copy(file.toPath(), response.getOutputStream()); + } else { + response.sendError(404, "File not found"); + } + } + } + + @Override + protected void doPost(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + + HttpSession session = request.getSession(); + + // Optional CAPTCHA validation + String captchaEnabled = request.getParameter("captcha_enabled"); + if ("true".equals(captchaEnabled)) { + String captchaInput = request.getParameter("captcha"); + String sessionCaptcha = (String) session.getAttribute("captcha"); + + // Weak comparison - timing attack vulnerability + if (!captchaInput.equals(sessionCaptcha)) { + response.sendError(400, "Invalid CAPTCHA"); + return; + } + } + + // Get form parameters + String name = request.getParameter("name"); + String email = request.getParameter("email"); + String subject = request.getParameter("subject"); + String message = request.getParameter("message"); + String priority = request.getParameter("priority"); + + // Weak random token generation + Random random = new Random(); + String token = String.valueOf(random.nextInt(1000000)); + + // Weak MD5 hashing for email + String emailHash = DigestUtils.md5Hex(email); + + // Store feedback in database with SQL Injection + try { + saveFeedback(name, email, subject, message, priority, token, emailHash); + } catch (Exception e) { + throw new ServletException("Error saving feedback", e); + } + + // Save feedback to file with predictable name + String filename = "feedback_" + token + ".txt"; + File feedbackFile = new File(FEEDBACK_DIR + filename); + + // Write sensitive data to file with weak permissions + try (PrintWriter fileWriter = new PrintWriter(new FileWriter(feedbackFile))) { + fileWriter.println("Name: " + name); + fileWriter.println("Email: " + email); + fileWriter.println("Subject: " + subject); + fileWriter.println("Message: " + message); + fileWriter.println("Priority: " + priority); + fileWriter.println("Token: " + token); + fileWriter.println("Email Hash: " + emailHash); + } + + // Log sensitive information + System.out.println("Feedback submitted by: " + email + " with token: " + token); + + // Redirect with token in URL + response.sendRedirect("/contact-feedback?success=true&token=" + token); + } + + private List