23 Ocak 2022 Pazar

Tek Seferlik URI Nasıl Oluşturulur

 

  URI amaçı yeni bir kaynak oluşturmaksa aşağıdakilerden birine dayalı bir belirteç oluşturmamız gerekir. 

Bir sıra numarası veya bir zaman damgası ile rastgele bir sayının birleşimi ile. Bir veya birden fazla kaynağı değiştirmek amaç ise ayrıca varlık etiketlerini ve jetondaki bu kaynak tanımlayıcılar ile birlikte URI kodlamalıyız.

Banka hesabı transfer örneğinde; Transferde bulunmak için sunucunun iki bankanın hesaplarında mevcut durumunun bir işlevi olan URI sağlaması gerekir. Böyle bir URI oluşturabilen kaynak;



# Request

GET /transfer-token?from=urn:example:org:account:1&

   to=urn:example:org:account:2 HTTP/1.1 > Koşullu bir istekte bulunmak için bir URI alma isteği;

Host: www.example.org

# Response

HTTP/1.1 200 OK

Cache-Control: no-cache

Link: <http://www.example.org/transfers;t=e6e3c89d4dfe7f3a818734a6237ccfc5>;

      rel="http://www.example.org/rel/transfer" > Koşullu URI

<accounts>> Kaynakların mevcut durumu..

   <account>

      <id>urn:example:org:account:1</id>

      <balance>200.00</balance>

   </account>

   <account>

      <id>urn:example:org:account:2</id>

      <balance>100.00</balance>

   </account>

</accounts

İstekteki kaynaklar jeton dağıtma makinesi gibidir. Müşteri aktarıma dahil olan hesaplar ve sunucular, Transferi başlatmak için URI ile bir bağlantı döndürür. Sunucu ayrıca hesapların mevcut durumunuda içerir.

Müşteri bağlantıyı kullanma kararını geri gönderilen alana dayandırmalıdır. Bu bağlantı yanlızca hesabın mevcut durumu için geçerli  kaynaktır.

Böyle bir URI oluşturmanın bir kaç yolu vardır. Aşağıdaki URI jeton içerir değeri ise rastgele bir sayının birleştirilmesinin bir MD5 karması olan geçerli tarih- iki banka hesabının zaman değeri ve varlık etiketleri:

http://www.example.org/transfers;t=e6e3c89d4dfe7f3a818734a6237ccfc5


URI kurcalanmasının önlenmesi için URI dijital imzalarıda dahil etmeyin düşünebilirsiniz. Sunucunun daha sonra doğrulama için bu belirteci depolaması gerekmez. Çünkü kaynakların mevcut varlık etikletlerinden jetondan karmalar uyuşmuyorsa sunucu istemci tarafından kullanılan URI artık geçerli olmadığı sonucuna varabilir. Böyle biri zaman belirteçlerine nonce denir. Nonce bir kez kullanılan sayı anlamına gelir.



Yeniden oynatma saldırılarını tespit etmek için tek seferlik URI kullanabilirsiniz. Tekrar saldırıları kötü niyetli bir varlığın isteklerini yakalamak için gizlice dinlenmesi ve yeniden bir gerçek müşteri gibi görünen sponsorlar ve tekrar istekleridir.

Bu tür amaçlar için tek seferlik URI ler kullanırken belirtecin kötü niyetli varlığın tahmin edilmemesi için gelecekteki simge değerleri rastgele oluşturulur.



URI amacı POST kullanarak yeni bir kaynak oluşturmaksa, jetonu oluşturun tarih ve saat değerine ve rastgele bir sayıya dayandırın. Tek seferlik URI yeni bir adres kaynağı oluşturmak için verilebilir. Bu URI deki belirteç bir MD5 karmasıdır. Bu ise rastgele bir sayı ve geçerli saat içerir.


# Request
GET /user/smith/address-token HTTP/1.1 > Bir kaynak oluşturmak için koşullu istekte bulunmak üzere URI alma isteği
Host: www.example.org

# Response
HTTP/1.1 204 No Content
Cache-Control: no-cache
Link: <http://www.example.org/user/smith;t=360e22a55267f0a525b1d49ddc9eed71>;
rel="http://www.example.org/rel/transfer" > Koşullu URI


Bu durumda URI sağlamak için herhangi bir girdi sağlamaya gerek yoktur. Bunu doğrulamak için URI daha önceden kullanılmamışsa sunucunun bir işlem günlüğünde tutması gerekir. Ne zaman istemci POST kullanarak URI oluşturmak için gönderir, öncesinde belirteç sunucudaki bir işlem günlüğünde mevcuttur. Değilse, isteği işleyin.

Web Uygulamaları söz konusu olduğunda belirteci gizli olarak da kodlayabilirisiniz. HTML formlarındaki form alanlarında. 

Hiç yorum yok:

Yorum Gönder