UUID Oluşturucu - Evrensel Benzersiz Tanımlayıcı Oluşturun
UUID Nedir?
UUID (Evrensel Benzersiz Tanımlayıcı), bilgisayar sistemlerinde bilgiyi benzersiz bir şekilde tanımlamak için kullanılan 128 bitlik bir tanımlayıcıdır. UUID, RFC 4122’ye göre standartlaştırılmıştır ve muazzam entropisi sayesinde pratik olarak sıfır çakışma olasılığı garanti eder – bu, bağımsız olarak oluşturulan iki UUID’nin neredeyse kesinlikle benzersiz olacağı anlamına gelir.
UUID’nin standart bir formatı vardır: xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx, burada her x bir onaltılık rakamdır (0-9, a-f), M UUID sürümünü ve N varyantı belirtir.
UUID Sürümleri
UUID v1 (Zaman Damgası + MAC Adresi)
UUID v1, mevcut zaman damgasına (timestamp) ve rastgele bir değere (tarayıcıda MAC adresi yerine) dayanır. 15 Ekim 1582’den (Gregoryen takvimi) itibaren 100 nanosaniyelik aralıkları kullanır.
Kullanım Alanları:
- UUID’lerin kronolojik olarak sıralanması gereken durumlar
- Hata ayıklama ve günlük kaydı (UUID, oluşturulma zamanı bilgisini içerir)
- Zaman senkronizasyonlu dağıtılmış sistemler
Örnek: 6ba7b810-9dad-11d1-80b4-00c04fd430c8
Avantajları:
- UUID’ler oluşturulma zamanına göre kronolojik olarak sıralanabilir
- Denetim ve hata ayıklama için kullanışlıdır
- Zaman damgası bilgisi içerir
Dezavantajları:
- Potansiyel güvenlik riski – zaman damgası içerir
- Tarayıcıda gerçek MAC adresini içermez (rastgele bir değerle değiştirilir)
- Kötü DB lokalitesi (zaman damgası düşük dereceli bitlerde bulunur)
UUID v3 (MD5 Özeti)
UUID v3, bir UUID ad alanı ve adının MD5 özeti kullanılarak oluşturulur. Deterministiktir – aynı ad alanı + ad her zaman aynı UUID’yi oluşturur.
Kullanım Alanları:
- URL’leri, DNS adlarını veya diğer tanımlayıcıları UUID’ye dönüştürme
- Yeniden üretilebilir UUID’lere ihtiyaç duyduğunuz durumlar
- Farklı kimlik sistemleri arasında eşleme
Örnek: a3bb189e-8bf9-3888-9912-ace4e6543002
Avantajları:
- Deterministik (aynı girdi = aynı çıktı)
- Bilinen tanımlayıcıları dönüştürmek için idealdir
- Farklı girdiler için çakışma olmaz
Dezavantajları:
- MD5 eski bir algoritmadır (v5’i tercih edin)
- Ad alanı ve ad gerektirir
- Orijinal girdiyi geri almak mümkün değildir
UUID v4 (Rastgele) - ÖNERİLEN
En çok kullanılan UUID sürümü. UUID v4, kriptografik olarak güvenli bir rastgele sayı üreteci (crypto.getRandomValues()) kullanılarak tamamen rastgele oluşturulur.
Kullanım Alanları:
- Veritabanı birincil anahtarları
- Oturum kimlikleri (session IDs)
- Benzersiz dosya adları
- API belirteçleri (API tokens)
- Garanti edilmiş benzersiz bir kimliğe ihtiyaç duyduğunuz genel amaçlar
Örnek: f47ac10b-58cc-4372-a567-0e02b2c3d479
Avantajları:
- Maksimum entropi ve güvenlik
- Zamana veya sistem parametrelerine bağımlılık yok
- En basit uygulama
Çakışma Olasılığı: Saniyede 1 milyar UUID’nin 100 yıl boyunca üretilmesi durumunda, çakışma olasılığı yaklaşık %0,00000006’dır.
UUID v5 (SHA-1 Özeti)
UUID v5, v3 ile aynıdır, ancak MD5 yerine SHA-1 kullanır. v3’e daha modern ve güvenli bir alternatiftir.
Kullanım Alanları:
- v3 ile aynı, ancak daha iyi güvenlik ile
- Yeni projeler için v3 yerine tercih edilir
- URL’lerden, DNS adlarından, OID’lerden, X.500 DN’lerden UUID oluşturma
Örnek: 886313e1-3b8a-5372-9b90-0c9aee199e5d
Avantajları:
- Deterministik
- SHA-1, MD5’ten daha güçlüdür
- Sistemler arasında eşleme için uygundur
Dezavantajları:
- SHA-1 de eski kabul edilir (ancak MD5’ten hala daha güvenlidir)
- Ad alanı ve ad gerektirir
UUID v6 (Sıralı Zaman Damgası)
UUID v6, daha iyi veritabanı indekslemesi için yeniden düzenlenmiş zaman bitlerine sahip v1’in geliştirilmiş bir sürümüdür. Veritabanlarındaki lokalite sorunlarını çözmek için tasarlanmıştır.
Kullanım Alanları:
- Zaman sıralamalı veritabanı birincil anahtarları
- Kronolojik sıralama ve veritabanı performansı gerektiren sistemler
- v1’e daha modern bir alternatif
Örnek: 1ec9414c-232a-6b00-b3c8-9e6bdeced846
Avantajları:
- v1’den daha iyi veritabanı lokalitesi (zaman damgası yüksek dereceli bitlerde)
- Kronolojik sıralama
- UUID standardıyla uyumlu
Dezavantajları:
- v1/v4’e göre daha az kullanılır
- Hala zaman bilgisi içerir (güvenlik riski)
UUID v7 (Unix Zaman Damgası)
UUID v7, Unix zaman damgasını (1970’ten bu yana milisaniyeler) + rastgele bitleri kullanır. En iyi veritabanı lokalitesine sahip en yeni UUID sürümüdür.
Kullanım Alanları:
- Modern veritabanı birincil anahtarları
- Performans + zaman sıralaması gerektiren sistemler
- Yeni projelerde v1/v6 yerine geçer
Örnek: 017f22e2-79b0-7cc3-98c4-dc0c0c07398f
Avantajları:
- Tüm sürümler arasında en iyi veritabanı lokalitesi
- Unix zaman damgası standarttır
- Rastgelelik ve zaman sıralaması avantajlarını birleştirir
Dezavantajları:
- Nispeten yeni bir spesifikasyon (RFC 4122bis)
- Eski sistemlerde daha az desteklenir
Hangi UUID Sürümünü Kullanmalısınız?
Karar Rehberi
Maksimum güvenlik ve rastgelelik mi istiyorsunuz? → UUID v4 kullanın (en yaygın seçenek)
Zaman sıralaması ve veritabanı performansı mı istiyorsunuz? → UUID v7 (modern) veya UUID v6 (standart) kullanın
Mevcut tanımlayıcılardan yeniden üretilebilir UUID’ler mi istiyorsunuz? → UUID v5 (SHA-1) veya UUID v3 (MD5, eski) kullanın
Zaman damgası ve denetim kaydı mı istiyorsunuz? → UUID v1 kullanın (eski, daha kötü veritabanı performansı)
Veritabanları
Yeni projeler için: UUID v7 veya v4
- v7 zaman sıralaması + performans için idealdir
- v4 zaman bilgisi olmadan maksimum rastgelelik için
Eski sistemler için: UUID v1 veya v6
- v6, v1’den daha iyi veritabanı lokalitesine sahiptir
- v1 geniş çapta desteklenir
UUID’nin birincil anahtar olarak avantajları:
- Küresel Benzersizlik – Farklı veritabanlarındaki verileri çakışma olmadan birleştirebilirsiniz
- Güvenlik – Sıralı kimliklerin (1, 2, 3…) aksine, sonraki değerler tahmin edilemez
- Dağıtılmış Sistemler – UUID’ler birden fazla sunucuda koordinasyon olmadan bağımsız olarak oluşturulabilir
- Veritabanı Birleştirme – İki veritabanı birleştirildiğinde çakışmalar oluşmaz
Dezavantajları:
- Daha büyük boyut (bir tamsayı için 4-8 bayta karşılık 16 bayt)
- Bazı veritabanlarında daha yavaş indeksleme (daha iyi performans için v6/v7 kullanın)
- İnsanlar için daha az okunabilir
API ve Web Hizmetleri
- REST API – Kaynaklar için benzersiz tanımlayıcılar
- GraphQL – Düğümler için küresel tanımlayıcılar
- Webhook’lar – İstek ve yanıt takibi
- Belirteçler – Oturum Kimlikleri (Session IDs), yenileme belirteçleri (refresh tokens)
Dosyalar ve Depolama
- Dosya Adları – Yükleme sırasında çakışmaları önleme
- S3/Bulut Depolama – Nesneler için benzersiz yollar
- Önbellek Anahtarları – Önbellek sistemlerindeki tanımlayıcılar
Frontend Uygulamaları
- React/Vue bileşenleri – Listeler için benzersiz anahtarlar
- Geçici Kimlikler – Veritabanına kaydetmeden önceki kimlikler
- Yerel Depolama – Kayıtlı veriler için anahtarlar
- Çevrimdışı öncelikli uygulamalar – Sunucuya bağlanmadan kimlik oluşturma
Oluşturucunun Gelişmiş Özellikleri
Özel Zaman Damgası ile UUID Oluşturma
Zaman tabanlı sürümler (v1, v6, v7) için, tarih-saat seçici kullanarak herhangi bir zaman damgası seçebilirsiniz. Bu durumlar için kullanışlıdır:
Test Etme:
- Geçmişte oluşturulan UUID’leri simüle etme
- Veritabanlarında zaman sıralamasını test etme
- Hata ayıklama için UUID’leri yeniden üretme
Veri Geçişi:
- Tarihsel zaman damgalarıyla UUID’ler oluşturma
- Doğru zaman damgası değerleriyle verileri doldurma (backfilling)
- Farklı zaman dilimlerinden veri içe aktarma
Denetim ve Uyumluluk:
- Kayıt oluşum zamanına göre UUID’leri yeniden yapılandırma
- Geriye dönük tanımlayıcı oluşturma
Kullanım Örneği:
- v1, v6 veya v7 sürümünü seçin
- Tarih-saat seçiciyi kullanarak tarih ve saati ayarlayın
- Kendi zaman damganızla UUID oluşturun
Karma Tabanlı UUID (v3, v5)
Deterministik UUID’ler için v3 (MD5) veya v5 (SHA-1) sürümlerini kullanabilirsiniz:
Nasıl Kullanılır:
- Tanımlayıcınızın türüne göre ad alanını seçin
- Adı/değeri girin
- UUID oluşturun
Örnekler:
| Ad Alanı | Ad (Girdi) | Kullanım |
|---|---|---|
| DNS | example.com | Alan adını UUID’ye dönüştürme |
| DNS | google.com | Her web sitesinin benzersiz bir UUID’si vardır |
| URL | https://example.com/page | URL’yi UUID’ye dönüştürme |
| URL | https://api.example.com/users/123 | API uç noktası olarak UUID |
| OID | 1.3.6.1.4.1.343 | Nesne Tanımlayıcıyı UUID’ye dönüştürme |
| X.500 | CN=John Doe,O=Company | Ayırt Edici Adı UUID’ye dönüştürme |
Önemli Özellikler:
- ✅ Deterministik: Aynı girdi = her zaman aynı UUID
- ✅ Yeniden Üretilebilir: UUID’yi istediğiniz zaman yeniden oluşturabilirsiniz
- ✅ Tutarlı: Farklı sistemler arasında aynı UUID
- ❌ Çözülemez: UUID’den orijinal adı geri almak mümkün değildir
- ℹ️ Tek UUID: v3/v5 için her zaman yalnızca bir UUID oluşturulur (aynı girdi = aynı çıktı)
Pratik Kullanım:
// Örnek: URL'yi UUID v5'e dönüştürme
Namespace: URL
Název: https://example.com/api/users/123
Výsledek: 886313e1-3b8a-5372-9b90-0c9aee199e5d
// Aynı girdi = her zaman aynı UUID
Namespace: DNS
Název: google.com
Výsledek: google.com için her zaman aynı UUID
UUID’yi Güvenli Bir Şekilde Nasıl Kullanılır?
Kriptografik Güvenlik
Oluşturucumuz, kriptografik olarak güvenli bir rastgele sayı üreteci olan crypto.getRandomValues() kullanır. Tahmin edilebilir ve güvenlik amaçları için uygun olmayan Math.random()’ın aksine, crypto.getRandomValues() aşağıdaki durumlar için uygun gerçek entropi sağlar:
- Güvenlik belirteçleri oluşturma
- Oturum Kimlikleri (Session IDs)
- API anahtarları
- Kriptografik uygulamalar
UUID Sürümlerinin Karşılaştırması
| Sürüm | Temel | Çakışma | Zaman Sıralaması | DB Performansı | Kullanım |
|---|---|---|---|---|---|
| v1 | Zaman Damgası + MAC | Düşük | ✅ Evet | ❌ Daha Kötü | Eski, denetim |
| v3 | MD5 Özeti | Yok (deterministik) | ❌ Hayır | ⚠️ Orta | Dönüşümler (eski) |
| v4 | Rastgele | Aşırı Düşük | ❌ Hayır | ⚠️ Orta | Genel kullanım |
| v5 | SHA-1 Özeti | Yok (deterministik) | ❌ Hayır | ⚠️ Orta | Dönüşümler (önerilen) |
| v6 | Sıralı Zaman Damgası | Düşük | ✅ Evet | ✅ Daha İyi | Zamanlı modern DB’ler |
| v7 | Unix Zaman Damgası | Düşük | ✅ Evet | ✅ En İyi | Yeni projeler |
UUID ile Diğer Tanımlayıcılar Karşılaştırması
| Tip | Boyut | Çakışma | Zaman Sıralaması | Kullanım |
|---|---|---|---|---|
| Otomatik Artan Kimlik | 4-8 bayt | Tablo içinde garantili benzersizlik | ❌ | Basit uygulamalar, yerel DB |
| UUID v4 | 16 bayt | Pratik olarak imkansız | ❌ | Dağıtılmış sistemler, API |
| UUID v7 | 16 bayt | Pratik olarak imkansız | ✅ | Performanslı modern DB’ler |
| ULID | 16 bayt | Pratik olarak imkansız | ✅ | UUID + sözlükbilimsel sıralama |
| Snowflake ID | 8 bayt | Doğru yapılandırmada garantili benzersizlik | ✅ | Twitter, dağıtılmış sistemler |
| NanoID | Yapılandırılabilir | Uzunluğa bağlı | ❌ | URL dostu Kimlikler |
Farklı Dillerde Uygulama
JavaScript/TypeScript
// UUID v4 - En basit yol (modern tarayıcılar)
const uuid = crypto.randomUUID();
// UUID v4 - Manuel uygulama
function generateUUIDv4() {
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {
const r = (crypto.getRandomValues(new Uint8Array(1))[0] & 0x0f) >> (c === 'x' ? 0 : 2);
const v = c === 'x' ? r : (r & 0x3) | 0x8;
return v.toString(16);
});
}
// UUID v7 - Veritabanları için önerilir
function generateUUIDv7() {
const timestamp = Date.now();
const timeHi = (timestamp >> 16).toString(16).padStart(8, '0');
const timeLow = (timestamp & 0xFFFF).toString(16).padStart(4, '0');
const randomBytes = crypto.getRandomValues(new Uint8Array(10));
const randomHex = Array.from(randomBytes)
.map(b => b.toString(16).padStart(2, '0'))
.join('');
return `${timeHi}-${timeLow}-7${randomHex.substr(0, 3)}-${randomHex.substr(3, 4)}-${randomHex.substr(7)}`;
}
Python
import uuid
# UUID v4
uuid_v4 = str(uuid.uuid4())
# Output: '6ba7b810-9dad-11d1-80b4-00c04fd430c8'
# UUID v1
uuid_v1 = str(uuid.uuid1())
Java
import java.util.UUID;
// UUID v4
String uuidV4 = UUID.randomUUID().toString();
PHP
// UUID v4 (PHP 7+)
function generateUUID() {
return sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
mt_rand(0, 0xffff), mt_rand(0, 0xffff),
mt_rand(0, 0xffff),
mt_rand(0, 0x0fff) | 0x4000,
mt_rand(0, 0x3fff) | 0x8000,
mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff)
);
}
C#
using System;
// UUID v4
Guid uuid = Guid.NewGuid();
string uuidString = uuid.ToString();
En İyi Uygulamalar
Veritabanında UUID Depolama
PostgreSQL:
CREATE TABLE users (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
email VARCHAR(255) NOT NULL,
created_at TIMESTAMP DEFAULT NOW()
);
MySQL 8.0+:
CREATE TABLE users (
id BINARY(16) PRIMARY KEY DEFAULT (UUID_TO_BIN(UUID())), email VARCHAR(255) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
İpucu: MySQL’de UUID’leri yer kazanmak ve daha hızlı indeksleme için CHAR(36) yerine BINARY(16) olarak depolayın.
UUID Doğrulama
function isValidUUID(uuid) {
const regex = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
return regex.test(uuid);
}
UUID Dönüşümü
// Tireleri kaldırma
const compact = uuid.replace(/-/g, '');
// Tireleri geri ekleme
function formatUUID(compactUuid) {
return [
compactUuid.substring(0, 8),
compactUuid.substring(8, 12),
compactUuid.substring(12, 16),
compactUuid.substring(16, 20),
compactUuid.substring(20, 32)
].join('-');
}
Sorun Giderme
UUID v3/v5 Çalışmıyor
Sorun: v3 veya v5 seçtikten sonra hiçbir şey oluşmuyor
Çözüm:
- ✅ “Ad” alanını doldurduğunuzdan emin olun - bu zorunludur!
- ✅ Girişinizin türüne göre doğru ad alanını seçin
- ✅ Geçerli giriş örnekleri:
- DNS:
example.com,google.com - URL:
https://example.com/page - Herhangi bir metin:
moje-aplikace-v1
- DNS:
İpucu: Önce test gibi basit bir değer ve DNS ad alanı deneyin.
Zaman tabanlı UUID (v1, v6, v7) garip bir zamana sahip
Sorun: Oluşturulan UUID beklenmedik bir zaman damgasına sahip
Çözüm:
- ✅ Tarih-saat seçiciyi kontrol edin - doğru zaman ayarlı mı?
- ✅ Tarih-saat seçici yerel saat diliminizi kullanır
- ✅ Mevcut zaman için tarih-saat seçiciyi boş bırakın
UUID Kopyalanamıyor
Sorun: “Tümünü Kopyala” düğmesi çalışmıyor
Çözüm:
- ✅ UUID oluşturduğunuzdan emin olun (boş değiller)
- ✅ Bazı tarayıcılar pano API’si için HTTPS gerektirir
- ✅ Alternatif olarak, metin alanındaki metni seçin ve manuel olarak kopyalayın (Ctrl+C)
Sıkça Sorulan Sorular (SSS)
UUID çakışması meydana gelebilir mi?
Teorik olarak evet, ancak olasılık astronomik derecede düşüktür. Saniyede 1 milyar v4 UUID'nin 100 yıl boyunca oluşturulması durumunda, çakışma olasılığı yaklaşık %0,00000006'dır. Pratikte çakışma asla yaşanmaz.UUID veritabanında birincil anahtar olarak uygun mu?
Kullanım durumuna bağlıdır. UUID, dağıtılmış sistemler ve küresel benzersizliğe ihtiyaç duyduğunuz durumlar için idealdir. Tek bir veritabanına sahip basit uygulamalar için otomatik artan birincil anahtar daha verimli olabilir.Bu araçla oluşturulan UUID'ler güvenli mi?
Evet, kriptografik olarak güvenli rastgele değerler sağlayan Web Kripto API'sini (`crypto.getRandomValues()`) kullanıyoruz. Her şey yerel olarak tarayıcınızda gerçekleşir.UUID sürümleri arasındaki fark nedir?
- **v1**: Zaman damgası + MAC/rastgele - kronolojik sıralama, daha kötü DB performansı - **v3/v5**: Karma tabanlı - deterministik, bilinen tanımlayıcıları dönüştürmek için - **v4**: Rastgele - en güvenli, en çok kullanılan - **v6**: Yeniden düzenlenmiş zaman damgası - v1'den daha iyi DB performansı - **v7**: Unix zaman damgası - en iyi DB performansı + zaman sıralamasıHangi UUID sürümünü kullanmalıyım?
Çoğu durum için **v4**'ü (rastgele) kullanın. Zaman sıralaması olan veritabanları için **v7**'yi (modern) veya **v6**'yı (standart) kullanın. Bilinen tanımlayıcıları (URL, DNS) dönüştürmek için **v5**'i (SHA-1) kullanın.UUID'yi belirteçler ve API anahtarları için kullanabilir miyim?
UUID v4, oturum kimlikleri ve benzeri belirteçler için uygundur. API anahtarları için daha uzun rastgele dizeler (örneğin 256-bit değerler) veya özel kütüphaneler kullanmayı düşünün.UUID'ler ne kadar büyüktür?
UUID 128 bittir (16 bayt). Tireli dize formatında 36 karakter yer kaplar. Tireler olmadan 32 onaltılık karakterdir.UUID Alternatifleri
ULID (Evrensel Benzersiz Sözlükbilimsel Olarak Sıralanabilir Tanımlayıcı)
- 128-bit kimlik (UUID ile aynı)
- Oluşturulma zamanına göre sözlükbilimsel olarak sıralanabilir
- Daha kompakt gösterim (36 karakter yerine 26 karakter)
- Büyük/küçük harfe duyarsız base32 kodlama
Örnek: 01ARZ3NDEKTSV4RRFFQ69G5FAV
NanoID
- UUID’den daha küçük boyut (standart olarak 21 karakter)
- URL dostu (özel karakterler olmadan)
- Daha hızlı oluşturma
- Yapılandırılabilir uzunluk ve alfabe
Örnek: V1StGXR8_Z5jdHi6B-myT
Snowflake Kimliği (Twitter)
- 64-bit kimlik (UUID’den daha küçük)
- Zamana göre sıralanabilir
- Çalışan kimliği ve sıra numarası içerir
- Merkezi bir yapılandırma gerektirir
Örnek: 1234567890123456789
Performans ve Optimizasyon
Oluşturma Hızı
Oluşturucumuz şunları oluşturabilir:
- 1 UUID: < 1 ms
- 100 UUID: ~10-20 ms
- 1000 UUID: ~100-200 ms
Performans İpuçları
- Toplu Oluşturma – Çok sayıda UUID’ye ihtiyacınız varsa, tek tek yerine toplu olarak oluşturun
- DB’de Depolama – Hızlı arama için UUID sütunlarını indeksleyin
- Sıkıştırma – UUID’leri dize (36 bayt) yerine ikili biçimde (16 bayt) depolayın
- Önbellekleme – Bazı durumlarda, UUID’leri önceden oluşturabilir ve önbelleğe alabilirsiniz
Geliştiriciler İçin
UUID v4 Yapısı
xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx
| | | | |
| | | | └─ 48 bit rastgele veri (node)
| | | └────── Varyant ile 16 bit rastgele veri (clock_seq)
| | └─────────── 12 bit rastgele veri + 4 bit sürüm (time_hi_and_version)
| └──────────────── 16 bit rastgele veri (time_mid)
└───────────────────────── 32 bit rastgele veri (time_low)
- Sürüm (4 bit): her zaman
0100(ikili) =4(onaltılık) - Varyant (2-3 bit): RFC 4122 için her zaman
10(ikili)
UUID Test Etme
// Jest test
describe('UUID Generator', () => {
test('generates valid UUID v4', () => {
const uuid = generateUUIDv4();
const regex = /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
expect(regex.test(uuid)).toBe(true);
});
test('generates unique UUIDs', () => {
const uuid1 = generateUUIDv4();
const uuid2 = generateUUIDv4();
expect(uuid1).not.toBe(uuid2);
});
});
Güvenlik Yönleri
UUID ile Yapılmaması Gerekenler
❌ Hassas uygulamalar için UUID v1 kullanmayın – Zaman damgası içerir, bu bir güvenlik riski olabilir
❌ UUID oluşturmak için Math.random() kullanmayın – Kriptografik olarak güvenli değildir
❌ Yetkilendirme için UUID’ye güvenmeyin – UUID tahmin edilebilir (aşırı derecede düşük olasılıkla bile olsa)
❌ UUID’leri şifrelemeden çerezlerde saklamayın – İmzalı çerezler veya JWT kullanın
Yapılması Gerekenler
✅ Çoğu durum için UUID v4 kullanın – En yüksek entropi ve güvenlik
✅ UUID’yi diğer güvenlik önlemleriyle birleştirin – Oturum yönetimi için HTTPS, HttpOnly çerezleri ve kısa süre son kullanma kullanın
✅ UUID’yi sunucuda doğrulayın – Her zaman UUID’nin formatını ve sürümünü kontrol edin
✅ Kriptografik olarak güvenli rastgelelik kaynakları kullanın – Tarayıcıda crypto.getRandomValues(), Linux’ta /dev/urandom
İlginç Bilgiler
- Mümkün olan UUID v4 sayısı: 2^122 ≈ 5.3 × 10^36 (340 undecillion)
- Gerekli çakışma: %50 çakışma olasılığı için 2.71 × 10^18 UUID (2.71 katrilyon) oluşturmanız gerekir
- Tüm olası UUID’lerin boyutu: Her UUID’yi 16 bayt olarak depolasaydık, tüm alan 85 zettabayt (85 milyar terabayt) yer kaplardı
- Kökeni: UUID, 1990 yılında DCE’nin (Dağıtılmış Hesaplama Ortamı) bir parçası olarak standartlaştırıldı