1. HTTPS Kullanarak Verilerinizi Şifreleyin
Güvenli veri iletimi için HTTPS, olmazsa olmazlardan biridir. HTTP protokolü üzerinden gönderilen veriler, şifrelenmediği için kötü niyetli kişiler tarafından ele geçirilebilir. Bu durum, özellikle kişisel bilgilerin ve hassas verilerin iletildiği API’ler için ciddi bir tehdit oluşturur. Flask uygulamanızda HTTPS kullanarak bu riski ortadan kaldırabilirsiniz.
Adım Adım HTTPS Kurulumu:
Flask uygulamanızda HTTPS kullanabilmek için bir SSL sertifikası edinmeniz gerekir. Bunun için çeşitli ücretsiz hizmetlerden yararlanabilirsiniz. Sertifikanızı aldıktan sonra Flask'ı şu şekilde HTTPS ile çalışacak şekilde yapılandırabilirsiniz:
from flask import Flask
from OpenSSL import SSL
context = SSL.Context(SSL.TLSv1_2_METHOD)
context.use_privatekey_file('key.pem')
context.use_certificate_file('cert.pem')
app = Flask(__name__)
@app.route('/')
def home():
return "Merhaba, güvenli API!"
if __name__ == '__main__':
app.run(ssl_context=context)
Bu basit adımla birlikte, API'niz artık şifreli iletişim üzerinden çalışacak ve kullanıcılarınızın verileri güvende olacak.
2. API Anahtarları ve JWT ile Kimlik Doğrulama
API anahtarları ve JSON Web Token (JWT), uygulamanızda kimlik doğrulama ve yetkilendirme işlemleri için güvenli yöntemlerdir. API anahtarları, belirli kullanıcıların veya uygulamaların API'nize erişmesini sağlarken, JWT daha gelişmiş ve güvenli bir yöntem sunar. JWT, şifreli token’lar kullanarak kullanıcıları doğrulamak ve izin vermek için idealdir.
JWT ile Kimlik Doğrulama:
Flask uygulamanızda JWT ile güvenli kimlik doğrulama yapmak için `PyJWT` kütüphanesini kullanabilirsiniz. Basit bir örnek:
import jwt
from datetime import datetime,
SECRET_KEY = 'your_secret_key'
def create_jwt(user_id):
expiration = datetime.utcnow() +(hours=1)
payload = {
'user_id': user_id,
'exp': expiration
}
token = jwt.encode(payload, SECRET_KEY, algorithm='HS256')
return token
Bu şekilde, kullanıcıların her istek öncesinde geçerli bir token almasını sağlayarak API’nize olan erişimi güvence altına alırsınız.
3. Rate Limiting (Hız Sınırlaması) ile DDoS Saldırılarına Karşı Koruma
Flask uygulamanızda rate limiting (hız sınırlaması) kullanarak DDoS saldırılarına karşı koruma sağlayabilirsiniz. Bu, belirli bir IP adresinden gelen istek sayısını sınırlayarak kötü niyetli saldırıların etkisini azaltır.
Flask ile Rate Limiting:
Flask, `Flask-Limiter` gibi kütüphanelerle hız sınırlaması yapmanıza imkan tanır. Örneğin, kullanıcı başına dakikada 100 istek hakkı tanıyabilirsiniz:
from flask import Flask
from flask_limiter import Limiter
from flask_limiter.util import get_remote_address
app = Flask(__name__)
limiter = Limiter(app, key_func=get_remote_address)
@app.route("/api/")
@limiter.limit("100 per minute")
def api():
return "API istek limitine hoş geldiniz!"
if __name__ == "__main__":
app.run()
Bu basit sınırlama, uygulamanızı kötüye kullanıma karşı daha dirençli hale getirecektir.
4. SQL Enjeksiyonuna Karşı Korunma
SQL enjeksiyonları, bir API'yi hedef alarak veritabanına kötü niyetli sorgular göndermeye çalışmak anlamına gelir. Flask uygulamanızda veritabanı işlemleri yaparken güvenlik önlemleri almanız, bu tür saldırıları önlemek için kritik öneme sahiptir.
SQL Enjeksiyonundan Kaçınmak:
Veritabanı sorgularınızda kullanıcıdan gelen verileri doğrudan kullanmak yerine parametreli sorgular kullanarak SQL enjeksiyonlarını engelleyebilirsiniz. Örneğin:
from flask import Flask, request
import sqlite3
app = Flask(__name__)
@app.route('/user')
def get_user():
user_id = request.args.get('id')
connection = sqlite3.connect('database.db')
cursor = connection.cursor()
cursor.execute("SELECT * FROM users WHERE id=?", (user_id,))
user = cursor.fetchone()
connection.close()
return f"User: {user}"
if __name__ == "__main__":
app.run()
Bu şekilde, parametreli sorgularla SQL enjeksiyonlarının önüne geçebilirsiniz.
5. Güvenli Hata Yönetimi ve Loglama
Hata mesajları, potansiyel saldırganlar için büyük bir bilgi kaynağı olabilir. Flask uygulamanızda hata mesajlarını dikkatli bir şekilde yönetmek, güvenliği artırmanıza yardımcı olacaktır.
Hata Yönetimi:
Flask’ta hata mesajlarını kullanıcıya göstermek yerine, yalnızca log dosyalarına kaydedebilirsiniz. Bu, potansiyel saldırganların uygulamanızın iç yapısı hakkında bilgi edinmelerini engeller.
import logging
from flask import Flask
app = Flask(__name__)
logging.basicConfig(filename='error.log', level=logging.ERROR)
@app.route('/error')
def error():
try:
1 / 0 # Hata oluşturma
except ZeroDivisionError as e:
app.logger.error('Hata: %s', e)
return "Bir hata oluştu!"
if __name__ == "__main__":
app.run(debug=False)
Bu örnekte, hata mesajları kullanıcıya gösterilmez, bunun yerine sadece log dosyasına kaydedilir.
Sonuç: Güvenli API'ler, Güvenli Uygulamalar
Flask ile API geliştirmek oldukça heyecan verici bir süreç olabilir, ancak güvenliği ihmal etmemek de aynı derecede önemlidir. Yukarıdaki adımları takip ederek, Flask uygulamanızın güvenliğini artırabilir ve dış tehditlere karşı daha dirençli hale getirebilirsiniz. API güvenliği, sadece verilerinizi değil, kullanıcılarınızın da güvenliğini korur. Bu yüzden her adımı dikkatle uygulayın ve güvenli bir API için gerekli önlemleri almaktan çekinmeyin.