27 Şubat 2022 Pazar
RestFull WebService - Kaynak Taşıma
13 Şubat 2022 Pazar
RestFull WebService - Kaynakların Birleştirilmesi
6 Şubat 2022 Pazar
CompTIA Güvenlik Sertifikası için Bilgiler #1
* E-Ticaret Web Sitesi sunucusu için günlükler incelenirken, saldırganın web sitesine JavaScript yerleştirerek sulama deliği saldırısı gerçekleştirdiği ortaya çıkmış kullanıcıları kimlik avı web sitesine yönlendirmekte olduğu bulunmuş. Sorun Çözümü için siteler arasında komut dosyasının çalıştırmanın hemde SQL injection işinin durdurmanın birinci yöntemi kullanıcı girişi kontrol edip filtrelemek.
* Bir hedef değişkene verinin gönderebileceğinden daha fazla veri göndermeye dayanan saldırı türü "Buffer overflow"
* Şİrket ağındaki güvenlik sorunlarını test etmek için Spesifik test ihtiyacı doğmuş ise otomatik ve yarı otomatik araçları kullanarak, ağdaki çeşitli sistemlerdeki bilinen güvenlik açıklarını bulabilmek için en iyi bilinen yol "Vulnerability scan"
* WiFi ağını ihlal eden saldırganı WAP yönetim paneli aracılıyla gönderilen kimlik bilgileri varsayılan yapılandırma örneğidir.
* Saldırgan ağınıza sızdı ve veritabanınızdan verileri çaldı. Tüm Sunucular günlüklerini merkezi bir günlük sunucusuna iletecek şekilde yapılandırılmış. Merkezi günlükleri incelediğimizde iki gün öncesinde sonra hiç bir giriş bulunmuyor. Sunucuları kontrol ettiğimizde doğru sunuculara verilerin gitti öncelikle görülmüş. Ancak kesintiden sonraki verilerin kaybolması ARP zerilenmesi anlamına geliyor. Veriler farklı bir MAC yönlendiren MAC tablolarını değiştirmek için kullanılır. Neden hiç veri gelmediği bu şekilde açıklanabilir.
* Web Sitesinde oturum açıp ziyaret ettiklerinde web sitesinden düşülüyor. Ağ dışı bilgisayardan denediklerinde de aynı hata alınıyor. Web Sitesi günlükleri kontrol edildiğinde hiç bir kayıt gelmediği görülüyor. "Typosquatting" adlandırılan gerçek Web Sitesine gitmedikleri sahte sunucu üzerinden bağlandıkları tespit edilmiş.
* Ağ analizi için tehdit analizi oluşturularak geçmiş olaylarda benzer ağlarda bu işlemlere benzer tehditleri ihlal edenleri basitçe yakalamak için düşük seviyeli suç işlemlerinde ve profesyonel olmayan saldırganların tespiti için "Script kiddie" terimi kullanılır.
* Sızma testinde; archive.org, netcraft.com, sosyal medya kaynaklarından toplanan bilgiler için Pasif gerçekte bağlantı kurulmadan yapılan keşif.
* Kurum içindeki satış görevlisinin pc sinde bariz bir yavaşlama sözkonusu kontrol edildiğine ilk önce göze çarpan bir durum söz konusu değil. Ancak geçici klasörler kontrol edildiğinde JPEG dosyalarından çok fazla olduğu görülmüş, Bazı casus yazılımlar sistemden ekran görüntüleri alırlar ve onları internet bağlantısı kurulduğu anda gönderir yada geçici klasörde toplarlar.
* Hedef ağ alan adına sahte girişimlerle giriş yapma işlemine "DNS poisoning" DNS Zehirlenmesi veya etki alanını ele geçirilmesi denir.
* Küçük bir işletme için sızma testi yapılması gerektiğinde test için uzmana şirket adı ve web sitesi alan adı, Ağ Geçici Yönlendiricisi IP si verilmiş. Bu teste "Black-box test" Kara kutu testi minimum bilgi içeren testtir.
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
27 Aralık 2021 Pazartesi
POST isteklerini Koşullu Yapma
Müşteri tarafından sunulması için POST u sunucunun yinelemeleri algılayabileceği ve önleyebileceği şekilde uygulamak istiyoruz.
İstemcilerin her POST isteği için bir bağlantı aracılığıyla sunucu tarafından sağlanan tek seferlik bir URI oluşturmak için bir jeton içerir. POST isteğinin yalnızca bir kullanım için geçerli olan sunucu. Kullanılan tüm jetonları bir sunucu işlem günlüğünde saklanır.
İstemci bir POST isteği gönderdiğinde jetonun işlemde mevcut olup olmadığını doğrulayın. Varsa yanıt kodu 403 döndürün. Neden bodyde olduğunu açıklayın. Eğer mevcut değilse dönme isteğine 201 oluşturun yada 303 ile bağlı olarak işlemi sonuçlandırın. Ayrıca belirteci işlem günlüğünde saklayın.
Sunucunun belirli bir miktar transfer etmesi gereken banka havalesi uygulaması olduğunu düşünelim. Bir hesaptan diğer bir hesaba para aktarımı. Sunucu bir denetleyici kaynağı kullanarak bu transferi uygulayın.
# Request
POST /transfers> İki banka hesabının kaynağına müşteri mevcut durum olduğunu düşündüğü şeye dayanarak bir POST isteği gönderir.
Host: example.org
Content-Type: application/xml;charset=UTF-8
<transfer>
<source>urn:example:org:account:1</source>
<target>urn:example:org:account:2</target>
12 Aralık 2021 Pazar
Koşullu PUT ve DELETE talepleri Nasıl Gönderilir.
9 Aralık 2021 Perşembe
Müşteriden Koşulsuz GET Talepleri Nasıl Yapılır
HTTP 1.1 istemcilerin sona erme önbelleğini değiştirmesine ve yeni temsiller istemesine izin verir. Bu tarif bir kaynak aldıktan sonra bir kayanağın yeni bir temsilini almak için kullanabilirsiniz. 412 (Ön Koşul Başarısız ) veya en yenisini almak için başarılı bir PUT veya PATCH den sonra bile oluşan temsildir.
GET isteğinde; Cache-Control : non-cache ve Pragma: non-cache üst bilgilerini ekleyin.
İstemcinin bir kaynağı güncellemek için koşullu bir PUT isteğinde bulunduğunu varsayalım. Katmanlı koşullar eşleşmiyor ve sunucu 412 yi döndürüyorsa.
# Process this request if and only if the included conditional tags match
PUT /reviews/notes_from_underground HTTP/1.1
Host: www.example.org
If-Unmodified-Since: Sun, 09 Aug 2019 00:56:14 GMT
If-Match: "3f4a74db207d0447d46710a64971e777"
...
# Response
HTTP/1.1 412 Precondition Failed
Content-Length: 0
31 Ekim 2021 Pazar
Sunucuda Koşullu DELETE İstekleri Nasıl Uygulanır
Koşullu Delete istekleri, istemcilerin kaynaklarını silmelerini engellemeye yardımcı olabilir. Örneğin, istemci bir kullanıcı kullanıcı kaynağını silmek istemeyebilir. İstemci kullanıcının "inaktif" den "aktife" değiştirir.
Şimdi DELETE istekleri için eşzamanlılık denetiminin nasıl olduğuna kısaca bakalım.
İstemci koşulsuz bir DELETE isteği gönderirse, 403 hata kodunu döndürür. Verilen koşullar uyuşmuyorsa 412 hata kodunu (Başarısız) döndürür. Her iki durumda da, sorunun durumunu temsili olarak açıklayın. İstemciler koşullu bir DELETE talebi gönderirse ve sağlanan koşullar eşleşirse, kaynağı silin.
Sunucunun yapması gereken kontrollere genel bir bakış için aşağıdaki akışı bakabiliriz.
Bir müşteri silinmeye hazır olduğunu varsayarak bir kaynağı silmeye karar verebilir. İçinde bu arada başka bir müşteri aynı kaynağı güncelleyerek ilk müşterinin varsayımsal olarak koşullu DELETE kullanma durumu bunu önler. DELETE isteği koşullu olduğunda sunucu istemcinin silme kararını doğrulayabilir. Kaynak en son duruma bağlıdır. Sunucu bu işi şu şekilde yapar.
İstemci tarafından sağlanan If-Unmodified-Since ve If-Match başlıkları bunların şimdiki değerleri.
# Process this request if and only if the included conditional tags match
DELETE /reviews/notes_from_underground HTTP/1.1
Host: www.example.org
If-Unmodified-Since: Sun, 09 Aug 2009 00:56:14 GMT
If-Match: "3f4a74db207d0447d46710a64971e777"
# Response
HTTP/1.1 204 No Content
14 Mayıs 2021 Cuma
Sunuculardaki Koşullu PUT İstekleri
1 Mayıs 2021 Cumartesi
Müşterideki Koşullu GET ve HEAD Taleplerinin Yönetimi
24 Nisan 2021 Cumartesi
Sunuculardaki Koşullu GET isteklerinin Uygulanması
Koşullu GET istekleri sunucuya yanıt gövdesini atlama fırsatı verir. Koşullu istekler, istemcinin If-Modified-Since ve If-Match başlıklarının göndermesini içerir. Önceki bir istekten son Değiştirilen ve ETAG başlıklarına dayalıdır. Koşullu istekler müşteriden gelen isteklerin sayısını azaltmaz ancak kullanımdaki değişikliklerden dolayı azaltılabilir.
Sunucuyu son değşiklik saat ve tarih değerlerini ve/veya varlık etiklerini takip edecek şekilde tasarlanması gerekir. Son değiştirilme tarih ve saatini Last-Modified başlığı olarak ve varlık etiketine ETAG başlığı eklenmeli.
İstemci bir If gönderdiyse istemciden gelen GET ve HEAD isteklerine yanıt verirken None-Match başlığı değerini sunucudaki temsilin ETAG ile karşılaştırın. istemci If-Unmodified-Since gönderdiyse değerini sunucudaki temsil zamanı son değiştirilen ile karşılaştırın.
Kontrollerden herhangi biri yanlışsa veya istemci bu başlıklardan hiçbirini göndermediyse en son yeni ETAG ve/veya Last-Modified head dahil olmak üzere müşteriye sunumun kopyası değilse, istemciye 304(Değiştirilmedi) HTTP durum kodu mesaj olmadan döndürün.
Ön belleğe alınmış bir kopyanın ömrünü uzatmak için koşullu GET isteklerini kullanma sürecine doğrulama deniyor. Bunu desteklemek için sunucunun sona erme başlıklarını birlikte döndürmesi gerekiyor. İstemcilere koşullu üstbilgilerle ve 304 (Değiştirilmedi) önbelleğe alınmış bir yanıtın ömrünü uzatmak için kullanılabilir.
Aşağıdaki verilecek örnekte; müşterinin bir önbelleğe alınmış yanıtı depolamak ve önbelleğin işlenmesini sağlamak için önbellek alma proxy sunucusu otomatik olarak doğrular. Müşterinizin bir kopyasını saklıyorsanız, yerel deposunda bir temsil olup olmadığını kontrol etmek yerel olarak saklanan kopya hala yeni kabul edilir.
Son kullanma tarihi ile birlikte ETAG ve Last-Modified başlıklarını içeren bir gösterim önbelleğe alma başlıklarına örnek;
# Response
HTTP/1.1 200 OK
Date: Sun, 09 Aug 2009 00:56:14 GMT
Last-Modified: Sun, 09 Aug 2009 00:56:14 GMT
Expires: Sun, 09 Aug 2009 01:56:14 GMT
Cache-Control: max-age=3600,must-revalidate
E-Tag: "3f4a74db207d0447d46710a64971e777"
Content-Type: application/xml; charset=UTF-8
Bu örnekteki ETAG başlığının değeri bir varlık etiketidir. iki GET yapılırsa ETAG başlığı için iki farklı değer ister ve alır. Bu temsilcinin yeniden yönlendirmesini değiştirir.
Sunucunun bu örnekteki amacı, bir önbelleğin bir sunucu için depolanan bir temsil sunmasına izin vermektir. Saat sona erdiğinde koşullu bir GET talebinde bulunarak sunumu doğrulamak. Aşağıdaki sıra doğrulama sürecini temsil eder.
# First request
GET /person/joe HTTP/1.1
Host: www.example.org
# First response
HTTP/1.1 200 OK
Date: Sun, 09 Aug 2009 00:44:14 GMT
Last-Modified: Sun, 09 Aug 2009 00:40:14 GMT
Expires: Sun, 09 Aug 2009 01:44:14 GMT
Cache-Control: max-age=3600,must-revalidate
...
# Second request after 10 minutes
GET /person/joe HTTP/1.1
Host: www.example.org
# Second response - returned by cache
HTTP/1.1 200 OK
Date: Sun, 09 Aug 2009 00:54:14 GMT
Last-Modified: Sun, 09 Aug 2009 00:40:14 GMT
Expires: Sun, 09 Aug 2009 01:44:14 GMT
Cache-Control: max-age=3600,must-revalidate
Age: 600
HTTP/1.1 200 OK > Sunucu tarafından oluşturulan yanıt
Cache-Control: max-age=3600,must-revalidate > Yanıt 3600 saniye önbelleğe alınabilir ancak bu sürenin sonunda yeniden doğrulanması gereken dönem.
Age: 600 > Önbellek tarafından sunulan 600 saniyelik eski bir yanıt.
Bir saatlik sürenin dolmasından sonra istemciler tarafından yapılan istekler önbelleğin önbelleğe alınmış yanıtını gösterir.
# Third request after an hour
GET /person/joe HTTP/1.1
Host: www.example.org
# Third request after an hour
GET /person/joe HTTP/1.1 > Son kullanma tarihinden sonra müşteri talebi
# Request sent by the cache to the origin server
GET /person/joe HTTP/1.1 > Önbelleğe alınan yanıtı doğrulama isteği
HTTP/1.1 304 Not Modified> Kaynak sunucunun yanıtının değiştirilmediğini belirten yanıt parçası.
HTTP/1.1 200 OK> Önbelleğe alınmış bir kopyayı içeren istemciye önbellek tarafından verilen yanıt.
Yanıt süresi dolmadığından sunucu ikinci isteği görmez ve önbelleğin hala bir kopyası mevcut. Üçüncü istek, doğrulama içi sunucuya ulaşır. Üçüncü sunucunun yanıtı temsilin değişmediğini bildiriyor ve bir saate daha ömrünün olduğunu belirtiyor.
Bu örnekte, sunucunun sorumluluğu şu değerleri karşılaştırmaktır.
If-Modified-Since ve/veya If-None-Match başlıkları mevcut, değerleri ise bir kaynak gösterimi ile 200 (OK) veya 304 (Not Modified)
17 Nisan 2021 Cumartesi
Son Oluşturulan ETAG başlıkları Nasıl Oluşturulur
Sunucular, koşullu istekleri yönlendirmek için Last-Modified ve ETAG yanıt başlıklarını kullanır. İstemcileri istekleri koşullu yapmak için aşağıdaki istek başlıklarını kullanır.
* Önbelleğe alınmış gösterimleri doğrulamak için If-Modified ve If-Non-Match
* Eşzamanlılık kontrolünün ön koşulları olarak If-Unmodified-Since ve If-Match
GET istekleri müşterinin amacı yalnızca yeni bir istek temsil etmesidir. Gösterim belirtilen saat ve tarihten sonra değiştirildiyse sağlanan varlık etiketlerinin hiçbiri bundan sonra eşleşmez.
Eşzamanlılık kontrolü için amaç bir işlem gerçekleştirmeyi talep etmektir. Sadece gösterim belirtilen saat ve tarihten sonra değişmediyse sağlanan varlıkların etiketleri ile eşleşirse.
Bu istek başlıklarının her ikisi de istemcilerin ön koşullu isteklerdir.
Koşullu isteklerin işlemenin etkinliği sunucunun ne kadar hızlı yapabileceğine bağlıdır.
Kaynakları depolamak için kullanılan veri deposu üzerinde kontrolünüz varsa, depolama alanını değiştirin.
Her kaynağa erişim için şema ve değiştirilen saat - tarih için bir zaman damgası ve sürüm takip etmek için bir sıra numarası kullanın.
Verilerin her değiştiği alanlarda; ilişkisel veritabanı söz konusu olduğunda bunları otomatik olarak güncellemek için veritabanı tetikleyicileri kullanın.
Eğer depoma şemanızın değiştirilmesine veya veri deponuzu bakıma izin verilmiyorsa zaman damgalarını veya sıra numaralarının işaretlemek için bazı veri kaynakları işlevlerini kullanabilirsiniz.
ETAG başlığı için bir değer oluşturur. Bu değeri ve bir zaman damgasını ayrı bir tabloda saklayın veya sunucunun tüm gösterimi yeniden yüklemesine gerek kalmadan veri deposu ile bunun hesaplayın.
Temsil edilen boyut büyük değilse MD5 oluşturmak için temsil gövdesini kullanın ETAG için karma değerdir. Alternatif olarak her seferinde değişen bazı veri alanlarını kullana kaynak güncellenir.
Kaynağın her temsili için farklı bir ETAG değeri kullandığınızdan emin olun.
Çoğu web sunucusu statik için ETAG ve Last-Modified üst bilgilerinin otomatik olarak eklemenize izin verir. Uygulama kaynakları için bunları programlı bir şekilde oluşturmanız gerekir.
Bu başlıklardan Last-Modified bir saniyelik çözünürlüğü vardır ve bu nedenle zayıf bir doğrulayıcıdır. Bir varlık etiketi ise değeri değiştirilebildiği için güçlü bir doğrulayıcıdır. ( Sunucu gösteriminden her değiştiğinde) Bir varlık etiketi, bir nesnenin karması gibidir. Bir kaynağı temsillerini karşılaştırmak için varlık etiketlerini kullanabilirsiniz.
Koşullu içeriği desteklemek için hem Son Değiştirilmiş hem de ETAG başlıklarını kullanmanıza gerek yoktur. Koşullu istekleri desteklemek için tutarlı bir şekilde birini veya ikisini kullanabiliriz.
Yeni bir web hizmeti tasarlanıyorsa bir zaman damgası ve bir sürüm sayacı veri deponuza ekleyin. Çoğu ilişkisel veritabanı kendine özgü bazı tetikleyicileri kullanmamıza izin verir. Verilerin her değişiminden bu değerlerin otomatik olarak güncellemek ve arttırmak için. Bu durumda sunucudaki tüm bilgilerin yüklenmesi gerekmediğinden genellikle en verimli yaklaşım olur.
Bazı web çevreleri kodunuzun oluşmasına izin verdikten sonra ETAG başlıkları otomatik olarak oluşur. Bu işi tüm temsilin bir karmasını hesaplayarak ortaya çıkarır. Eğer temsil için veritabanın dan yüklenmesi zaman alırsa iyi performans göstermez.
Kaynağa ait olan verilerin birden fazla tablo oluşturması durumunda en son olanı seçmeniz gerekir. Bu tablolardaki veriler son değiştirilen zaman damgası ve ilgili sürümün bir karmasında kullanılan verileri içerir.
İlişkisel olmayan veri depoları için kullanmanız gereken teknikler uygulamadan uygulamaya farklılık gösterir.
ETAG değerleri oluşturmak için sürüm numaralarını kullandığınızda bu başlık değerleri temsile özeldir. Örneğin bir temsil kaynağının gönderimleri ortam türüne göre değişir, ortam türü değerlerinin kullanımı ETAG değerlerinin gösterimini yapmak için sürüm tanımlayıcıları ile birlikte kullanılır.
3 Nisan 2021 Cumartesi
RestFull Web Service Sunucular Arasında İşlemler Nasıl Desteklenir
Sunucu sınırlarını aşan işlemlerin nasıl destekleneceği hakkında kısa bilgi paylaşımıdır. Örneklerde; bir kullanıcı profilini bir uygulamadan diğerine taşımayı özetleri içe aktarmayı içerir. Bir müşteri ilişkileri yönetimi uygulamasında beklenen tekliflerin, taslak sunucudan üretim sunucusundaki belgeler gönderimi. Bu kullanım durumunda birden çok sunucu durumunun değişmesine ihtiyaç doğuyor. İki veya daha fazla sunucu üzerinde içerik işlemlerinin nasıl değişeceğine küçük örnek ile bakacağız.
Sunucular arası operasyonun tasarlamak ve uygulamak için sunucuların birbirleriyle işbirliği yapmasına öncelikle izin verilmeli. (cross-server operations) Bunlar veri formatlar, arka uç ara yüzleri mutabakat sağlayan sunucuları içerebilir. Veri deposundan veri yükleme, onu karşılamak için normalleştirme işlemleri, diğer sunucu biçimleri ve ardından saklanması adımları.
Sunucu sınırlarını aşan işlemlerle karşılaşıldığında endişelerin ayrılması gerekir.
Kişi listesini dışa aktarmak için bir bağlantıyla birlikte bir kullanıcının kişi listesini temsili mesajlaşma web hizmeti:
# Request
GET /user/smith/contacts HTTP/1.1
Host: contacts.example1.org
# Response
HTTP/1.1 200 OK
Content-Type: application/xml;charset=UTF-8
<contacts xmlns:atom="http://www.w3.org/2005/Atom">
<atom:link rel="self" href="http://contacts.example2.org/user/smith/contacts"/>
<atom:link rel="http://contacts.example1.org/rels/export-to-messaging"
href="http://messaging.example2.org/user/smith/import;
t=bcb9169866c69410be37f68210a6986c"
title="Export contacts into to messaging."/>
<contact>
...
</contact>
...
</contact>
title="Export contacts into to messaging."/> > Bir sunucudan diğerine veri aktarmak için bir URl ile bağlantı kurun.
http://contacts.example2.org/rels/export-to-messaging > anlamı: con ilişki türü ile anlayan bir istemci http://tacts.example2.org/rels/export-to-messaging > dışa aktarma işlemini başlatabilir. Bu bağlantı ilişkisi türünü dökümantasyonunu müşterinin yapması gerektiğini söylediğini varsayalım.
Kişileri mesaj hizmetine aktarmak için bağlantının URl bir POST isteği gönderin. Bağlantının URl yetkisiz kullanımı önlemek için bir güvenlik anahtarı içerir.
# Request
POST /user/smith/import;t=bcb9169866c69410be37f68210a6986c HTTP/1.1
Host: messaging.example2.org
# Response
HTTP/1.1 303 See Other
Location: http://messaging.example2.org/user/smith
Content-Type: application/xml;charset=UTF-8












