• 03-07-2014, 12:16:45
    #10
    loc adlı üyeden alıntı: mesajı görüntüle

    http://meteoncu.com/php-uyelik-siste...uvenlik-duvari

    Şu makaledeki ilk açıklamaları okuyunca korktum açıkçası.
    Makaledeki ilk paragrafı okudum. Session ve cookie ler tarayıcıda tutulur diyor. Gerisini okumadım ancak bu söylenen yanlış. Cookie tarayıcıda tutulur doğru ancak session sunucuda tutulur. Sadece "Session ID" yani kullanıcıya hangi session ait olduğuna dair bir cookie tarayıcıda tutulur. Örneğin sizin yukarda bahsettiğiniz
    $_SESSION["login"]
    değişkeni tarayıcı tarafında okunamaz veya değiştirilemez.
    Buradaki güvenlik problemi; brute force gibi bir yöntemle başka bir kullanıcının session ID'si tahmin edilmeye çalışılabilir.

    Daha önemli bir güvenliği açığı;
    PHP'nin kaynak kodlarına bakarsanız PHP session ID'lerini kullanıcının IP adresi, sunucunun lokal saati ve bir rastgele sayının MD5 veya SHA1 algoritması ile hash'i alınarak oluşturuyor. Çok düşük bir ihtimal de olsa farklı kullanıcılara aynı ID'yi verme olasılığı olduğu görünüyor.

    Yani şöyle;
    Bilgisayarlar rastgele sayıları saat bilgisine birkaç matematiksel işlem uygulayarak üretirler. Yani aynı anda gelen 2 farklı rastgele sayı üretme isteğine karşılık aynı sayı verilebilir. (Buna karşı önlem varsa bilemiyorum. C++ kaynak kodlarını açıp nasıl rastgele sayı ürettiğini de incelemek gerekir)
    Dolayısıyla aynı IP'den aynı anda giriş yapan 2 farklı kişiye aynı SESSION ID verilebilir.

    Tabi bu çok çok düşük bir ihtimal.
    Bunun bir güvenlik açığı oluşturmasını önlemek amacıyla kullanıcı login olurken session ID'sini de kaydedip bir sonraki kullanıcı login olurken "bu session ID başkasına verilmiş mi" diye kontrol yapmakta fayda var.

    Bu konuda akademik çalışmalar yapıyorum bildiklerim bunlar.
  • 03-07-2014, 13:08:28
    #11
    M y adlı üyeden alıntı: mesajı görüntüle
    Makaledeki ilk paragrafı okudum. Session ve cookie ler tarayıcıda tutulur diyor. Gerisini okumadım ancak bu söylenen yanlış. Cookie tarayıcıda tutulur doğru ancak session sunucuda tutulur. Sadece "Session ID" yani kullanıcıya hangi session ait olduğuna dair bir cookie tarayıcıda tutulur. Örneğin sizin yukarda bahsettiğiniz
    $_SESSION["login"]
    değişkeni tarayıcı tarafında okunamaz veya değiştirilemez.
    Buradaki güvenlik problemi; brute force gibi bir yöntemle başka bir kullanıcının session ID'si tahmin edilmeye çalışılabilir.

    Daha önemli bir güvenliği açığı;
    PHP'nin kaynak kodlarına bakarsanız PHP session ID'lerini kullanıcının IP adresi, sunucunun lokal saati ve bir rastgele sayının MD5 veya SHA1 algoritması ile hash'i alınarak oluşturuyor. Çok düşük bir ihtimal de olsa farklı kullanıcılara aynı ID'yi verme olasılığı olduğu görünüyor.

    Yani şöyle;
    Bilgisayarlar rastgele sayıları saat bilgisine birkaç matematiksel işlem uygulayarak üretirler. Yani aynı anda gelen 2 farklı rastgele sayı üretme isteğine karşılık aynı sayı verilebilir. (Buna karşı önlem varsa bilemiyorum. C++ kaynak kodlarını açıp nasıl rastgele sayı ürettiğini de incelemek gerekir)
    Dolayısıyla aynı IP'den aynı anda giriş yapan 2 farklı kişiye aynı SESSION ID verilebilir.

    Tabi bu çok çok düşük bir ihtimal.
    Bunun bir güvenlik açığı oluşturmasını önlemek amacıyla kullanıcı login olurken session ID'sini de kaydedip bir sonraki kullanıcı login olurken "bu session ID başkasına verilmiş mi" diye kontrol yapmakta fayda var.

    Bu konuda akademik çalışmalar yapıyorum bildiklerim bunlar.
    Yani sonuç olarak benim kullandığım yöntem yeterli midir?
  • 03-07-2014, 13:41:37
    #12
    loc adlı üyeden alıntı: mesajı görüntüle
    Yani sonuç olarak benim kullandığım yöntem yeterli midir?
    kayıt olurken kişiye özel 30 karakter kod oluşturtup yazdır veritabanına. o kod ile session kontrolü yap. buda bir yöntem.
  • 03-07-2014, 13:56:24
    #13
    yakoSin adlı üyeden alıntı: mesajı görüntüle
    Bir session ile de session'ın hangi sitede kaydedildiği bilgisini tutatabilirsin.
    Sadece local'desession çakışması olur. Sunucuda bu tarz problem yaşamazsın.
    Şuan sunucuda denedim mesela 2 scriptte de online oldum...
  • 03-07-2014, 14:10:43
    #14
    loc adlı üyeden alıntı: mesajı görüntüle
    Yani sonuç olarak benim kullandığım yöntem yeterli midir?
    Bu konuda verdiğiniz kodlarda benim söylediğim 2 güvenlik problemine de çözüm yok. Üzerinde dikkatlice düşünüp kendi kodunuzu kendiniz yazmanız bence en güzeli.
  • 03-07-2014, 14:13:44
    #15
    Misafir
    loc adlı üyeden alıntı: mesajı görüntüle
    Şuan sunucuda denedim mesela 2 scriptte de online oldum...
    Hiç karşılaşmamıştım. Ama madem çakışabiliyor, en mantıklısı session patch'leri ayırmak (bence).
  • 03-07-2014, 14:29:42
    #16
    Kimlik doğrulama veya yönetimden onay bekliyor.
    Aynı domain altında iki farklı klasörde falan denerseniz, çakışma yine olur. Sonuçta aynı sunucu ve domain içerisinde çalışacak yine. Bu şekilde sonuca varmak biraz sıkıntılı olabilir. @yakoSin hocamın dediği gibi session path'leri tanımlayabilirsin belki bu şekilde bir önlem alınmış olur. Ki zaten iki farklı domain falan olsa, aynı sunucuda olsalar bile, böyle bir çakışma sorunu yaşamazsınız. Bu sadece aynı domain içerisinde olduğu için oluyor. Local mantığı gibi.

    yakoSin adlı üyeden alıntı: mesajı görüntüle
    Orda biraz paranoya var gibi geldi bana. Ben kendi kullandığım yapıyı anlatayım.

    Formdan doldurulan değerler veritabanında varsa, 4 session oluştur.
    kullanici_id , giris , username , pass(şifrelenmiş hali)

    Her sayfada sessionlardan bu değerleri alır, bu bilgilerle bir üye kaydı olup olmadığına bakarım. Sistem üzerinden şifre değiştiğinde de, otomatik olarak login'e atıyor haliyle, ki olması gerekende bu bence.

    Benim sistemde, session'a müdahele edilse bile kullanıcının şifresinin şifrelenmiş halini bilmesi lazım ki sisteme girebilsin. Verdiğin linkteki yapıda da benzer işi üretilen kod yapıyor.

    Ayrıca ordaki sistem botlara engel koymuyor sadece limitlendiriyor. 2sn'de bir işleme izin veriyor.
    Söylediklerinize ek olarak hocam,

    Kullanıcının şifresinin şifrelenmiş halini direkt olarak session'da tutmak ne kadar güvenli olur bilmiyorum, çünkü bu konuda baya tereddütlerim vardı. Bende bu tarz bir yöntem kullanıyorum ama tek farkı şifrelediğim kullanıcı şifresinin içerisine farklı karakterler de ekliyorum ve bunu okurken bu karakterleri parse ediyorum. böylece biraz daha önlemi katlamış oluyoruz galiba. Katlamıyosak da, canımız sağolsun
  • 03-07-2014, 15:05:07
    #17
    Misafir
    _BuKi_ adlı üyeden alıntı: mesajı görüntüle
    Aynı domain altında iki farklı klasörde falan denerseniz, çakışma yine olur. Sonuçta aynı sunucu ve domain içerisinde çalışacak yine. Bu şekilde sonuca varmak biraz sıkıntılı olabilir. @yakoSin hocamın dediği gibi session path'leri tanımlayabilirsin belki bu şekilde bir önlem alınmış olur. Ki zaten iki farklı domain falan olsa, aynı sunucuda olsalar bile, böyle bir çakışma sorunu yaşamazsınız. Bu sadece aynı domain içerisinde olduğu için oluyor. Local mantığı gibi.



    Söylediklerinize ek olarak hocam,

    Kullanıcının şifresinin şifrelenmiş halini direkt olarak session'da tutmak ne kadar güvenli olur bilmiyorum, çünkü bu konuda baya tereddütlerim vardı. Bende bu tarz bir yöntem kullanıyorum ama tek farkı şifrelediğim kullanıcı şifresinin içerisine farklı karakterler de ekliyorum ve bunu okurken bu karakterleri parse ediyorum. böylece biraz daha önlemi katlamış oluyoruz galiba. Katlamıyosak da, canımız sağolsun

    Session ile sıkıntı yaşamak için, hem sistem anlamında hemde yazılımsal olarak çok fazla açık kapı bırakmak lazım. Bi kere önce session değerimi okuması lazım , sonra onu çözmesi lazım , sonrasında da kendine bu değeri ataması lazım. Cookie'lerden sessions'lara geçiş sebebimiz zaten güvenilir olması ve dışarıdan müdahele edilemez olması. Yok müdahele edilebiliyorsa, cokkie'den farkı ne diye sorarlar adama
    • _BuKi_
    _BuKi_ bunu beğendi.
    1 kişi bunu beğendi.
  • 03-07-2014, 17:22:10
    #18
    En basitinden Codeigniter'ın oturum sınıfını inceleyebilirsiniz. Gerçi session gibi görünse de kriptolanmış cookie kullanıyor. Çeşitli tanımlamalarla veritabanıyla eşzamanlı ip, user agent gibi kontrolleri yapabiliyor.