diff --git a/python/server.py b/python/server.py index 9ed9b91..8efa30a 100644 --- a/python/server.py +++ b/python/server.py @@ -16,10 +16,6 @@ from flask_talisman import Talisman import influxdb_client, time from influxdb_client import InfluxDBClient, Point, WritePrecision from influxdb_client.client.write_api import SYNCHRONOUS -from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes -from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC -from cryptography.hazmat.primitives import hashes -from cryptography.hazmat.backends import default_backend import ldap3 # Carregar variáveis de ambiente do arquivo .env @@ -137,11 +133,19 @@ def get_influxdb_config(domain, mysql): return json_data # Retorna todo o JSON carregado @app.route('/login', methods=['POST']) -@csrf.exempt # Endpoints de autenticação como este podem ser excluídos da proteção CSRF, pois o token CSRF não está disponível antes do login; remova este decorador se quiser aplicar proteção CSRF. +@csrf.exempt # Endpoints de autenticação como este podem ser excluídos da proteção CSRF, remova se quiser aplicar. def login(): data = request.get_json() username_full = data.get('username') # Extrai o e-mail completo do usuário dos dados da requisição. password = data.get('password') # Extrai a senha dos dados da requisição. + + # Verificação básica para detecção de padrões de SQL Injection + sql_injection_pattern = r"(--|\b(SELECT|UNION|INSERT|UPDATE|DELETE|DROP|CREATE|ALTER)\b|;|'|\")" + + # Checar se o username_full ou o password contêm padrões suspeitos + if re.search(sql_injection_pattern, username_full, re.IGNORECASE) or re.search(sql_injection_pattern, password, re.IGNORECASE): + return jsonify({'msg': 'A solicitação foi bem formada, mas não pôde ser atendida devido a erros semânticos.'}), 422 # Retorna o status 422 + # Validação do formato do e-mail if not re.match(r"[^@]+@[^@]+\.[^@]+", username_full): return jsonify({'msg': 'Formato de e-mail inválido'}), 400