Исключение BadSignature

Исключение BadSignature относится к модулю django.core.signing и возникает в тех случаях, когда система не может проверить криптографическую подпись данных. Это исключение сигнализирует о том, что переданные данные были изменены, повреждены или подписаны с использованием другого секретного ключа. Оно используется для защиты данных от подделки при передаче между клиентом и сервером или при хранении в ненадежных местах.

Исключение наследуется от ValueError и обычно обрабатывается с помощью конструкции try...except. Наиболее часто встречается при работе с функциями signer.sign и signer.unsign, а также при использовании функций dumps и loads для подписанных данных. Если подпись недействительна, эти методы выбрасывают данное исключение, предотвращая использование скомпрометированных данных.

Синтаксис

pythonfrom django.core.signing import BadSignature

Пример

Попробуем расшифровать данные с неверной подписью:

pythonfrom django.core.signing import Signer, BadSignature

signer = Signer()
invalid_signed_data = "hello_world.INVALID_SIGNATURE"
try:
  res = signer.unsign(invalid_signed_data)
except BadSignature as e:
  print("Bad signature caught:", str(e))

Результат выполнения кода:

python"Bad signature caught: Signature 'INVALID_SIGNATURE' does not match"

Пример

Обработаем исключение при работе с функцией loads:

pythonfrom django.core.signing import loads, BadSignature

corrupted_data = "eyJkYXRhIjoiY29ycnVwdGVkIn0:somebadhash"
try:
  res = loads(corrupted_data)
except BadSignature:
  res = "Invalid signature, returning default value"
print(res)

Результат выполнения кода:

python"Invalid signature, returning default value"

Пример

Использование исключения при проверке подписи с дополнительными параметрами:

pythonfrom django.core.signing import Signer, BadSignature

signer = Signer(salt="myapp")
signed = signer.sign("secret_data")
print("Original signed:", signed)
modified = signed + "extra"
try:
  res = signer.unsign(modified)
except BadSignature:
  res = "Data integrity check failed"
print(res)

Результат выполнения кода:

python"Original signed: secret_data.kj9s8F7dg6s5S4d3F2g"
"Data integrity check failed"

Смотрите также

  • исключение SignatureExpired,
    которое возникает при истечении срока действия подписи
  • исключение IntegrityError,
    которое возникает при нарушении целостности данных
  • исключение ValidationError,
    которое возникает при ошибках валидации формы
  • исключение DoesNotExist,
    которое возникает при отсутствии запрашиваемого объекта