Rumah  >  Artikel  >  pangkalan data  >  Bagaimanakah Saya Boleh Mengelirukan Kunci Utama Django dengan Selamat Menggunakan Pengecam Integer Unik?

Bagaimanakah Saya Boleh Mengelirukan Kunci Utama Django dengan Selamat Menggunakan Pengecam Integer Unik?

Barbara Streisand
Barbara Streisandasal
2024-11-24 17:13:12231semak imbas

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

Mengkaburkan Kunci Utama Django dengan Pengecam Integer Unik

Dalam Django, kunci utama lazimnya ialah integer bertambah automatik yang berfungsi sebagai unik pengecam bagi setiap baris dalam jadual. Walau bagaimanapun, mendedahkan kunci ini dalam URL atau konteks lain yang dihadapi awam boleh menjejaskan privasi dan keselamatan. Artikel ini meneroka pendekatan alternatif untuk mengelirukan kunci utama sambil mengekalkan sifat uniknya.

Keperluan

  • Jenis medan Kunci Utama hendaklah kekal Integer.
  • Tiada operasi cincang/nyahcincang semasa baca/tulis/perbandingan.
  • Fungsi pencincangan/penyulitan tidak boleh balik.
  • Nilai unik dalam setiap jadual sahaja.
  • Nilai cincang ringkas untuk URL yang lebih pendek.

Pendekatan

Untuk menangani perkara ini keperluan, penyelesaian yang serupa dengan sistem penjanaan ID Instagram dicadangkan. Pendekatan ini melibatkan penjanaan ID unik yang terdiri daripada komponen berasaskan masa dan komponen rawak.

Fungsi untuk Penjanaan 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

Fungsi make_id menjana ID unik menggunakan komponen berasaskan masa 41-bit dan komponen rawak 23-bit. Fungsi reverse_id membenarkan untuk mengekstrak cap masa daripada ID yang dijana.

Model

from django.db import models

class MyClass(models.Model):

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

Dengan menggunakan fungsi make_id sebagai nilai lalai untuk medan id, baharu rekod akan diberikan ID unik apabila dimasukkan. Pendekatan ini memastikan bahawa medan Kunci Utama mengekalkan jenis data integernya, sambil mengaburkan sifat urutannya. Selain itu, komponen rawak ID menghalang perlanggaran walaupun semasa sisipan serentak.

Penggunaan

Dengan pelaksanaan ini, nilai kunci utama akan menjadi integer unik yang ringkas dan tahan pendedahan sambil mengekalkan fungsi utama utamanya.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengelirukan Kunci Utama Django dengan Selamat Menggunakan Pengecam Integer Unik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn