1. import re
  2. def sanitize_header(header_name, header_value):
  3. """
  4. Sanitizes a request header for sandbox usage.
  5. Args:
  6. header_name (str): The name of the header.
  7. header_value (str): The value of the header.
  8. Returns:
  9. tuple: A tuple containing the sanitized header name and value.
  10. Returns (None, None) if sanitization fails.
  11. """
  12. # Sanitize header names: remove invalid characters and limit length
  13. sanitized_name = re.sub(r'[^a-zA-Z0-9_-]', '', header_name)
  14. sanitized_name = sanitized_name[:64] # Limit header name length
  15. # Sanitize header values: remove potentially malicious characters
  16. sanitized_value = header_value.replace('\n', '').replace('\r', '').replace('\t', '')
  17. sanitized_value = re.sub(r'[<>;"\'\\/]', '', sanitized_value)
  18. sanitized_value = sanitized_value[:2048] # Limit header value length
  19. # Additional restrictions (example: no spaces)
  20. sanitized_value = sanitized_value.replace(' ', '')
  21. if not sanitized_name or not sanitized_value:
  22. return None, None # Return None, None if sanitization fails
  23. return sanitized_name, sanitized_value
  24. if __name__ == '__main__':
  25. # Example usage
  26. header_name = "User-Agent: My Very Malicious Header <script>alert('XSS')</script>"
  27. header_value = "Some data with newline\nand carriage return\r and tab\t"
  28. sanitized_name, sanitized_value = sanitize_header(header_name, header_value)
  29. if sanitized_name and sanitized_value:
  30. print(f"Sanitized Header Name: {sanitized_name}")
  31. print(f"Sanitized Header Value: {sanitized_value}")
  32. else:
  33. print("Sanitization failed.")

Add your comment