PHP Rest Api Güvenliği Nasıl Sağlanır ?
-
Evet beyler sorumuzu detaylandıracak olursak , rest api şeklinde çalışma yaparken aldığınzı güvenlik önlemleri nelerdir ?
Senaryo üzerinden gidersek ,
Bir üyelik sistemi olduğunu varsayıp üye kaydı , üye login işlemlerini yaparken güvenlik olarak nelerdir ?
site.com/api/uyeOlustur adresinde üyeliğimizi oluşturacağımız functionu çağırdığımzıda hangi güvenlik önlemlerini nasıl alıyorsunuz ?
Mesala üyelik oluşturuken kullanıcıya güvenlik kodu soruyormusunuz, soruyorsanız kodu nerede oluşturup kullanıcıya sunuyorsunuz ?
Yada login işleminde token kullanımını nasıl yapıyorsunuz, token oluşturup doğrulama dışında başka işlemler yapıyormusunuz ?
Hadi biraz bu konuları tartışalım bakalım nasıl fikirler ortaya çıkacak
-
Hocam token'i sadece deneme amaçlı kullanmıştım Proje içine tokenli işlem dahil etmedim şuana kadar gerek duyarsam eklerim .
Token de şöyle oluyor mesela Kullanıcı adı şifre doğru ise Kullanıcıya Değişken tokenler veriyorsun bu tokenlerle get veya post işlemini yapıyorsun.
Bu sebepten dolayı adam giriş yapmadığı sürece adamların senin servisini kullanmasına izin vermiyorsun.
Bide şöyle bir önem almak gerekiyor mesela adam sonsuz defa senin servisine post ederek bütün başarılı loginleri çekebilir bunun için de 3.-5. denemeden sonra Adama "hayırdır sen heykır mısın yoksa ? " dedirtmen gerekiyor.
bide şöyle bir önlem alınması gerekiyor mesela 1 key ile bütün işlemleri yapamaz kullanıcıyı da izlemen gerekiyor. Hatta yaptığı postlara falan da kısıt koylamısın örneğin E-ticaret sistemi yaptım diyelim adam giriş yaptı ordan tokeni çekti. bu adam o token ile milyon tane ürünü sepete koyabilir yada 1 ürünü 50-60 defa alıp tek 1 defa ödeme yapabilir bunların da önlemleri almak gerekiyor sunucu tarafında. Şahsen ben gerek kalmadıkça program içerisine kod yazmamaya çalışıyorum . hep sunucu çalışsın ama bu seferde sunucuyu yoruyorum . Tartışılabilir :D bunlar benim bildiğim yada bildiğimi sandıklarım :)
-
Login için bu standarta bakabilirsin.
Ip request limiti koymak mantıklı.
Telefon için yazdığını varsayıyorum. Captcha falan kullanıcıyı soğutan birşey telefonda. Ama illa yapıcam diyorsan kodu server tarafında oluşturup resim url'ini vermen gerek.
Genel olarak aklıma gelenler bunlar.
-
cevaplar için sağolun beyler, varmı farklı yöntemleri olan, şunu şunu kullanıyorum şöyle yapıyorum diyen
-
Redbeanphp ve router kullanıyorum. Her kullanici için her login olduğunda bi token oluşuyor. Veritabanındaki token ile eşleşiyorsa sonuc olumlu oluyor
-
Hafta sonu konuyu kimse görmemiş olabilir bi uplayalım, yorumları , fikirleri bekliyoruz
-
hocam kullanıcı girişleri (auth) ile uğraşmak istemezseniz https://auth0.com/ adresini inceleyebilirsiniz. bu hizmeti servis olarak ücreti mukabilinde sağlıyorlar. dokümanları oldukça geniş.
ayrıca https://www.owasp.org/index.php/REST_Security_Cheat_Sheet adresinden de faydalanılabilir.
-
Soruların birazcık hatalı ama anladığımı tahmin ettiğim gibi yazmaya çalışayım.
Güvenlik önlemleri klasik sistemler ile restful api sistemler için farklı değil. Her işlem için cookie değeri istenebilir ya da cookie mümkün olmuyorsa post değerine token eklenmesi sağlanır.
Ve sadece giriş ve kayıt için değil her post ile yapılan isteklerde bir güvenlik değeri olmasında fayda var. Tabi bu post değeri veritabanını etkiliyor ya da hatrı sayılır miktarda işlem yükü oluşturan post istekleri ise eklemek lazım. Yoksa post ile yapılacak işlem güvenlik değerinin çözülmesinden daha az sistem kaynağı harcıyorsa eklemeye gerek yoktur.
Güvenlik kodu(captcha) için ise sistemin anlık durumuna göre girilmesini istemek daha iyidir. Örneğin son bir saatte bin adet yeni üye oluşturulmuş ise sistem saldırı altında diye yeni üyelik için güvenlik kodu girilmesi zorunlu hale getirilir ve o gün kayıt olan her üyenin de sisteme giriş yaptıktan sonra güvenlik kodu girmesi istenir.
Güvenlik kodu girilmesi gerektiği zamanlarda /kayit-ol sayfası istendiğinde form tokenı iliştirir gibi resim urlsini de ekleyeceksin. Hatta resmi base64 şeklinde bile iliştirebilirsin.
Token dışında en önemli güvenlik önlemi IP. Onuda şöyle yapmak en iyisi oluyor. Mesela bir üye giriş yapmış ve IP bilgisi kişinin Türkiye/Ankara'da olduğunu söylüyor. Ve bu adamın IP'si sürekli Türkiye bilgisini sağlıyor. Üye birden İngiltere IP'si ile bağlanırsa hemen şifre girmesini istiyoruz. Şüpheli işlem olarak isim veriyoruz. Tabi bunu uygulamak üyelerin ne kadar önemli bilgileri olduğuna bağlıdır.
Böyle daha başka yöntemlerde var ama en verimlisi bunlar.
Edit: en önemli şeyi unutmuşum HTTPS. İç ağdan verilerin çalınmamasıda oldukça önemli konu.
PcK0 tarafından 11/Nis/16 19:53 tarihinde düzenlenmiştir