Php ve React.js ile api güvenliği nasıl sağlanır?
Merhaba arkadaşlar. Ben web sitemin front-end kısmını Reacjt.js ile back-end kısımını ise php ile yapıyorum. Php'de verileri veritabanından çekip json'a çeviriyorum ve sonra bu verileri React.js'de fetch ile alıyorum. Benim takıldığım nokta bu api adresine örneğin siteismi.com/uyecek.php sayfasına başka uygulamalardanda sorgu yapılabilir. Bunu nasıl engelleyebilirim? Bu api'ı sadece ben kullanmak istiyorum. Dışarıdan izinsiz kimse erişemesin istiyorum.
1. IP Kontrolü: PHP'de sadece web sitenin IP adresinden gelen isteklere yanıt verilmesini sağla.
$_SERVER['REMOTE_ADDR']
sana isteğin geldiği IP adresini verir. Bir if kontrolüyle, bu IP'den gelmeyen isteklere hata dönebilirsin.
Kullanıcı, header'dan giden IP bilgisini değiştirebilir ve isteği sitenden yapılmış gibi gösterebilir. Bu yüzden sadece bu koruma yeterli değil.
2. Token Kontrolü: CSRF açıklarından korunmak için iyidir. Front end önce PHP'ye istek atıp token alır ve bundan sonra yapacağı tüm isteklerde header üzerinden bu token'ı iletir. PHP, gelen isteğin header'ında bu token'ı kontrol eder.
Burada bahsettiğim token, PHP tarafında sadece senin bildiğin bir anahtar ile şifrelenmiş bir string ifade. Sana bu token ile bir istek yapıldığında elindeki anahtarla token'ı açtığında, senin token'ın içine koyduğun verilere ulaşamıyorsan servisine hata döndürebilirsin.
Kullanıcı anahtar olmadan bu token'ı kendisi üretemeyeceği için bir güvenlik sağlar. Ama kullanıcı siteye bir kez giriş yaptığında bir token elde edebileceğine göre bu token ile sunucuya yine isteklerde bulunabilir. Bu yüzden token'ların içine bir son kullanım tarihi de eklemek iyi olur. Ama bu token'ın kullanım süresi boyunca kullanıcı bu token ile sunucuya istekler atabilir. Ayrıca token süresi dolsa bile yine siteye girip yeni token bir alabilir. Yani bu koruma da tam olarak yeterli değil.
3. HTTPS: HTTPS protokolü, iletişimi şifreleyerek istekleri güvenli hale getirir. Bu nedenle, sadece HTTPS kullanımına izin vermek de ek bir güvenlik sağlar.
if (empty($_SERVER['HTTPS']) || $_SERVER['HTTPS'] === 'off') { // HTTPS ile istek yapılmamış...
şeklinde bir kontrol eklenebilir.
Kullanıcı https üzerinden de istek atabilir. Bu da yeterli değil.
4. CAPTCHA: Botların otomatik isteklerini engellemek için kullanılan bir güvenlik önlemi olsun diye kullanılabilir. Bu sitede olduğu gibi...
Kullanıcı sitene girmeden de servisinin endpoint'lerine istek atabilir. Bu elbette senin soruna binaen yeterli bir önlem değil.
5. DDoS: Sunucu tarafında bu saldırıları önmelek için güvenlik duvarı kullanmak, tüm kaynakları kendi sitende barındırmak yerine cdn kullanmak iyi olabilir.
Bunun da doğrudan soruyla ilgisi yok ama yapmak iyi olur. Paylaşımlı sunucularda genelde bu hazırda vardır. Sunucu seninse bu kontrolleri de senin yapman gerekebilir.
Böyle şeyler... Bunlar geldi aklıma. Bunlar içinde özellikle token kullanmak, istenmeyen istekleri reddetmek için kullanılabilir. Çoğu sistem bu şekilde çalışıyor.