JSON Web İmzası (JWS) kod çözme, imzalı verileri çıkarmak ve bütünlüğünü kontrol etmek için bir JWS belirtecinin bileşenlerini (başlık, yük ve imza) ayrıştırma ve doğrulama işlemidir. Güvenlik ve sızma testi bağlamlarında, bir JWS'nin kodunun çözülmesi analistlerin hangi taleplerin gömülü olduğunu anlamalarına, yanlış yapılandırmaları tespit etmelerine ve imza atlama veya belirteç sahteciliği gibi güvenlik açıklarına yol açabilecek zayıf imzalama uygulamalarını belirlemelerine yardımcı olur.
Bu makale şunları açıklamaktadır JWS kod çözme neden önemlidir?gerçek kod kullanarak imzaların nasıl çözüleceği ve doğrulanacağı, yaygın tuzaklar, güvenlik etkileri ve 2025'te bilmeniz gereken savunma stratejileri.
JSON Web İmzası (JWS) Nedir?
JSON Web İmzası (JWS) imzalı bir mesajı temsil etmenin kompakt ve URL açısından güvenli bir yoludur. İçinde tanımlanmıştır RFC 7515 ve REST API'leri, çoklu oturum açma (SSO) ve mikro hizmet kimlik doğrulama akışları üzerinden aktarılan verilerin gerçekliğini ve bütünlüğünü sağlamak için yaygın olarak kullanılır.
Tipik bir JWS belirteci şöyle görünür:
nginx
eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCJ9. eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvZSJ9 . MEUCIQDh...
Her segment Base64URL kodlanmış:
- Başlık - algoritmayı ve token türünü açıklar
- Yük (Talepler) - imzalı veriler
- İmza - dürüstlüğün kanıtı
İmzayı doğrulamadan bir JWS'nin kodunu çözmek iddiaları ortaya çıkarır, ancak yalnızca doğrulama bunların güvenilir bir kaynaktan geldiğini kanıtlar.
Yetkili standart: RFC 7515 - https://tools.ietf.org/html/rfc7515

Neden bir JWS'nin Kodunu Çözelim? Güvenlik ve Test Perspektifleri
Bir JWS'nin kodunun çözülmesi birkaç amaca hizmet eder:
- Yerleşik talepleri anlayın: Kullanıcı kimdir? İzinler nelerdir?
- İmzalama algoritmasını tanımlayın: Zayıf algoritmalar (örn,
HiçbiriveyaHS256öngörülebilir anahtarlarla) - Bütünlüğü değerlendirin: Kurcalanmış jetonları tespit edin
- Güvenlik açıklarını keşfedin: İmza bypass, algoritma düşürme saldırıları
Saldırgan güvenlik açısından bakıldığında, zayıf JWS imzalama uygulamalarının keşfedilmesi, saldırganların belirteçleri taklit ettiği ve ayrıcalıkları artırdığı istismarlara yol açabilir.
Bir JWS Token'ın Anatomisi
İşte tipik bir jetonun dökümü:
| Segment | Anlamı | Örnek |
|---|---|---|
| Başlık | Algoritma ve meta veriler | { "alg": "RS256", "typ": "JWT" } |
| Yük | Talepler | { "sub": "12345", "rol": "admin" } |
| İmza | İmzalı özet | Şifrelenmiş başlık+payload'un Base64URL'si |
Şifresi çözülmüş bir JWS, başlık ve yük için düz JSON gösterir:
ini
HeaderJSON = base64url_decode(part1)PayloadJSON = base64url_decode(part2)
Şifre çözme işlemi gerçekliği kanıtlamaz - sadece imza doğrulama işlemi kanıtlar.
Basit JWS Kod Çözme (Doğrulama Olmadan)
Güvenlik triyajında genellikle ilk adım içeride ne olduğunu görmektir:
Python Örneği (Yalnızca Kod Çözme)
python
import base64import json def base64url_decode(input_str): rem = len(input_str) % 4 input_str += "=" * (4 - rem)return base64.urlsafe_b64decode(input_str) token = "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjMifQ.SflKxw... "header, payload, signature = token.split('.') header_json = json.loads(base64url_decode(header)) payload_json = json.loads(base64url_decode(payload)) print("Header:", header_json)print("Payload:", payload_json)
Bu, okunabilir JSON çıktısı verir ancak imzanın doğru olup olmadığını doğrulamaz.
JWS İmzasını Doğrulama (Güvenlik Açısından Kritik)
Belirtecin meşru olduğundan emin olmak için beklenen algoritma ve anahtarı kullanarak imzayı doğrulamanız gerekir. İşte nasıl yapılacağı:
JavaScript (Node.js) Kullanım Örneği jose
javaScript
import { jwtVerify } from "jose"; const token = "eyJ..."; const publicKey = /* load appropriate public key, e.g., from JWKS endpoint */; async function verifyToken() {try {const { payload } = await jwtVerify(token, publicKey);console.log("Verified payload:", payload); } catch (e) {console.error("Verification failed:", e); } } verifyToken();
Bu, belirtecin açık anahtara karşılık gelen doğru özel anahtar tarafından imzalanmasını sağlar.
Gerçek Dünya Örneği: OAuth Belirtecinin Kodunu Çözme
Birçok API, erişim kontrolü için JWS belirteçleri yayınlar. Kod çözme, kullanıcı ve oturum bilgilerini ortaya çıkarır:
json
{ "iss": "", "sub": "alice", "exp": 1700000000, "kapsam": "okuma yazma" }
Güvenlik ekipleri, kapsamları ve sona erme sürelerini denetlemek için kodu çözülmüş belirteçleri inceler.
JWS Uygulamalarında Sık Karşılaşılan Güvenlik Açıkları
Algoritma Düşürme
Bazı kütüphaneler hatalı olarak alg için HiçbiriBu da saldırganların doğrulamayı atlamasına olanak tanır.
Güvenli olmayan başlık örneği:
json
{"alg":"none","typ":"JWT"}
Savunma saldırısı: ile belirteçleri her zaman reddedin alg: yok bağlam içinde açıkça güvenli olmadığı sürece.
Zayıf Simetrik Anahtarlar (HS256)
Zayıf veya öngörülebilir simetrik anahtarların kullanılması, saldırganların anahtarı tahmin etmesine ve belirteçleri taklit etmesine olanak tanır.
Hafifletme:
- Güçlü gizli anahtarlar kullanın (≥ 256 bit)
- Asimetrik algoritmaları tercih edin (
RS256,ES256)
Hızlı JWS Kod Çözme için CLI Araçları
| Alet | Açıklama | Resmi |
|---|---|---|
| jwt.io Hata Ayıklayıcı | Web tabanlı kod çözme ve doğrulama | https://jwt.io |
| jose CLI | Düğüm tabanlı kod çözme/doğrulama | https://github.com/panva/jose |
| jwt-cli | Platformlar arası CLI | https://github.com/mike-engel/jwt-cli |
Örnek CLI kod çözme:
bash
jwt decode eyJhbGciOi...
Güvenlik Açığı Senaryosu: Token Sahteciliği (Kavram Kanıtı)
Eğer bir sunucu yanlışlıkla alg: yokbir saldırgan taklit edebilir:
css
Başlık: {"alg":"none","typ":"JWT"} Yük: {"sub":"attacker","role":"admin"} İmza: ""
Kavram Kanıtı Komut Dosyası (Python):
python
import base64import json def b64url(x): return base64.urlsafe_b64encode(x).rstrip(b'=').decode() header = {"alg": "none", "typ": "JWT"} payload = {"sub": "attacker", "role": "admin"} token = f"{b64url(json.dumps(header).encode())}.{b64url(json.dumps(payload).encode())}. "print("Sahte token:", token)
Savunma:
- Şu durumlarda belirteçleri reddedin
algoHiçbiriaçıkça güvenli olmadığı sürece - Algoritma beyaz listesini zorlama

İmza Doğrulama 2025'te Neden Önemli?
Modern mikro hizmetlerde ve dağıtılmış API'lerde erişim kararlarını belirteçler yönlendirir. Yanlış doğrulama şunlara yol açabilir:
- Ayrıcalık yükseltme
- Yetkisiz erişim
- Oturum ele geçirme
Sızma test uzmanları ve savunucular, belirteçleri programlı olarak ve geniş ölçekte çözebilmeli ve doğrulayabilmelidir.
API'lerde Bozuk Doğrulamayı Tespit Etme
Otomatik tarayıcılar, bir API'nin geçersiz JWS imzalarını kabul etmeye çalışıp çalışmadığını kontrol edebilir.
Python Sözde Kodu (Güvenlik Kontrolü)
python
def test_broken_verification(api_url, forged_token): headers = {"Authorization": f "Bearer {forged_token}"} response = requests.get(api_url, headers=headers)return response.status_code bad_api = test_broken_verification("", forged_token)if bad_api == 200:print("Potentially vulnerable to JWS forgery")
API şu şekilde yanıt verirse 200 TAMAMjeton kabul mantığı hatalı olabilir.
En İyi Savunma Uygulamaları
| Savunma | Açıklama |
|---|---|
| Asimetrik Anahtarlar Kullanın | Simetrik anahtarlar yerine RS256, ES256'yı tercih edin |
| Algoritma Beyaz Listesini Zorla | Beklenmedik alg değerlerini reddetme |
| Kısa Token Ömürleri | Tekrar riskini en aza indirin |
| Anahtar Rotasyonu | İmzalama anahtarlarını düzenli olarak güncelleyin |
| Denetim Simgesi Kütüphaneleri | Bağımlılıkları güncel tutun |
Token Kod Çözme İşlemini CI/CD Güvenliğine Entegre Etme
2025 yılında, güvenlik ardışık düzenleri genellikle JWS uygulamalarını otomatik olarak doğrular:
- JWT konfigürasyonlarının otomatik tiftiklenmesi
- Güvensiz kütüphaneleri reddeden CI testi
- Hatalı token kabulü için çalışma zamanı izleme
Örnek CI Kod Parçacığı (Bash):
bash
1TP5Herhangi bir kod "alg: none "grep -R '"alg" kullanıyorsa reddet: *"none"' ./src && exit 1
İlgili Kavramlar: JWE vs JWS
| Dönem | Anlamı |
|---|---|
| JWS | JSON Web İmzası (yalnızca imzalı) |
| JWE | JSON Web Şifreleme (şifreli) |
JWE gizliliği korur; JWS bütünlüğü ve gerçekliği korur. Birçok sistem her ikisini birlikte kullanır.
Araçlar ve Kütüphaneler (2025 Güvenlik Yığını)
- Node.js
jose- JWT/JWS kod çözme ve doğrulama - Python
python-jose- Esnek kriptografi desteği - OpenSSL - Düşük seviyeli kripto doğrulama
- jwt.io - Hızlı web kod çözücü

