Selamlar.
Web tarafında amatör olduğumu belirtmek isterim öncelikle.
PHP ve PDO kullanarak bir script tasarlıyorum ve sormam gereken birkaç soru var.
- Güvenli bir login sistemi nasıl yapabilirim? Normalde session'da tutuyorum kullanıcı bilgisini ama şöyle bir şey var; örneğin ben admin olarak SQL'den ilgili kişinin adını değiştirdiğimde haliyle session'a bu bilgi yansımıyor. Bunun önüne nasıl geçerim? Önerebileceğiniz açık kaynak bir GitHub projesi vesaire var mıdır?
- POST işlemleri için session'daki user_role bilgisine göre işlem yaptırıyorum. Örneğin user_role 0 ise post işlemini gerçekleştir gibi. Bu gibi istekler güvenli midir? Ekstra bir önlem almak gerekir mi token vesaire?
İşimi kolaylaştıracak her türlü öneriye açığım arkadaşlar. Mesela DB için kullandığım küçük bi wrapper: https://github.com/wickyaswal/php-my...database-class
Herkese önerileri için şimdiden teşekkürler.
PHP login sistemi ve POST işlemleri hakkında birkaç soru
16
●373
- 22-09-2021, 22:01:18Merhaba,
> Normalde session'da tutuyorum kullanıcı bilgisini ama şöyle bir şey var; örneğin ben admin olarak SQL'den ilgili kişinin adını değiştirdiğimde haliyle session'a bu bilgi yansımıyor. Bunun önüne nasıl geçerim?
SESSION alınan ve mevcut kullanıcı adını karşılaştırabilirsiniz login kontrol kodlarının olduğu kısımda, kullanıcı adı değişirse üye tekrar girişe yönlendirilir.
> POST işlemleri için session'daki user_role bilgisine göre işlem yaptırıyorum. Örneğin user_role 0 ise post işlemini gerçekleştir gibi. Bu gibi istekler güvenli midir? Ekstra bir önlem almak gerekir mi token vesaire?
POST etmelerini engellemek yerine direkt olarak o sayfaya girişlerini engelleyin ve üyeleri farklı sayfalara yönlendirin, bu şekilde daha güvenli olacaktır. Ek olarak user_role kontrolünü session'a göre değil veritabanında ki değişkene göre kontrol ettirin.
htmlspecialchars filterisini kullanmayı ve SQL injection'a karşı önlemlerinizi almayı unutmayın, PHP çok geniş bir kütüphanedir github dışında; google'da araştırarak bir çok kaynak bulabilirsiniz.
İyi çalışmalar. - 22-09-2021, 22:46:54Sql den kullanıcı adını değiştirmekten kastınız doğrudan veritabanın'dan (phpmyadmin vs.) değiştirmekse yansımaması normal. Fakat php tarafında bir değişiklik söz konusu ise değişikliği yapınca session bilgisini güncellerseniz değişiklik genele etki eder. Session'da hassas bilgiler var ise session verilerini şifreleyebilirsiniz. Güvenlik konusun'da ise google'da php güvenlik diye arattığınız zaman bir sürü kaynak mevcut. Ayrıca ingilizce olarak aratırsanız daha fazla kaynak bulabilirsiniz.
- 23-09-2021, 00:08:38Yaptığım stres testlerinde, teknik düzeydeki Auth sorunları büyük ölçüde API ve GCaptcha v3 ile tamamen ortadan kalkmış görünüyor. Birini aşsanız, diğeri aşılmıyor.
Hatta Ajax veya JQuery ile voltran yaptıklarında yöntemler de inanılmaz zorlaşıyor, güvenlik koridorunda neler yapıldığını anlamak baş ağrıtıyor.
Server side - front end uygulamaları bunca teknolojik gelişim göstermişken, siz neden rest API yazmıyorsunuz?
Zira session bilgisine ulaşan geri kalan tüm yetkilere ulaşır. (gerçi api token'ina ulaşan da ulaşabiliyor ama. en azından refresh time özelliği var
)
- 23-09-2021, 16:47:06client, serverdaki session bilgisine nasıl ulaşır?mkozdogan adlı üyeden alıntı: mesajı görüntüle
+session kullanarak geri kalan tüm yetkilere nasıl ulaşır? - 23-09-2021, 22:27:23PhpSessionID ne demek bilmiyorsunuz sanırım? Halbuki ben sadece basit bir varsayım yazmıştım. Biraz daha açalım.ntka adlı üyeden alıntı: mesajı görüntüle
Bir kullanıcı, diğer bir kullanıcının “PHPSESSID” değerini biliyorsa o halde, o kişinin oturumunu da bilmiş olur. Yani X kişisi kendi tarayıcısında Y kişisinin “PHPSESSID” değerini girer ve o kişinin oturumuna giriş sağlamış olur.
Örnek video
Dileyen internette açık kaynaklarda phpsessionid güvenliği hakkında detaylı bilgiler okuyabilir.
Phpsessionid için iyi kurgulanmamış bir güvenlik senaryosunda, bu bilginizi elde eden birisi bilgiyi javascript ile taçlandırırsa, o halde bu olay benim bahsettiğimden de büyük bir güvenlik açığına dönüşür. - 24-09-2021, 08:48:13matematiği daha iyi olan biri hesaplamasını daha iyi yapabilir.
default 22 haneli session id yi dışarıdan birinin bulma ihtimali 22! de 1 ( ! = faktöriyel )
sonucu da 21 haneli bir rakam çıkar. 1 küsür sekztilyon gibi birşey
yine default ta 7200 saniye olan session süresince bu denemeleri yapıp o session id yi bulabiliyorsanız, bravo.
devede kulak hatta tırnak bile olamayacak şeylere takılmayın, gerek yok.
hadi diyelim ki yönetici sesson id sini buldunuz diyelim,
bu girdiğiniz session da login olunan ip bilgisinin session da kayıtlı olmaması/kontrol edilmemesi ve diğer yerden normal giriş yapanın logout/session destroy yapmaması gerekir.
kolaylıklar bol bol şanslar
)