import re
def sanitize_header(header_name, header_value):
"""
Sanitizes a request header for sandbox usage.
Args:
header_name (str): The name of the header.
header_value (str): The value of the header.
Returns:
tuple: A tuple containing the sanitized header name and value.
Returns (None, None) if sanitization fails.
"""
# Sanitize header names: remove invalid characters and limit length
sanitized_name = re.sub(r'[^a-zA-Z0-9_-]', '', header_name)
sanitized_name = sanitized_name[:64] # Limit header name length
# Sanitize header values: remove potentially malicious characters
sanitized_value = header_value.replace('\n', '').replace('\r', '').replace('\t', '')
sanitized_value = re.sub(r'[<>;"\'\\/]', '', sanitized_value)
sanitized_value = sanitized_value[:2048] # Limit header value length
# Additional restrictions (example: no spaces)
sanitized_value = sanitized_value.replace(' ', '')
if not sanitized_name or not sanitized_value:
return None, None # Return None, None if sanitization fails
return sanitized_name, sanitized_value
if __name__ == '__main__':
# Example usage
header_name = "User-Agent: My Very Malicious Header <script>alert('XSS')</script>"
header_value = "Some data with newline\nand carriage return\r and tab\t"
sanitized_name, sanitized_value = sanitize_header(header_name, header_value)
if sanitized_name and sanitized_value:
print(f"Sanitized Header Name: {sanitized_name}")
print(f"Sanitized Header Value: {sanitized_value}")
else:
print("Sanitization failed.")
Add your comment