Maison > base de données > tutoriel mysql > Comment puis-je masquer en toute sécurité la clé primaire de Django à l'aide d'identifiants entiers uniques ?

Comment puis-je masquer en toute sécurité la clé primaire de Django à l'aide d'identifiants entiers uniques ?

Barbara Streisand
Libérer: 2024-11-24 17:13:12
original
235 Les gens l'ont consulté

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

Obscurcir la clé primaire de Django avec des identifiants entiers uniques

Dans Django, la clé primaire est généralement un entier auto-incrémenté qui sert d'entier unique identifiant de chaque ligne d'un tableau. Cependant, exposer cette clé dans des URL ou dans d’autres contextes publics peut compromettre la confidentialité et la sécurité. Cet article explore une approche alternative pour obscurcir la clé primaire tout en conservant sa nature unique.

Exigences

  • Le type de champ de clé primaire doit rester entier.
  • Aucune opération de hachage/unhash pendant la lecture/écriture/comparaison.
  • Irréversible fonction de hachage/chiffrement.
  • Valeurs uniques dans chaque table uniquement.
  • Valeurs hachées concises pour les URL plus courtes.

Approche

Pour répondre à ces exigences, une solution similaire au système de génération d'identifiants d'Instagram est proposée. Cette approche consiste à générer des identifiants uniques composés d'une composante basée sur le temps et d'une composante aléatoire.

Fonction de génération d'identifiants

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
Copier après la connexion

La fonction make_id génère des identifiants uniques en utilisant une composante temporelle de 41 bits et une composante aléatoire de 23 bits. La fonction reverse_id permet d'extraire l'horodatage de l'ID généré.

Modèle

from django.db import models

class MyClass(models.Model):

    id = models.BigIntegerField(default=make_id, primary_key=True)
Copier après la connexion

En utilisant la fonction make_id comme valeur par défaut pour le champ id, nouveau les enregistrements se verront attribuer des identifiants uniques lors de leur insertion. Cette approche garantit que le champ Clé primaire conserve son type de données entier, tout en masquant sa nature séquentielle. De plus, le composant aléatoire de l'ID empêche les collisions même lors d'insertions simultanées.

Utilisation

Avec cette implémentation, les valeurs de clé primaire seront des entiers uniques, concis et résistant à l'exposition tout en conservant leur fonctionnalité de clé primaire.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal