API ve Güvenlik

Eğer web sitenizde API yoluyla veri alış, verişi yapıyorsanız güvenlik açıklarına dikkat edin. Eğer dikkat etmezseniz açıklar sayesinde kullanıcılarınızın bilgileri çalınabilir veya sunucunuz kötü isteklere maruz kalabilir. Eğer arka uç ve sunucu hakkında bilginiz yoksa Front End – Back End ve Full Stack Developer yazısından bilgi edinebilirsiniz.

API Nedir?

Web sitenizdeki dinamik içeriklerin hepsi API yoluyla çağrılmaktadır. Örneğin, bir kullanıcı kaydı yapacaksanız veya bir ziyaretçi giriş yapacaksa gerekli alanları doldurur ve API yolu ile sunucuya iletilir. Sunucuya kullanıcının bilgilerini gönderirsiniz ve sunucu veritabanına yeni kullanıcıyı ekler. Bunun sonucunda sunucu geriye bir durum gönderir. Kullanıcı kaydı oluşturuldu veya kullanıcı zaten var gibi mesajlar. Sunucu mesajı gönderirken API yoluyla mesaj ziyaretçiye yani istemciye iletilir. Kısacası istemci ile sunucu arasındaki iletişimi sağlar.

Aşağıdaki görselde gördüğünüz gibi ziyaretçi API yoluyla sunucuya mesaj gönderiyor, sunucu veritabanına erişiyor ve geri dönüş olarak ziyaretçiye durumunu iletiyor.

Eğer istemci hakkında bilginiz yoksa Yazılıma Başlangıç yazısına tıklayarak gidebilirsiniz.

A Guide For Product Managers — Smashing Magazine - WordPress Design and  Development

API Güvenliği

Siz sunucunuza normal istekte bulunabilirsiniz fakat saldırganlar API sayesinde sunucunuza kötü istekte bulunabilirler. API açıkları onlarca fazladır ki bunları saymakla belki bitiremeyiz.

Aşağıdaki adımları uygularsanız sitenizi fazlasıyla korumuş olursunuz.

  • Gelen İstekleri Doğrulayın (Access Control Allow Origin)

    Sadece sitenizden gelen istekleri kabul edin. Böylece diğer sitelerden ve sunuculardan gelen kötü istekleri kabul etmeyin. Bunu yapabilmek için Access-Control-Allow-Origin ve Access-Control-Allow-Headers kullanabilirsiniz. Access-Control-Allow-Origin değerine alan adınızı yazacaksınız ve sadece sizin sitenizden gelen istekleri kabul etmiş olursunuz.

  • Gelen İstekleri Sınırlandırın (Rate Limit)

    Sunucunuzda 1-3 saniyede tamamlanan işlemleriniz olabilir. Örneğin, kullanıcı kaydı oluşturulurken fotoğraf ekleyebilmeniz gibi. İstemciden fotoğrafı alır ve o fotoğrafı sunucuda barındırır. Bu işlem 1 saniye sürebilir. Bu gibi problemleri çözebilmeniz için gelen istek sayısını kontrol altına alın. Saldırgan saniyede 10000 istek gönderebilir. Buda sunucunun yavaşlamasına hatta çökmesine neden olur. Bu güvenlik problemini giderebilmeniz için saniyede maksimum 3 istek dakikada maksimum 20 istek gibi kendinize göre süreyi sınırlandırın. Bu konuyu rate-limit olarak araştırabilirsiniz. İnternette hazır kodları mevcut. Onları alıp kendinize göre düzenleyebilirsiniz.

    Eğer NodeJS ve ExpressJS kullanıyorsanız tıklayarak express-rate modülüne gidebilirsiniz.

  • Önemli Bilgileri Şifreleyin (JWT Token)

    Örneğin, kullanıcı giriş yaptı ve o kullanıcının bilgilerini alabilmeniz için e-posta, şifre veya id verebilirsiniz. Bunu sakın yapmayın! Bunu yaparsanız kötü niyetli biri çerezi düzenleyip id=1 yerine id=2 yapar ve o kullanıcının bilgilerine erişebilir. Bunun yerine JWT Token gibi bir şifreleme stratejisi kullanarak kullanıcın bilgilerini şifreleyip, çerezlerde saklayabilirsiniz. Böylece kötü niyetli kişi bilgileri değiştiremez çünkü şifreleme işlemi sunucu tarafından özel anahtar ile yapılıyor.

    Bakınız: JWT Token

  • XRSF ve CSRF Açıklarını Giderin (CSRF Token)

    Saldırgan kendi sunucusundan veya sitenize girip kullanıcı kaydı için API yoluyla sunucunuza isteklerde bulunabilir. Saldırgan farklı ip adresleriyle sunucunuza hızlıca isteklerde bulunabilir ve sunucunuz bu durumda çökebilir. Bu sorunu giderebilmek için istemci ve sunucu tarafında CSRF Jetonu barındırın. Sunucunuzda benzersiz bir şifre oluşturun ve daha sonrasında API’den gelen isteğin içeriğini kontrol edin. İçerisinde csrf-token olmadığını veya benzersiz bir şifre gönderdiğini göreceksiniz. Böylece sunucunuza sadece sitenizden yani sıradan ziyaretçiler tarafından istekler kabul edilir. Sunucunuzda benzersiz bir şifre oluşturun ve bu şifreyi istemcinize API yoluyla iletin. Sitenizde bulunan formun içerisine benzersiz şifreyi yani tokeni yerleştirin. Böylece benzersiz şifreye sadece siteniz tarafından ulaşılabilir olacak. Fakat sayfa her yenilendiğinde tokeni değiştirmeyi unutmayın. Her seferinde benzersiz bir şifre olmalı.

Eğer yazının devamını isterseniz aşağıdaki kısımdan değerlendirebilir ve aklınızda bir soru varsa aşağıdaki yorumlar kısmından ulaşabilirsiniz.

Eğer “Front End – Back End ve Full Stack Developer” yazısını okumadıysanız o yazıya gidip bilgi edinebilirsiniz.

3.4 5 votes
Puanla
guest
1 Yorum
Newest
Oldest Most Voted
Inline Feedbacks
View all comments
trackback
9 ay önce

[…] hakkında bilginiz yoksa API ve Güvenlik yazısına buradan […]