Исключение BadSignature
Исключение BadSignature относится к модулю django.core.signing и возникает в тех случаях, когда система не может проверить криптографическую подпись данных. Это исключение сигнализирует о том, что переданные данные были изменены, повреждены или подписаны с использованием другого секретного ключа. Оно используется для защиты данных от подделки при передаче между клиентом и сервером или при хранении в ненадежных местах.
Исключение наследуется от ValueError и обычно обрабатывается с помощью конструкции try...except. Наиболее часто встречается при работе с функциями signer.sign и signer.unsign, а также при использовании функций dumps и loads для подписанных данных. Если подпись недействительна, эти методы выбрасывают данное исключение, предотвращая использование скомпрометированных данных.
Синтаксис
from django.core.signing import BadSignature
Пример
Попробуем расшифровать данные с неверной подписью:
from 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))
Результат выполнения кода:
"Bad signature caught: Signature 'INVALID_SIGNATURE' does not match"
Пример
Обработаем исключение при работе с функцией loads:
from 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)
Результат выполнения кода:
"Invalid signature, returning default value"
Пример
Использование исключения при проверке подписи с дополнительными параметрами:
from 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)
Результат выполнения кода:
"Original signed: secret_data.kj9s8F7dg6s5S4d3F2g"
"Data integrity check failed"
Смотрите также
-
исключение
SignatureExpired,
которое возникает при истечении срока действия подписи -
исключение
IntegrityError,
которое возникает при нарушении целостности данных -
исключение
ValidationError,
которое возникает при ошибках валидации формы -
исключение
DoesNotExist,
которое возникает при отсутствии запрашиваемого объекта