• 30-10-2017, 20:40:32
    #1
    Merhabalar,
    PHP konusunda kendimi geliştirmeye çalışıyorum. Form işlemleriyle ilgili bir sorunum var. Referans noktası olarak düzenlenecek hesabın id'sini butona value olarak ekliyorum. POST işleminde butondan value'yu çekerek işlem yaptırıyorum. Fakat chrome'da bulunan öğeyi incele muhabbetinden, butonun value'yi değiştirince başka bir hesabın değerlerini POST ettirebiliyorum. Kısacası aradığım şey şu, HTML formlarını nasıl manipüle edilemez hale getirebilirim? Adam sağ click yapıp valuelarla oynasa bile, butona bastığı an adamı dışardan müdahale etmiş olduğu şeyleri nasıl defaulta çevirebilirim? ASP.net'de sanırım kendiliğinden bu özellik var. Yani kullanıcılar formlar üzerinde oynayıp değerleri değiştirseler bile koruma sistemi onların yaptığı oynamaları geçersiz kılıyor diye biliyorum.
  • 30-10-2017, 20:53:41
    #2
    Misafir
    öncelikle dediğiniz şeyin bir imkaniyeti yok.
    XSS denen şey istediğiniz olsaydı zaten olmazdı.
    ID değerini session vs. şeyler ile taşıyabilirsin
    Ancak html manipule diye bir şey yok adamı js vs. ilede durduramazsın çünkü sayfanda yazarak js de müdahale edilebiliyor.
    Php de kontrollerini sıklaştır nasıl bir sistemde ihtiyaç duyuyorsun kişi tam olarak ne yapıyor belirtirsen daha detaylı yardımcı olabilirim
    • serhatyucell
    serhatyucell bunu beğendi.
    1 kişi bunu beğendi.
  • 30-10-2017, 21:00:34
    #3
    Hesabın id'sini butona değer atayarak almayacaksınız, arkaplanda datayı gönderen/isteyen kişinin id'sini alıp eşleştireceksiniz.Eğer diyorsanız id dinamik olarak geliyor, o zaman yine arkaplandan o id'nin gerçekten olup olmadığını ve datayı gönderen/isteyen kişiye ait olup olmadığını bulmanız gerekiyor.Sistemi ve yapıyı bilmediğimiz için tam bir şey söylemek malesef mümkün değil.
    Eğer bunlar size uymazsa sayfa load olurken göndermek istediğiniz veriyi bir değişkene atarsanız kaydetmiş olursunuz kullanıcı normal yollarla bu veriyi değiştirse bile hafızada sayfa yüklenirken değişkene atadığınız veri arkaplana gönderilecektir, ekstra bir güvenlik önlemi denebilir ama %100 güvenlik sağlamaz.
  • 30-10-2017, 21:23:52
    #4
    Misafir adlı üyeden alıntı: mesajı görüntüle
    öncelikle dediğiniz şeyin bir imkaniyeti yok.
    XSS denen şey istediğiniz olsaydı zaten olmazdı.
    ID değerini session vs. şeyler ile taşıyabilirsin
    Ancak html manipule diye bir şey yok adamı js vs. ilede durduramazsın çünkü sayfanda yazarak js de müdahale edilebiliyor.
    Php de kontrollerini sıklaştır nasıl bir sistemde ihtiyaç duyuyorsun kişi tam olarak ne yapıyor belirtirsen daha detaylı yardımcı olabilirim
    Senaryodan bahsedeyim.
    1-Database'den tüm üyelerin listesini bir tabloya çekiyorum.
    2- Her üyenin satırına "düzenle" isimli bir buton koyuyorum ve düzenle butonunun valuesunu, database'den gelen primary key olan uye_id olarak tanımlıyorum.
    3-Butona basınca, butonun valuesunu çekerek, hangi üyenin düzenlenmesi gerektiğini sisteme söylüyorum value="4" ise id'si 4 olan üyenin bilgilerini getir diyorum.
    Bu durumda mesela id'si 4 olan üyenin butonuna sağ tıklayıp value'yu 5 yaparsam ve ardından o butona basarsam id'si 5 olan üyenin bilgileri geliyor. Bunun ileride güvenlik açığı oluşturacağını düşünüyorum.
  • 30-10-2017, 21:34:25
    #5
    Misafir
    serhatyucell adlı üyeden alıntı: mesajı görüntüle
    Senaryodan bahsedeyim.
    1-Database'den tüm üyelerin listesini bir tabloya çekiyorum.
    2- Her üyenin satırına "düzenle" isimli bir buton koyuyorum ve düzenle butonunun valuesunu, database'den gelen primary key olan uye_id olarak tanımlıyorum.
    3-Butona basınca, butonun valuesunu çekerek, hangi üyenin düzenlenmesi gerektiğini sisteme söylüyorum value="4" ise id'si 4 olan üyenin bilgilerini getir diyorum.
    Bu durumda mesela id'si 4 olan üyenin butonuna sağ tıklayıp value'yu 5 yaparsam ve ardından o butona basarsam id'si 5 olan üyenin bilgileri geliyor. Bunun ileride güvenlik açığı oluşturacağını düşünüyorum.
    Hocam bu bir güvenlik açığı değil siz zaten bunu bir panelin içine koyacaksınız.
    Bu ekrana gelmek için bir kullanıcı adı / şifre geçilecek.
    Eğer ki kullanıcı seviyesi belirleyip her işlem sonrası bunuda eşleştirirseniz değiştirilmesi bir sıkıntı yaşatmaz.
    Mesela siz panele giriş yaptınız seviniyeniz moderatör ve siz bir şekilde kullanıcı düzenle sayfasına id 5 değerine sahip bir kullanıcı ile düzenleme sayfası açtınız
    Sayfada düzenleme işlemi yaptığınızda kullanıcının böyle bir işleme yetkisi olup olmadığını kontrol ederseniz otomatik olarak neyi değiştirmeye çalıştığı önemsiz olur
    Ayrıca zaten seviyelendirme yaptığınızda o sayfalara otomatik giremez yani sayfa yüklenmez yetkiniz yok der yada direk ana dizine atar o şekilde ayarlarsınız.
    Sağ tık ile id numarası değiştirme bir açık değildir ve engellenemez.
    Siz o ekrana girişi güvenli hale getirin wordpress sitenize yeni yazı ekleyeceğiniz zaman önüne gelen ziyaretçi mi bu ekraa ulaşıyor yoksa admin paneline girebilen mi ?
    Yönetim panelinizin içine gene XSS için vs. temizleme kodları koyun ama o kadarda sıkıntı edilcek bir durum değil sizinki.
  • 30-10-2017, 21:46:33
    #6
    Misafir adlı üyeden alıntı: mesajı görüntüle
    Hocam bu bir güvenlik açığı değil siz zaten bunu bir panelin içine koyacaksınız.
    Bu ekrana gelmek için bir kullanıcı adı / şifre geçilecek.
    Eğer ki kullanıcı seviyesi belirleyip her işlem sonrası bunuda eşleştirirseniz değiştirilmesi bir sıkıntı yaşatmaz.
    Mesela siz panele giriş yaptınız seviniyeniz moderatör ve siz bir şekilde kullanıcı düzenle sayfasına id 5 değerine sahip bir kullanıcı ile düzenleme sayfası açtınız
    Sayfada düzenleme işlemi yaptığınızda kullanıcının böyle bir işleme yetkisi olup olmadığını kontrol ederseniz otomatik olarak neyi değiştirmeye çalıştığı önemsiz olur
    Ayrıca zaten seviyelendirme yaptığınızda o sayfalara otomatik giremez yani sayfa yüklenmez yetkiniz yok der yada direk ana dizine atar o şekilde ayarlarsınız.
    Sağ tık ile id numarası değiştirme bir açık değildir ve engellenemez.
    Siz o ekrana girişi güvenli hale getirin wordpress sitenize yeni yazı ekleyeceğiniz zaman önüne gelen ziyaretçi mi bu ekraa ulaşıyor yoksa admin paneline girebilen mi ?
    Yönetim panelinizin içine gene XSS için vs. temizleme kodları koyun ama o kadarda sıkıntı edilcek bir durum değil sizinki.
    Hocam bu senaryoyu tamamıyla örnek olarak verdim. ASP.net ile yazılan sitelere bakıyorum, hemen hemen birçoğunda value değeri kullanılmıyor mesela. Atıyorum ben oyun tasarladığımda, eşya sistemi olarak düşünebiliriz adam id'si 20 olan eşyayı at dediği zaman eğer buton valuesu değiştirilmişse ve 18 yapılmışsa 18'i atmaya çalışacak. Tamam şu kontrolü yaptırıyorum. id'si 18 olan eşya hangi karaktere ait onu kontrol et diyip büyük bir açığın önüne geçmiş oluyorum ama ne bileyim, id'si 20 olan da ona ait olsa bile atmamalı diye düşünüyorum sonuçta adam id'si 18 olana tıkladı. Düşünsenize oyunda çok önemli bir iteminiz var, 5 dakika bilgisayar başından kalkıyorsunuz, biri geliyor ve çöpe atılabilecek önemsiz eşyanın butonun valuesunu, çok önemli bir itemin id'si ile değiştiriyor ve siz önemsiz olanı çöpe atmak istediğinizde en güzel iteminiz çöpe gidiyor. Ütopik bir örnek olabilir ama anlatmak istediğim şeyi, daha rahat açıklamak için kullanmak istedim.
  • 30-10-2017, 21:53:43
    #7
    Misafir
    Hocam siz ne yazacaksanız yazın yada yazılacak şeyi söyleyin ona göre yardımcı olalım.
    Senaryolar üzerinden konuşacaksak bende komşumun elektrik direği ile aynı mesafede olduğundan atıyorum misine teli gibi bakınca kimsenin anlamayacaği bir nesne ile kablolardan ücretsiz elektrik almasını istemiyorum. Ama bunun için kalkıp kafa yormuyorum.
    Siz ne yazıyorsunuzda butona id verememek sizi öldürüyor.
    Her kullanıcı için girer girmez 1 adet session veya cookie oluşturun ve dizi tanımlayın sonrada bunu sha5 ile şifreleyin.
    Her sayfa geçisinde bunu çözüp kullanıcı bilgilerini ve ID yi veya sizin için sağ tık ile değiştirilmesi hayati önem taşıyan ne varsa taşıyın.
    Bu yöntemlede hiçbir dosyanız bilginiz çalınmaz değiştirilmez.
    He ama böyle bir şey yapmadan oturup gene ama buda ileride kırılır diye düşünüp senaryolar kurmak gereksiz.
  • 30-10-2017, 23:36:22
    #8
    Hocam, id si 18 i değiştirmeye yetkisi olanın 20 yi değiştirme yetkisi de olur. Yani adam o sayfaya girmişse zaten orada yetkisi var demektir.

    Bakın önemli bir nokta; hiçbir zaman client karar verici olamaz!! Yani siz istediğiniz kadar client ta js ile yada html ile önlem alın, işe yaramaz.

    Eğer bir kullanıcı 1 den 100 e kadar id li veritabanı sonuçlarını görebiliyorsa ve siz bu kullanıcının 20 yi değiştirebilmesine rağmen 18 i değiştirmesini istemiyorsanız bu önlem clientta alınmaz. Sizin veritabanınızda bu kullanıcının 18 i değiştirmeye yetkisini kısıtlamanız lazım. Kullanıcı bunu butondan göndermez postmandan gönderir, curl ile gönderir, ajax ile gönderir. Bir şekilde gönderir. Siz server tarafında bu post geldikten sonra önleminizi almalısınız. Post un gönderilmesini engelleyemezsiniz.

    Dolayısıyla sizin yapabileceğiniz en doğru şey client a iş bırakmamaktır. En ufak bir karar bile almamalıdır client. Üstüne basa basa söylüyorum. Client karar alamaz.

    Bol şans.
  • 31-10-2017, 10:51:34
    #9
    mpoy8 adlı üyeden alıntı: mesajı görüntüle
    Hocam, id si 18 i değiştirmeye yetkisi olanın 20 yi değiştirme yetkisi de olur. Yani adam o sayfaya girmişse zaten orada yetkisi var demektir.

    Bakın önemli bir nokta; hiçbir zaman client karar verici olamaz!! Yani siz istediğiniz kadar client ta js ile yada html ile önlem alın, işe yaramaz.

    Eğer bir kullanıcı 1 den 100 e kadar id li veritabanı sonuçlarını görebiliyorsa ve siz bu kullanıcının 20 yi değiştirebilmesine rağmen 18 i değiştirmesini istemiyorsanız bu önlem clientta alınmaz. Sizin veritabanınızda bu kullanıcının 18 i değiştirmeye yetkisini kısıtlamanız lazım. Kullanıcı bunu butondan göndermez postmandan gönderir, curl ile gönderir, ajax ile gönderir. Bir şekilde gönderir. Siz server tarafında bu post geldikten sonra önleminizi almalısınız. Post un gönderilmesini engelleyemezsiniz.

    Dolayısıyla sizin yapabileceğiniz en doğru şey client a iş bırakmamaktır. En ufak bir karar bile almamalıdır client. Üstüne basa basa söylüyorum. Client karar alamaz.

    Bol şans.
    Anladım teşekkür ederim. Server kısmında tüm izinleri kontrol ettiriyorum zaten. Sadece client tarafında form koruma gibi bir olay var mı yok mu bunu öğrenmek istemiştim.