>  기사  >  데이터 베이스  >  고유한 정수 식별자를 사용하여 Django의 기본 키를 어떻게 안전하게 난독화할 수 있나요?

고유한 정수 식별자를 사용하여 Django의 기본 키를 어떻게 안전하게 난독화할 수 있나요?

Barbara Streisand
Barbara Streisand원래의
2024-11-24 17:13:12230검색

How Can I Securely Obfuscate Django's Primary Key Using Unique Integer Identifiers?

고유 정수 식별자로 Django의 기본 키 숨기기

Django에서 기본 키는 일반적으로 고유 키 역할을 하는 자동 증가 정수입니다. 테이블의 각 행에 대한 식별자입니다. 그러나 이 키를 URL이나 기타 공개 컨텍스트에 노출하면 개인 정보 보호 및 보안이 손상될 수 있습니다. 이 문서에서는 고유한 특성을 유지하면서 기본 키를 난독화하는 대체 접근 방식을 살펴봅니다.

요구 사항

  • 기본 키 필드 유형은 정수로 유지되어야 합니다.
  • 해시/해시 해제 작업은 수행되지 않습니다. 읽기/쓰기/비교.
  • 되돌릴 수 없는 해싱/암호화 기능.
  • 각 테이블 내의 고유 값만.
  • 더 짧은 경우 간결한 해시 값 URL.

접근 방식

이러한 요구 사항을 해결하기 위해 Instagram의 ID 생성 시스템과 유사한 솔루션이 제안되었습니다. 이 접근 방식에는 시간 기반 구성 요소와 임의 구성 요소로 구성된 고유 ID를 생성하는 작업이 포함됩니다.

ID 생성을 위한 함수

import time
import random

START_TIME = int(time.time() * 1000)  # Some constant timestamp

def make_id():

    t = int(time.time() * 1000) - START_TIME
    u = random.SystemRandom().getrandbits(23)
    id = (t << 23) | u

    return id

def reverse_id(id):

    t = id >> 23
    return t + START_TIME

make_id 함수는 다음을 사용하여 고유 ID를 생성합니다. 41비트 시간 기반 구성 요소와 23비트 임의 구성 요소입니다. reverse_id 함수를 사용하면 생성된 ID에서 타임스탬프를 추출할 수 있습니다.

Model

from django.db import models

class MyClass(models.Model):

    id = models.BigIntegerField(default=make_id, primary_key=True)

make_id 함수를 id 필드의 기본값으로 사용하면 새로운 삽입 시 레코드에 고유 ID가 할당됩니다. 이 접근 방식을 사용하면 기본 키 필드가 정수 데이터 유형을 유지하면서 순차적 특성을 모호하게 만들 수 있습니다. 또한 ID의 임의 구성 요소는 동시 삽입 중에도 충돌을 방지합니다.

사용

이 구현을 통해 기본 키 값은 간결하고 고유한 정수가 됩니다. 주요 핵심 기능을 유지하면서 노출에 강합니다.

위 내용은 고유한 정수 식별자를 사용하여 Django의 기본 키를 어떻게 안전하게 난독화할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.