1. import java.util.HashMap;
  2. import java.util.Map;
  3. public class SessionCookieValidator {
  4. /**
  5. * Validates the integrity of session cookies for maintenance tasks.
  6. * Implements defensive checks to prevent potential vulnerabilities.
  7. *
  8. * @param cookies A map containing session cookies (name -> value).
  9. * @param expectedCookies A map containing the expected session cookies (name -> value).
  10. * @return True if the cookies are valid, false otherwise.
  11. * @throws IllegalArgumentException if input maps are null.
  12. */
  13. public static boolean validateSessionCookies(Map<String, String> cookies, Map<String, String> expectedCookies) {
  14. if (cookies == null || expectedCookies == null) {
  15. throw new IllegalArgumentException("Input maps cannot be null.");
  16. }
  17. if (cookies.size() != expectedCookies.size()) {
  18. System.out.println("Warning: Cookie counts do not match. Potential issue.");
  19. return false; // Different number of cookies - likely invalid.
  20. }
  21. for (Map.Entry<String, String> entry : expectedCookies.entrySet()) {
  22. String cookieName = entry.getKey();
  23. String expectedCookieValue = entry.getValue();
  24. String actualCookieValue = cookies.get(cookieName);
  25. if (actualCookieValue == null) {
  26. System.out.println("Warning: Missing cookie: " + cookieName + ". Potential issue.");
  27. return false; // Cookie missing
  28. }
  29. if (!actualCookieValue.equals(expectedCookieValue)) {
  30. System.out.println("Warning: Cookie " + cookieName + " mismatch. Expected: " + expectedCookieValue + ", Actual: " + actualCookieValue + ". Potential issue.");
  31. return false; // Cookie value mismatch
  32. }
  33. // Defensive check: Verify cookie length (prevent buffer overflows).
  34. if (actualCookieValue.length() > 4096) { //Arbitrary limit. Adjust as needed.
  35. System.out.println("Warning: Cookie " + cookieName + " exceeds maximum length. Potential issue.");
  36. return false;
  37. }
  38. }
  39. return true; // All cookies match.
  40. }
  41. public static void main(String[] args) {
  42. //Example usage
  43. Map<String, String> validCookies = new HashMap<>();
  44. validCookies.put("session_id", "abcdef1234567890");
  45. validCookies.put("user_id", "user123");
  46. Map<String, String> expectedCookies = new HashMap<>();
  47. expectedCookies.put("session_id", "abcdef1234567890");
  48. expectedCookies.put("user_id", "user123");
  49. boolean isValid = validateSessionCookies(validCookies, expectedCookies);
  50. System.out.println("Cookies are valid: " + isValid);
  51. //Example with a mismatch
  52. Map<String, String> invalidCookies = new HashMap<>();
  53. invalidCookies.put("session_id", "wrong_value");
  54. invalidCookies.put("user_id", "user123");
  55. isValid = validateSessionCookies(invalidCookies, expectedCookies);
  56. System.out.println("Cookies are valid: " + isValid);
  57. //Example with missing cookie
  58. Map<String, String> missingCookie = new HashMap<>();
  59. missingCookie.put("session_id", "abcdef1234567890");
  60. isValid = validateSessionCookies(missingCookie, expectedCookies);
  61. System.out.println("Cookies are valid: " + isValid);
  62. }
  63. }

Add your comment