monitoring-api/actions/validations/text.py
2025-10-06 09:30:41 -03:00

63 lines
No EOL
1.9 KiB
Python

import html
import re
class Text:
# Remove as mascaras de números
@staticmethod
def just_numbers(data: str) -> str:
""" Mantêm apenas os numeros """
data = re.sub(r"[^\d]", "", data)
return data
# Verifica se um e-mail é válido
@staticmethod
def is_valid_email(email: str) -> bool:
"""Check if email has a valid structure"""
return bool(re.match(r"^[\w\.-]+@[\w\.-]+\.\w+$", email))
"""
Sanitiza entradas de texto contra XSS e SQL Injection básicos.
- Remove espaços extras
- Escapa entidades HTML
- Remove padrões suspeitos de XSS e SQL Injection
- Normaliza múltiplos espaços em um só
"""
@staticmethod
def sanitize_input(data: str) -> str:
if not data:
return data
# 1) Remove espaços no início e no fim
data = data.strip()
# 2) Escapa entidades HTML (< > & ")
data = html.escape(data)
# 3) Remove múltiplos espaços seguidos
data = re.sub(r"\s+", " ", data)
# 4) Remove tags <script> (com atributos)
data = re.sub(r'<\s*script[^>]*>', '', data, flags=re.IGNORECASE)
data = re.sub(r'<\s*/\s*script\s*>', '', data, flags=re.IGNORECASE)
# 5) Remove javascript: de links
data = re.sub(r'javascript\s*:', '', data, flags=re.IGNORECASE)
# 6) Remove palavras-chave SQL Injection comuns
blacklist = [
"--", ";", "/*", "*/", "@@",
"char(", "nchar(", "varchar(",
"alter", "drop", "exec", "insert",
"delete", "update", "union", "select",
"from", "where"
]
for word in blacklist:
# Verificar se 'word' é uma string não vazia e válida para a regex
if word:
data = re.sub(re.escape(word), "", data, flags=re.IGNORECASE)
return data