PII tespitinde en kolay hata, regex'i geniş bırakmak. \d{11} yazarsınız, iş biter. Sonuçta T.C. kimlik numarası 11 haneli.
Sorun şu ki 11 haneli başka şeyler de var: sipariş numaraları, işlem kimlikleri, telefon numaraları (başındaki sıfırla), fatura referansları, barkod parçaları.
Fazla hassas tarayıcının sonu
Bir tarayıcı her 11 haneli sayıyı PII olarak işaretlediğinde şu zincir başlıyor:
- Üretim trafiğinin beklenenden çok daha büyük bir kısmı PII sinyali doğuruyor.
- Bu isteklere maskeleme, önbellek kapatma ve bölge çivileme uygulanıyor.
- Maliyet artıyor, önbellek isabet oranı düşüyor, bazı istekler gereksiz yere reddediliyor.
- Ekip kuralı gevşetiyor ya da tamamen kapatıyor.
Dördüncü adım kritik. Fazla hassas ayarlanmış bir güvenlik kontrolü, kapatılmış bir güvenlik kontrolüne dönüşüyor — ve bu, hiç yazılmamış olmasından kötü, çünkü arada bir güvenlik hissi yaşandı.
Doğrulama algoritması
T.C. kimlik numarasının bir doğrulama yapısı var. Kabaca:
- 11 hane, ilki sıfır olamaz
- İlk 10 hanenin belirli bir ağırlıklı toplamı 10. haneyi veriyor
- İlk 10 hanenin toplamının mod 10'u 11. haneyi veriyor
Bu kontroller uygulandığında rastgele bir 11 haneli sayının geçme olasılığı yüzde birin altına düşüyor. Sipariş numaraları geçmiyor. Telefon numaraları geçmiyor.
Aynı mantık diğer türler için de geçerli:
| Tür | Doğrulama |
|---|---|
| Kredi kartı | Luhn algoritması |
| IBAN | Ülke kodu + uzunluk + mod-97 |
| T.C. kimlik | Ağırlıklı toplam + mod-10 |
Doğrulaması olan her tür için doğrulamayı uygulamak, tespit kalitesini regex'ten tamamen farklı bir yere taşıyor.
Sinyalin üçüncü hâli
Tespit ikili bir şey değil. Sinyal şu üç bilgiyi taşıyor:
{ "detected": false, "types": [], "available": true }
available alanı, taramanın yapılabildiğini söylüyor. Tarayıcı çalışamadıysa — bağımlılık düştü, zaman aşımı oldu, içerik çözülemedi — available: false oluyor.
Bu ayrım denetimde en çok işe yarayan şey. Çünkü şu iki cümle aynı değil:
- "PII tespit edilmedi."
- "PII taraması yapılamadı."
Sinyalin yokluğunu temizlik sanan bir kural, en pahalı hatayı yapıyor. Doğru kural available alanını okuyor ve tarama yapılamadığında temkinli davranıyor:
- name: tarama-yapilamadi-temkinli
when:
- field: signals.pii.available
operator: is
value: false
then:
effect: route
route:
candidates: [yerel-model]
fallbackToOriginal: false
obligations:
cache: { mode: off }
auditTags: [pii_scan_unavailable]
Bu kural, tespit edilmiş PII kuralından daha az konuşulan ama en az onun kadar önemli olan kural.
Etiketler
Bu yazı henüz diğer dilde mevcut değil.
Blog'a dön