Tüm Makaleler
SecurityClients

WordPress Magic Link'ler HMAC ile Nasıl Güvenli Kalır

e
erdincbulat
August 26, 2026
8 dk okuma
Erdo Client Preview

Özetle: bir WordPress magic link, HMAC-SHA256 hash'i — kendisi değil — veritabanında saklanan uzun, rastgele bir token'dır. Linke sahip olan herkes şifresiz girer; veritabanını çalan herkes ise çalışan bir linke dönüştüremeyeceği bir hash elde eder. Güvenlik modelinin tamamı bu tek cümlede — yazının geri kalanı bunun neden işe yaradığını anlatıyor.

Eski Yöntemle Erişim Paylaşmanın Sorunu

Bir müşteriye staging URL'i veya paylaşılan bir sayfa şifresi verdiysen, başarısızlık noktalarını zaten biliyorsun:

  • Paylaşılan şifre herkes için aynıdır. Hangi müşterinin daha ileri paylaştığını anlayamazsın, iptal etmek ise tüm ziyaretçileri aynı anda dışarı atar — incelemenin ortasındaki müşteri dahil.
  • Staging URL'leri indekslenir. Bir noindex header'ı unut, Google onu bulur. "Listelenmemiş" ile "gizli" aynı şey değildir.
  • İkisi de kendiliğinden süresi dolmaz. Altı ay sonra, eski bir müşterinin staging test edicisinin tarayıcı geçmişine kaydettiği o link hâlâ çalışıyordur.

Bunların hiçbiri şifre gücü sorunu değil. Bunlar kimlik sorunları — sistemin kimin kimlik bilgisini kullandığını bilmesinin bir yolu yok, sadece kimlik bilgisinin doğru olduğunu biliyor.

Bir Magic Link Aslında Nedir

Magic link, "herkesin bildiği bir sırrı bildiğini kanıtla"yı "kimsede olmayan bir token'ı elinde tuttuğunu kanıtla"ya çevirir. Erdo Client Preview'da bu token, tahmin etmek hesaplama açısından imkansız olacak kadar uzun, kriptografik olarak rastgele bir dizedir — kişi başına, amaç başına üretilir, kendi etiketi, süresi ve kullanım sayacı vardır.

Kritik nokta: ham token sana yalnızca oluşturma anında, kopyalayıp gönderdiğin URL'nin içinde bir kez gösterilir. Geri okunabilecek bir biçimde veritabanına asla yazılmaz.

Neden Sadece Token'ı Saklamak Yerine HMAC

İşte çoğu "magic link" anlatısının atladığı kısım. Ham token'ı veritabanında saklamak — kimsenin bakmadığı bir sütunda olsa bile — düz metin şifreleri saklamakla aynı riski yaratır: bir SQL injection veya sızan veritabanı yedeği, aktif her linkin bir saldırgan tarafından kullanılabilir hale gelmesinin tek bir adım ötesindedir.

Çözüm, RFC 2104'te tanımlanan ve PHP 5'ten beri PHP'nin hash_hmac() fonksiyonuna gömülü olan HMAC (Hash-based Message Authentication Code)'tir. HMAC, bir mesajı (token) bir gizli anahtarla (WordPress kurulumuna özel) birleştirerek bir imza üretir — bu durumda HMAC-SHA256.

Bunun sağladığı avantajlar:

  1. Veritabanı sadece hash'i tutar. Dökülen bir wp_options tablosu veya sızan bir yedek, saldırgana kullanılabilir bir link değil, tek yönlü bir HMAC-SHA256 özeti verir.
  2. Hash başka bir token'ı sahtelemek için tekrar oynatılamaz. Eşleşen bir HMAC hesaplamak gizli anahtar gerektirdiği için, bir saldırgan bir hash'ten geriye doğru geçerli bir token'a ulaşamaz, keyfi bir token gönderip anahtarı bilmeden kabul edilmesini de sağlayamaz.
  3. Doğrulama basit bir yeniden hesaplamadır. Bir ziyaretçi bir linki açtığında, eklenti sunduğu token'ın HMAC'ini yeniden hesaplar ve saklanan hash ile karşılaştırır. Eşleşirse link gerçektir; eşleşmezse erişim reddedilir.

Özetle: HMAC, "ziyaretçi doğru dizeyi mi sundu" sorusunu "ziyaretçi sunucunun — ve sadece sunucunun, kendi gizli anahtarıyla — orijinal olarak imzalamış olabileceği bir dize mi sundu" sorusuna çevirir. Bu, düz metin karşılaştırmadan anlamlı ölçüde daha güçlü bir garanti.

Adım Adım: Üretimden Erişime

  1. WordPress panelinde "Magic Link Oluştur"a tıklarsın. Eklenti rastgele bir token üretir ve sitene özel bir gizli anahtar kullanarak hemen HMAC-SHA256 hash'ini hesaplar.
  2. Sadece hash veritabanına kaydedilir — bir etiket, opsiyonel bir süre, opsiyonel bir yönlendirme ve bir kullanım sayacı gibi meta verilerle birlikte. Ham token URL'nin içine gömülür ve başka hiçbir yerde saklanmaz.
  3. URL'yi kopyalayıp erişime ihtiyacı olan kişiye — bir müşteriye, paydaşa, incelemeciye — gönderirsin.
  4. Kişi linki açar. Eklenti token'ı URL'den çıkarır, HMAC'ini yeniden hesaplar ve saklanan hash ile karşılaştırır.
  5. Eşleşme durumunda, eklenti imzalı, HttpOnly bir çerez ayarlar; böylece ziyaretçi her sayfada linke tekrar tıklamadan sitenin tamamında gezinebilir. Eşleşmeme veya süresi dolmuş bir link durumunda, gördükleri şey sadece gated bakım veya "yakında" sayfasıdır.
  6. İstediğin zaman iptal edersin — başka hiçbir aktif linke dokunmadan sadece o linki anında geçersiz kılarsın.

Magic Link'ler ve Alternatifler

Yaklaşım Kişi başına erişim Veritabanı sızıntısına dayanıklı Tek tek iptal Kurulum çabası
Paylaşılan sayfa şifresi Hayır — herkes için tek şifre Hayır — düz metin eşdeğeri, tek sıfırlama herkesi dışarı atar Hayır Düşük
Listelenmemiş staging URL'i Hayır — herkes için tek URL Yok — kimlik doğrulama hiç yok Hayır (URL'yi değiştirmek gerekir) Düşük
Magic link (HMAC doğrulamalı) Evet — kişi başına bir token Evet — sadece bir hash saklanır Evet — link başına Düşük (eklenti yönetiyor)

Bunu spesifik olarak WordPress'in yerleşik şifre korumasıyla karşılaştırıyorsan, bu karşılaştırmayı Şifre Korumalı Sayfalar ile Güvenli Önizleme Linkleri yazımızda daha derinlemesine ele aldık.

Bu Neden Göründüğünden Daha Çok Önemli — Müşteri İşinde

Ajanslar ve freelancer'ların ihtiyacı sadece bir tür erişim kontrolü değil — kimin neye baktığını, erişimin ne zaman sona ereceğini ve bir müşterinin erişimini çekmenin başka hiçbirini etkilemeyeceğini bilmek isterler. Kişi başına, tek tek iptal edilebilen, tek tek süresi dolan bir kimlik bilgisi bu üçünü de veren tek modeldir. Paylaşılan bir şifre hiçbirini vermez.

Bu aynı zamanda magic link'lerin ziyaretçi geri bildirimi ve canlı element düzeyinde açıklamalar gibi özelliklerle neden doğal biçimde uyum sağladığını da açıklıyor: hangi token'ın siteyi açtığını bildiğinde, müşteriye önce hesap oluşturmasını istemeden hangi müşterinin notuna baktığını da bilirsin.

Sadece Bu Yazıya Değil, Koda da Bak

Erdo Client Preview açık kaynaktır, yani yukarıdakilerin hiçbirine körü körüne güvenmen gerekmiyor. Token üretimi ve HMAC doğrulaması eklentinin GitHub deposunda yaşıyor — kaynağı oku, bir issue aç ya da geliştirilmesi gereken bir şey görürsen pull request gönder.

Özetle

Bir magic link, token'a üretildikten sonra ne olduğu kadar güvenilirdir. Onu düz metin olarak saklamak veritabanını çalışan kimlik bilgileri listesine çevirir; HMAC-SHA256 hash'i olarak saklamak ise bir sızıntıyı, onu üreten gizli anahtar olmadan işe yaramayan bir özet listesine çevirir. Küçük bir implementasyon detayı, en kötü senaryo bir veritabanı ihlalinin sana gerçekte kaça mal olacağı üzerinde orantısız bir etkiye sahip.

Erdo Client Preview'ı WordPress.org'dan ücretsiz kur ve bir dakikadan kısa sürede ilk magic link'ini üret.

Ücretsiz WordPress Eklentisi

Erdo Client Preview

Magic linkler, canlı açıklamalar ve ziyaretçi geri bildirimi — e-posta trafiği olmadan müşteri incelemesi.

Sıkça sorulan sorular

Diğer makaleler

SecurityCompliance

En Yaygın WordPress Güvenlik Açıkları ve Nasıl Kapatılır

9 dk okuma
SecurityCompliance

WordPress Güvenlik Sertleştirme (Hardening) Checklist'i — 2026

10 dk okuma