Bu makalede, PHP uygulamalarında en önemli güvenlik açıklarından biri olan Cross-Site Request Forgery CSRF saldırısına karşı nasıl korunabileceğiniz anlatılmaktadır Anti-CSRF önleme yöntemlerini anlamak için okumaya devam edin

Web uygulamaları, kullanıcı etkileşimli bir ortamda çalıştıkları için saldırılara açıktır. Bunlardan biri de Cross-Site Request Forgery (CSRF) saldırısıdır. Bu saldırıda, bir hacker, bir kullanıcıya ait bilgileri değiştirmek veya kötü amaçlı bir istek göndermek için kullanıcının tarayıcısını exploit eder. PHP uygulamalarında bu tür saldırılarla mücadele etmek için çeşitli önlemler alınabilir.
Bu makalede, PHP uygulamalarında anti-CSRF önleme yöntemleri ele alınacaktır. Bu yöntemler, Token bazlı Anti-CSRF tekniği ve Synchronizer Token Pattern tekniği olarak iki ana kategoride incelenir. Token bazlı teknikte, bir token, her HTTP isteği için oluşturulur ve istekler arasındaki fark ayırt edilir. Synchronizer Token Pattern tekniği, doğru token ile isteğin kaynağını doğrulamak için bir senkronize token kullanır.
Anti-CSRF Nedir?
Anti-CSRF, Cross-Site Request Forgery adı verilen bir saldırı türüne karşı önlem alma yöntemidir. Bu saldırı türünde, bir saldırgan bir kullanıcının tarayıcısında bir istek yapmasına neden olur. İstek, kullanıcının haberi olmadan gerçekleştirilir ve kullanıcının kimliğiyle yapılır. Bu istekler, genellikle, kullanıcının doğrulama bilgilerini ele geçirmek için kullanılır.
Bu saldırılar genellikle, bir web uygulamasında etkin bir oturum açıkken gerçekleştirilir. Saldırgan, kullanıcının tarayıcısında bir istek yaparak uygulamada bir değişiklik yapabilir ya da kullanıcının oturumunu sonlandırabilir. Bu nedenle, Anti-CSRF önleme yöntemleri uygulamaların güvenliğini artırmak için önemlidir.
Token Bazlı Anti-CSRF Tekniği
Token Bazlı Anti-CSRF Tekniği, uygulamanın her işleminde bir token kullanmasını gerektirir. Bu token, kullanıcının oturum açtığı web sitesindeki bir formda veya sayfada oluşturulur ve her İstek Sonlandırma talebi için sunucuya gönderilir. Token, kullanıcının oturum bilgileriyle bağlantılı olarak sunucuda saklanır.
Token oluşturma işlemi, uygulamalar için önemlidir çünkü saldırganların rastgele bir değer yerine mevcut bir token kullanması engellenmelidir. Tokens, uygulamanın her yüklenmesi yapıldığında veya kullanıcının işlem yaptığı sayfada oluşturulur. Token, uygulamanın güvenlik açısından önemli bir parçasıdır, çünkü bu sayede oturum bilgisi saklanır.
Token'in Özellikleri: |
---|
- Rastgele olmalıdır. |
- Ürettiği her örnek için benzersiz olmalıdır. |
- Kullanıcı verileri ile ilişkili olmalıdır. |
- Kullanıcının her yüklenişinde yeni bir token oluşturulmalıdır. |
Token'lar genellikle veritabanlarında saklanır ve kullanıcının her İstek Sonlandırma talebinde doğrulanır. Token doğrulama işlemi için sunucu, kullanıcının İstek Sonlandırma talebinde gönderdiği token'ı mevcut token'lar arasında arar. Eğer token bir eşleşme oluşturursa, işlem yürütülür. Ancak eşleşme oluşturmazsa, sunucu İstek Sonlandırma talebini reddeder. Token güvenli bir şekilde saklandığı için, saldırganların doğru bir token olmadığı sürece kullanıcının hesabına erişmesi mümkün olmaz.
- Token'lar, uygulamanın her İstek Sonlandırma talebi için kullanılmalıdır.
- Token'ların önemi, kullanıcı oturumu sırasında saklandıkları için güvenli bir şekilde tutulmalıdır.
- Token güncelleme, saldırganların token kullanarak giriş yapmasını engellemenin önemli bir yoludur.
Token bazlı Anti-CSRF teknikleri sayesinde, uygulama kullanıcı oturumu boyunca daha güvenli hale gelir. Bu teknik, uygulamanın güvenliğini sağlamak için kullanıcıların kimlik doğrulaması sırasında üretilen token'ları kullanır. Bu sayede, saldırganlar tarayıcılarını hackleyerek token'a erişemeyecekleri için uygulama daha güvenli hale gelir.
Token Oluşturma
Token oluşturma işlemi, Anti-CSRF saldırılarına karşı en temel koruma yöntemidir. Token oluşturmak için, uygulama tarafından rastgele bir dize oluşturulur ve bu dize, HTML formu veya URL parametresi gibi işlemlerde kullanılır.
Token oluşturma işlemi sırasında güvenlik açısından dikkat edilmesi gereken birkaç unsur vardır. Öncelikle, token'ların rastgele ve tahmin edilmesi zor bir şekilde oluşturulması önemlidir. Bu nedenle, PHP'nin sağladığı 'random_bytes' veya 'openssl_random_pseudo_bytes' gibi fonksiyonlar kullanılabilir.
Token'ların benzersiz olması da önemlidir, yani her istek sonrasında farklı bir token oluşturulmalıdır. Bu, token'ların tekrar kullanılmasını engeller ve saldırganların olası bir saldırıda önceki token'ları kullanmalarını zorlaştırır.
Token'ların doğru şekilde saklanması da kritik öneme sahiptir. Token'lar, bir cookie veya sesyon değişkeni gibi güvenli bir şekilde saklanabilir. Ayrıca, cookie ve form alanı adlarının benzersiz olması da önemlidir.
Son olarak, token'ların saldırganlar tarafından değiştirilememesi için, token'ların salt ve gizli bir şekilde hash edilmesi, ardından da hash'in token olarak kullanılması gerekmektedir.
Tüm bu adımların dikkatle uygulanması, token bazlı Anti-CSRF tekniğinin doğru ve güvenli bir şekilde uygulanmasını sağlayacaktır.
Token Kaydetme
Token'lar, uygulamanın kullanıcılardan aldığı istekleri doğrulamak için kullanılır ve güvenlik açısından önemlidir. Token'ların veritabanlarında nasıl saklanacağı, güvenli bir şekilde nasıl kullanılacağı konusunda ayrıntılı bilgi verilir. Token'lar, kullanıcı oturum açtığında veya özel bir form gönderdiğinde oluşturulur. Bu token'lar daha sonra veritabanına kaydedilir ve kullanıcının gönderdiği her istek için doğrulama yapmak üzere kullanılır.
Token'ların veritabanında güvenli bir şekilde saklanması önemlidir. Token'lar şifrelenerek veya saldırılara karşı korumak için doğru yöntemlerle saklanabilir. Veritabanında kullanılan token'ların şifreleme yöntemleri de, sunucunun doğru ve güvenli bir şekilde yapılandırılması gerektiğini gösterir. Bu nedenle, token saklama işlemi her zaman güvenli bir şekilde yapılmalıdır.
Token'lar ayrıca, uygulama güncelleştirmeleri veya kullanıcı bazlı etkinlikler gibi diğer değişiklikler yapıldığında periyodik olarak güncellenmelidir. Token güncelleme işlemi, kullanıcının oturum açtığı veya özel bir form gönderdiği her istek için yeni bir token oluşturulmasını sağlamalıdır. Bu periyodik güncelleme, uygulama güvenliğini sağlamak için son derece önemlidir.
Token Doğrulama
Token bazlı Anti-CSRF tekniği kullanıldığında, token'ların doğrulanması işlemi oldukça önemlidir. Token'ların doğrulanması, token'ların geçerliliği açısından oldukça önemlidir ve doğru bir şekilde yapılandırılmadığı takdirde uygulamaya ciddi açıklar getirebilir. Token'ların doğrulanması işlemi, aşağıdaki adımlar göz önünde bulundurularak gerçekleştirilmelidir:
- Form gönderilmeden önce token'ın oluşturulması gerekmektedir. Token'ın oluşturulduktan sonra, token sayfa verileriyle birlikte kullanıcının cihazına gönderilir.- Kullanıcı form gönderdiğinde, token form verileriyle birlikte sunucuya gönderilir.- Sunucu, token'ın geçerli olup olmadığını doğrulamak için kullanıcı tarafından gönderilen token'ı, sunucuda saklanan token ile karşılaştırır.- Eğer token'lar eşleşirse, gönderilen form işlenir ve kullanıcının isteği gerçekleştirilir. Eğer token'lar eşleşmezse, istek işlenmeden önce bir hata mesajı gösterilir.
Uygulamanın bu süreçte doğru şekilde yapılandırılması için güvenli bir şekilde token'ların oluşturulup saklanması, token'ların kesinlikle tekrar kullanılamaması ve token'ların ömürlerinin kısa tutulması gerekmektedir. Ayrıca, token'ların her oturumda yeniden oluşturulması ve her sayfa yüklendiğinde token'ların değiştirilmesi de gerekmektedir. Bu sayede uygulama daha güvenli olacaktır.
Token Güncelleme
Token'ların güncelleştirilmesi, saldırganların token'ları ele geçirme şansını azaltır. Bu nedenle, token'ların belirli bir süre sonra otomatik olarak yenilenmesi uygun bir güvenlik önlemidir. Token'ların güncellenme süresinin ne kadar sıklıkta yapılacağı uygulamaya göre değişebilir, ancak genellikle 15-30 dakikalık aralıklarla yapılması önerilir.
Token'ların periyodik olarak güncellenmesi için, otomatik token yenileme işlevi uygulamaya dahil edilmelidir. Bu süreçte, eski token'lar veritabanından silinir ve yeni token'lar oluşturulur. Yeni token'lar, kullanıcılara ilgili sayfalarda gösterilir ve aynı zamanda veritabanına kaydedilir.
Token güncelleme süreci aynı zamanda token'ların düzgün bir şekilde kullanılmasını sağlar. Token güncelleme işlemi, kullanıcının sayfayı yenilemesi veya bir işlem gerçekleştirmesi gerektiğinde, token'ın yanlışlıkla yenilenmesini veya kullanılmasını engeller.
Token güncelleme sürecinde dikkat edilmesi gereken bir diğer nokta, token'ların güvenli şekilde saklanmasıdır. Token'lar, saldırganların erişimine karşı korunmalıdır. Bu nedenle, token'ların veritabanında şifrelenerek saklanması tavsiye edilir.
Sonuç olarak, token'ların periyodik olarak güncelleştirilmesi, uygulamaların güvenlik düzeyini arttıran önemli bir adımdır. Token'ların otomatik yenilenmesi, uygulamanın güvenliği için önemlidir ve token'ların doğru şekilde kullanılmasını ve saklanmasını sağlayabilir.
Synchronizer Token Pattern Tekniği
Synchronizer Token Pattern (STP) tekniği, tokenlarla korunmuş formlarla kullanıcı oturumlarının gerçekleştirilmesine dayanır. Bu teknikte, formların sunucu tarafından üretilen tokenlarla eşleştirilmesi gerekmektedir. Böylece, token kontrolleri sayesinde Cross-Site Request Forgery (CSRF) saldırıları önlenir.
STP tekniğinin uygulanması gereken adımlar şunlardır:
- Form token oluşturma: Sunucu tarafından form yüklenirken, token oluşturulur ve formun bir alanına yerleştirilir.
- Token kontrolü: Form gönderildiğinde, sunucu tokenu kontrol eder. Token kontrolü başarılı olursa, işlem işlenir.
- Session özelliği: Token'ların sunucu tarafından üretilmesi için özel bir sembolik ya da rastgele değer session özellikleri kullanılabilir.
STP tekniği, güvenlik açısından oldukça etkili bir çözüm sunar. Token kontrolü, kullanıcı kabul edilmeden önce uygulanır ve her istekte kontrol edilir. Böylece, güvenlik açığı minimize edilir.
Token Oluşturma ve Kontrol
Token bazlı Anti-CSRF ve Synchronizer Token Pattern teknikleri, Cross-Site Request Forgery saldırılarına karşı alınabilecek önemli koruyucu yöntemlerdir. Bu teknikler, birkaç adımda uygulanabilecek basit işlemlerden oluşur. Ancak her şeyden önce token oluşturma işlemi gerçekleştirilmelidir.
Token, bir uygulama içerisinde oluşturulan rastgele dizi karakterlerden oluşan bir text alanıdır. Token oluşturulduktan sonra, token doğrulama işlemi gerçekleştirilmektedir. Bu doğrulama işlemi, kullanıcının işlemlerinin güvenli olduğunu sağlamaktadır.
Token oluşturmak için, PHP fonksiyonları kullanılarak, anahtar kelime fonksiyonları ve varsayılan php yönergeleri izlenir. Token doğrulama işlemi ise, token değerinin form verileriyle birlikte sunucuya geri gönderilerek kontrol edilmesiyle sağlanmaktadır.
Özetlemek gerekirse, token bazlı Anti-CSRF ve Synchronizer Token Pattern teknikleri sayesinde kullanıcılara güvenli bir web deneyimi sunulabilir. Token oluşturma işlemleri, token güncelleme işlemleri ve token doğrulama işlemleri titizlikle gerçekleştirilerek, bu yöntemler işe yarar ve etkin bir hale getirilirler. Bu sayede, internet kullanıcıları gönül rahatlığıyla internet üzerinde işlemlerini gerçekleştirebilirler.
Uygulama Yapılandırması
Synchronizer Token Pattern yöntemi, token bazlı yöntem ile karşılaştırıldığında daha karmaşık bir yapıya sahiptir ve bu nedenle uygulanması daha zor olabilir. Ancak, bu yöntem de web uygulamalarının CSRF saldırılarına karşı savunmasını güçlendiren etkili bir yöntemdir.
Bu yöntemin uygulanması için, uygulamanın gerekli yapılandırmalarının yapılması gerekmektedir. Bu yapılandırmalar arasında, özellikle aşağıdakiler yer alır:
- CSRF Token isminin "csrftoken" olarak ayarlanması
- CSRF Token'ın kullanılacağı formların ve isteklerin belirtilmesi
- CSRF Token'ın hangi çerez ismi altında saklanacağının belirtilmesi
- Token'ın doğruluğunun nasıl kontrol edileceğinin belirtilmesi
Ayrıca, önemli bir nokta da CSRF Token'ın her sayfada otomatik olarak oluşturulmasıdır. Bu, güvenlik açısından önemlidir ve kullanıcılarının otomatik olarak token oluşturma ihtiyacı duymadan uygulama kullanmalarına olanak tanır.