Merhaba arkadaşlar
Bu gün sizlerle memcache'nin kullanımına, zaafiyetine ve ne işe yaradığına bakacağız.
İlk olarak memcache nedir buna bakalım.
Memcached’e bağlanmamızı ve kullanmamızı sağlayacak PHP uzantısıdır. Bu PHP uzantısı varsayılan değildir, bu nedenle indirip kurmanız gerekir.
MemCached MySQL sorgu sonuçlarını, program ayar verilerini önbelleğe alarak yazılımınızın çok daha hızlı çalışmasını sağlayabilirsiniz.
SQL sorgu sonucunu veya Php ‘nin oluşturduğu Html sayfayı memcached ‘de depolayabilirsiniz. Böylece aynı Sql sorgularını ve Php komutlarını tekrar tekrar çalıştırmaz, ön bellekten okuyarak ziyaretçiye sunar.
Detay Sayfaları, Ana Sayfa, Session bilgileri ,Sık kullanılan ve veritabanından gelen veriler için kullanılır.
Memcache 2 yapıya daha ihtiyaç duyar ; memcached, libevent.
Libevent belirli bir süre geçtiğinde çağırılan kodları yeniden çalıştırmayı sağlar.
Memcache kullanırken dikkat edilmesi gereken önemli hususlar ise şunlardır.
1-) 1mb lik veri tutabilirsiniz.
2-)Verileriniz kaybolabilir. Bu durum 2 şekilde gerçekleşebilir. Verdiğiniz süre veya ram alanının dolumu nedeniyle eski tarihli verilerin üstüne yazılabilir.
3-)Rdmbs cache kullanmadigina emin olunmalıdır.
4-)amplification attacks saldırılarına karşı önlem alınmalıdır.
Memcache için genellikle 11211 portuna ihtiyaç duyulur ama bu düzenlenebilir.
Memcache için php'de 19 kod bulunur. Ancak hepsini bilmeye gerek yoktur.
Connect komutu ile bağlantı yapılır.
set/add komutlarının herhangi biriyle belleğe veri yazılır.
get bellekteki veriyi okur.
delete seçilen veriyi siler.
flush tüm veriyi siler.
close ise sonlandırır. Burada bilinmesi gereken close memory sonunda kullanılmazsa suistimal edilebiliyor olmasıdır.
PHP tarafında kullanımına gelecek olursak ilk olarak çalışıp çalışmadığını kontrol edelim.
Bu sorgumuzun sonucu 1 olursa çalışıyor demektir.
Şimdi php sınıfımızı oluşturalım.
Burada 127.0.0.1 localhost ıp'si ve 11211 memcache portumuzdur.
Şimdi veri ekleyip yazdıralım.
120 saniye boyunca blok alanımızda "içerik" verimizi tuttuk. süreyi istediğiniz gibi değiştirebilirsiniz.
Şimdi gelelim ampllification attack vektörüne.
TCP/UDP 11211 portuna erişimi kısıtlamalısınız.
Saldırgan o porttan sunucuya saldırı çıkışının yapılmasını istediği IP üzerindenmiş gibi paket gönderiyor. Sunucu bu paketi bilmediği için kabul etmediğine dair karşı bir paket gönderiyor. Muhtemelen ilk paket TCP olarak gönderiliyor ve sonrasında da memcached 11211 portu üzerinden UDP paketler ileterek cevap veriyor.
Erişim kısıtlanırsa bu saldırı ortadan kalkıyor.
İyi Forumlar
Bu gün sizlerle memcache'nin kullanımına, zaafiyetine ve ne işe yaradığına bakacağız.
İlk olarak memcache nedir buna bakalım.
Memcached’e bağlanmamızı ve kullanmamızı sağlayacak PHP uzantısıdır. Bu PHP uzantısı varsayılan değildir, bu nedenle indirip kurmanız gerekir.
MemCached MySQL sorgu sonuçlarını, program ayar verilerini önbelleğe alarak yazılımınızın çok daha hızlı çalışmasını sağlayabilirsiniz.
SQL sorgu sonucunu veya Php ‘nin oluşturduğu Html sayfayı memcached ‘de depolayabilirsiniz. Böylece aynı Sql sorgularını ve Php komutlarını tekrar tekrar çalıştırmaz, ön bellekten okuyarak ziyaretçiye sunar.
Detay Sayfaları, Ana Sayfa, Session bilgileri ,Sık kullanılan ve veritabanından gelen veriler için kullanılır.
Memcache 2 yapıya daha ihtiyaç duyar ; memcached, libevent.
Libevent belirli bir süre geçtiğinde çağırılan kodları yeniden çalıştırmayı sağlar.
Memcache kullanırken dikkat edilmesi gereken önemli hususlar ise şunlardır.
1-) 1mb lik veri tutabilirsiniz.
2-)Verileriniz kaybolabilir. Bu durum 2 şekilde gerçekleşebilir. Verdiğiniz süre veya ram alanının dolumu nedeniyle eski tarihli verilerin üstüne yazılabilir.
3-)Rdmbs cache kullanmadigina emin olunmalıdır.
4-)amplification attacks saldırılarına karşı önlem alınmalıdır.
Memcache için genellikle 11211 portuna ihtiyaç duyulur ama bu düzenlenebilir.
Memcache için php'de 19 kod bulunur. Ancak hepsini bilmeye gerek yoktur.
Connect komutu ile bağlantı yapılır.
set/add komutlarının herhangi biriyle belleğe veri yazılır.
get bellekteki veriyi okur.
delete seçilen veriyi siler.
flush tüm veriyi siler.
close ise sonlandırır. Burada bilinmesi gereken close memory sonunda kullanılmazsa suistimal edilebiliyor olmasıdır.
PHP tarafında kullanımına gelecek olursak ilk olarak çalışıp çalışmadığını kontrol edelim.
PHP:
echo extension_Loaded("memcache");
Bu sorgumuzun sonucu 1 olursa çalışıyor demektir.
Şimdi php sınıfımızı oluşturalım.
PHP:
$memcache = new Memcache;
$memcache->connect('127.0.0.1', 11211) or die ("Memcached bağlantı hatası");
Burada 127.0.0.1 localhost ıp'si ve 11211 memcache portumuzdur.
Şimdi veri ekleyip yazdıralım.
PHP:
$memcache->add("blok","içerik",FALSE,120); //buradaki 120 veriyi kaç saniye tutacağımızdır.
echo $memcache->get("blok");
120 saniye boyunca blok alanımızda "içerik" verimizi tuttuk. süreyi istediğiniz gibi değiştirebilirsiniz.
Şimdi gelelim ampllification attack vektörüne.
TCP/UDP 11211 portuna erişimi kısıtlamalısınız.
Saldırgan o porttan sunucuya saldırı çıkışının yapılmasını istediği IP üzerindenmiş gibi paket gönderiyor. Sunucu bu paketi bilmediği için kabul etmediğine dair karşı bir paket gönderiyor. Muhtemelen ilk paket TCP olarak gönderiliyor ve sonrasında da memcached 11211 portu üzerinden UDP paketler ileterek cevap veriyor.
Erişim kısıtlanırsa bu saldırı ortadan kalkıyor.
İyi Forumlar