Mario

WFN Üye
Konular
622
Mesajlar
622
Çözüm
0
Ticaret Puanı
0
Üyelik
24 Gün
Konum
Zonguldak
Web Sitesi
Var
Alanı
Google Optimiz.
1/1
Konu sahibi
Python uygulamasını güvenli geliştirmek için önce desteklenen bir Python sürümü ve projeye özel sanal ortam kullanın; ardından bağımlılıkları yönetin, dışarıdan gelen verileri doğrulayın ve sorgularda veriyle komutları ayırın. Uygulamayı en az yetkiyle çalıştırıp gizli bilgileri koddan uzak tutarak ve güncellemeleri test ederek riski azaltabilirsiniz. Bu adımlar tek başına güvenlik garantisi vermez; uygulamanın ağ erişimi, yetkilendirme ve dağıtım ayarları da ayrıca değerlendirilmelidir.

Çalışma ortamını hazırlayın​


Güvenlik güncellemesi alan bir Python sürümü kurun ve terminalde python --version komutuyla hangi sürümün çalıştığını görün. Bazı sistemlerde komut python3 veya Windows'ta py olabilir. Kurulu sürümün hâlâ desteklenip desteklenmediğini Python'un resmî sürüm bilgilerinden doğrulayın.

Proje dizininde bir sanal ortam oluşturun. Sanal ortam, projenin paketlerini diğer Python ortamlarından varsayılan olarak ayırır; ancak güvenilmeyen kod için bir güvenlik kum havuzu değildir.

Kod:
python -m venv .venv

Linux veya macOS'ta bash ya da zsh kullanıyorsanız source .venv/bin/activate komutuyla ortamı etkinleştirin. Windows PowerShell'de .venv\Scripts\Activate.ps1, Komut İstemi'nde ise .venv\Scripts\activate.bat kullanın. Etkinleştirme zorunlu değildir; sanal ortamın içindeki Python çalıştırılabilir dosyasının yolu da doğrudan kullanılabilir.

Etkin ortamda aşağıdaki komutu çalıştırın:

Kod:
python -c "import sys; print(sys.executable); print(sys.prefix != sys.base_prefix)"

Çıktıdaki yolun projenin .venv dizinini göstermesi ve ikinci satırın True olması beklenir. False görürseniz ortamı yeniden etkinleştirin veya ortamın Python dosyasını doğrudan çalıştırın. Bu kontrol, doğru ortamın kullanıldığını gösterir; ortamın içindeki paketlerin güvenli olduğunu kanıtlamaz.

Bağımlılıkları ve gizli bilgileri yönetin​


Yalnız ihtiyacınız olan paketleri, adlarını ve kaynağını doğrulayarak kurun. Projenin bağımlılık sürümlerini bir dosyada veya kullandığınız paket yönetim aracının kilit dosyasında kaydedin; böylece geliştirme ve sunucu ortamlarında hangi sürümlerin kullanıldığını izleyebilirsiniz. Sürüm sabitlemek bilinen bir hatayı ortadan kaldırmaz: Bağımlılıkların güvenlik duyurularını düzenli izleyin, düzeltmeleri test ortamında deneyin ve ardından üretime geçirin.

Etkin sanal ortamda python -m pip check çalıştırmak, kurulu paketlerin bağımlılıklarının birbiriyle uyumlu olup olmadığını kontrol eder. Hata çıkarsa bildirilen paket ve sürüm gereksinimlerini inceleyip uyumlu sürümleri seçin. Bu komut güvenlik açığı taraması yapmaz.

API anahtarlarını, parolaları ve erişim belirteçlerini kaynak koduna veya sürüm kontrolüne koymayın. Bunları ortam değişkeni ya da dağıtım ortamınızın gizli bilgi yönetimi aracılığıyla sağlayın; erişimi uygulamanın ihtiyaç duyduğu hesaplarla sınırlayın. Bir anahtar yanlışlıkla depoya veya günlüğe yazıldıysa yalnızca kaydı silmekle yetinmeyin: Anahtarı sağlayıcıda iptal edip yenisini oluşturun ve uygulamayı yeni değerle güncelleyin.

Dış girdiyi veri olarak işleyin​


Kullanıcıdan, dosyadan veya ağdan gelen veriyi beklediğiniz tür, uzunluk ve biçime göre doğrulayın. Doğrulama, veriyi kullanacağınız yere uygun korumaların yerine geçmez. Özellikle SQL sorgularında kullanıcı girdisini metne birleştirmek yerine parametre kullanın.

Aşağıdaki varsayımsal örneği sorgu_ornegi.py adıyla kaydedip python sorgu_ornegi.py komutuyla çalıştırabilirsiniz. Harici paket veya mevcut veritabanı gerektirmez:

Python:
import sqlite3

con = sqlite3.connect(":memory:")
try:
    con.execute("CREATE TABLE kullanicilar (ad TEXT)")
    con.execute("INSERT INTO kullanicilar (ad) VALUES (?)", ("ayse",))

    aranan = input("Kullanıcı adı: ")
    satir = con.execute(
        "SELECT ad FROM kullanicilar WHERE ad = ?", (aranan,)
    ).fetchone()
    print("Bulundu:", satir[0]) if satir else print("Kayıt bulunamadı")
finally:
    con.close()

ayse girildiğinde Bulundu: ayse, örneğin ' OR 1=1 -- girildiğinde ise Kayıt bulunamadı çıktısı beklenir. İkinci girdi SQL komutu olarak değil, aranacak kullanıcı adı olarak ele alınır. Bu örnek yalnızca sorgudaki değerleri korur; tablo veya sütun adlarını kullanıcı seçiyorsa bunları ayrıca izin verilen adlar listesiyle sınırlamanız gerekir. Parametreli sorgu, kullanıcının kaydı görmeye yetkili olup olmadığını da belirlemez.

Kullanıcı girdisini eval() veya exec() ile çalıştırmayın; güvenilmeyen kaynaklardan gelen pickle verisini açmayın. Veri alışverişi için uygun olduğunda JSON kullanabilir, okuduğunuz alanları ayrıca doğrulayabilirsiniz. JSON kullanmak da verinin doğruluğunu veya kaynağın güvenilirliğini kendiliğinden garanti etmez.

Bir otomasyon betiği dış program çalıştırıyorsa mümkünse Python'un kendi kütüphanelerini tercih edin. subprocess gerektiğinde, komutu ve argümanlarını ayrı liste öğeleri olarak verin; kullanıcı girdisini shell=True ile oluşturulan bir komuta birleştirmeyin. Yine de dış programın kabul ettiği seçenekleri doğrulayın: Kabuk kullanılmaması, programa verilen her argümanın güvenli olduğu anlamına gelmez. Windows'taki toplu iş dosyaları için ayrıca platforma özgü kabuk davranışını dikkate alın.

Sunucuda yetkileri ve hataları sınırlandırın​


Uygulamayı mümkünse yönetici yerine ayrı ve sınırlı yetkili bir hesapla çalıştırın. Bu hesaba yalnız gerekli dosya, veritabanı ve ağ erişimini verin. Web uygulamasında hata ayıklama modunu üretimde kapatın; ayrıntılı hata kayıtlarını erişimi sınırlandırılmış günlüklerde tutun ve kullanıcıya gizli bilgi içermeyen bir hata mesajı gösterin.

Dağıtımdan önce beklenen girdileri, reddedilmesi gereken girdileri ve yetkisiz erişim denemelerini test edin. Bir sorun incelenirken günlüklerde parola, belirteç veya kişisel veri yayımlamayın; geçici tanılama çıktısını iş bitince kaldırın. Güncelleme sonrasında testleri tekrar çalıştırın ve başarısızlık varsa ilgili hata mesajı ile değişen sürümleri karşılaştırarak uyumsuzluğu giderin.
 

Sende şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Foruma git ?

Bu konuyu görüntüleyen kullanıcılar

Bu konuyu şu anda görüntüleyen üye bulunmuyor.
Robotlar:
  • Anthropic