HTML Formlarının Rastsal Fonksiyonlarla Korunması

0
FZ
Milyar kez tekrar edilmesine rağmen çoğu PHP programcısı aldığı girdiyi güçlü bir doğrulamadan (validation) geçirmeden olduğu gibi kullanmakta, bu şekilde programlanmış popüler PHP tabanlı sistemler (içerik yönetim sistemleri, forum sistemleri, vs.) pek çok saldırıya maruz kalmaktadır.

Timu Eren'in 1 yazmış olduğu HTML Formlarının PHP Kullanılarak Rastsal Fonksiyonlarla Saldırılara Karşı Korunması konulu yazı bu tür saldırılara karşı ilginç bir tedbir önermekte ve formdaki bilgi alanlarının "name" özniteliklerini rastsal fonksiyonlar kullanıp değiştirmek sureti ile "bruteforce" yani kaba güce, dümdüz otomatik denemelere dayanan saldırıları etkisizi hale getirmeye çalışmaktadır.
1 1981'de İstanbul' da doğan Timu Eren, PHP'ye Hakkı ÖCAL'ın kitapçığı ile başladı ve ilk defa o kitapçıkta GNU/Linux' un ismini duydu. Bir süre sonra bir arkadaşının da katkısı ile GNU/Linux kurdu (Mandrake 7.2). 2001'de vatani görevini yerine getirip döndükten 1 hafta sonra makinesindeki diğer işletim sistemini sabit diskinden kazıyıp sadece GNU/Linux kullanmaya başladı. 2002'nin sonlarından itibaren sadece GNU/Linux kullanıyor ve PHP programlama ile uğraşıyor. Hobileri arasında ağ sistemlerini kurcalamak, bilgisayar üzerine detaylı tartışmalara girmek ve model uçaklar yapmak var.
PHP

Görüşler

0
myss
Anladığım kadarıyla bu yöntem saldırganın işini birazcık daha zorlaştırıyor. Sonuçta saldırgan her seferinde html içindeki form isimlerini program ile bulabilir.
Ama caydırıcı olabilir;
0
selam
Merhaba...

Eğer saldırgan basit fopen sistem çağrıları ile bu işi yapmaya çalışır ise başarılı olamaz. Eğer sizde başarısız girişlerde vs. lerde giriş yapılan sayfada hata mesajı göstermek yerine başka bir sayfa açıp yada form' u kaldırıp back link i koyarsanır bu sefer saldırgan önce istemde bulunacak daha sonra gelen veriyi parse edecek uygun POST yada GET değişkenlerini veri ile karşı tarafa yollayacak, gelen veriyi tekrar parse edecek cevaba bakacak başarısız ise tekrar başlangıç' a geri dönecek ve tüm bunları defalarca deneyecek. Tabiiki Sizde her başarılı/başarısız girişi farklı url adreslerine yollayabilirseniz (http://Fqdn/sdklfjsl/ gibi) saldırganın kafası iyice karışacaktır.
0
selam
Merhaba ...

Yukarıdaki yorumumda bulanık bir cevap vermiş olduğumu fark ettim. Evet bu yöntem sadece işi biraz daha zorlaştırır % 100 güvenlik sağlamaz.
0
yilmaz
bence en iyisi yine bir resim koyup onun doğrulanmasını sağlamak. Web den çok uzun bir form dolduruluyorsa bahsedilen yöntem biraz kafa karıştırıcı oluyor. o kadar datayı sessiona sokmak hele ssl de kullanılıyorsa biraz problem yaratabilir.
0
skoylu
. Web den çok uzun bir form dolduruluyorsa bahsedilen yöntem biraz kafa karıştırıcı oluyor. o kadar datayı sessiona sokmak hele ssl de kullanılıyorsa biraz problem yaratabilir.

Neden o kadar form sahasını böyle işleme tabi tutuyorsunuz ki? Rasgele değeri tek bir forma koyun ve dönüşte o formun varlığını kontrol edin. Yada session'a sadece o rastgele prefix'i koyun.

Haa, bunu yapmak gene hiç bir derde deva olmayacaktır, o ayrı..
0
abakana
CSRF' ye karşı güzel bir koruma yöntemi, içine başka ekler konarak daha da leziz hale getirilebilir. Ama eğer biz paranoyaksak şunlarda eklenebilir sistem içine:
resim kontrolü,
email ile yazılanın onaylanması(biraz sapıtık bir düşünce ama :))
TCKimlik No Doğrulama
Online pos erişiminiz varsa Paypal' ın kredi kartı doğrulama sistemi(OHA falan oldum yani)
Tabii bunlar istenen güvenlik sevyesine göre değişebilir.
0
yilmaz
TCKimlik doğrulama için webservice açılmış. isteyen kullanabilir. bende kullanmayı düşünüyorum ama kapatırlar servisi sap gibi kalırız korkusu var. servis adresi
http://tckimlik.nvi.gov.tr/kpspublic.asmx
0
skoylu
Yukarıda da bahsedilmiş, ama tekrar edelim. Bu method herhangi bir şekilde herhangi bir koruma sağlamıyor.

Tekrar sebebimiz ise daha vahim bir durumu vurgulamak. Bir parolayı böyle düz text olarak işlemek hiç akıl karı değildir. Adama bir random sayı yollayın. Birde resim olarak bir rasgele text gönderin. Bunları ucuca ekleyip MD5'ini çıkarsın. Size geri yollasın. JavaScript hepsi için yeterli. Bu gene bruteforce'a karşı koruma sağlamaz. Ama resim olarak yollayacağınız rasgele text bir nebze (tamam, bir hayli demek lazım aslında) faydalı olur. Fakat OCR denen şeyin nelere muktedir olabileceğini yabana atmayın.
0
Nightwalker
Walla OCR denilen şey teoride her şeye muktedir gibi gözükmesine rağmen pratikte pek o kadar abartılacak birşey değil. Normal bir fotokopiden (kitap fotokopisi) bile çevirme işlemi yaparken çok yüksek çözünürlüklerde tarama yapmazsanız %100 başarılı bir sonuç alamazken nerede kaldı o ecişbücüş yazıları tanımak. Millet iyice abarttı zaten bu yazı bozma işini bazen ben zor okuyorum o yazıları. Ama ileride birileri yepyeni bir YSA algoritması ile gelir pratiktede birileri bu algoritmayı gerçekler o zaman bir şeyler değişebilir.
0
skoylu
Bu yaşıma kadar (ki nedir yaşım, daha kırk olmadı) edindiğim tecrübeler ışığında, bu alemde geleceğin çok çabuk geldiğini görmüşümdür defaten..

OCR elyazısını tanmada zorlanabilir. Ama form girişindeki resmi bozan distorsiyon algoritması biliniyorsa bunu çözecek bir preprocessor yazmak çok zor bir şey olmaz.. Sonrası bilinen tekniklerdir.

0
lifesdkver0_1
gimpy [www.cs.berkeley.edu]
0
Nightwalker
Öncelikle Timu beyin eline sağlık. Üzerinde emek harcandığı belli olan güzel bir çalışma olmuş.

Ama bence asıl yakalanması gereken nokta zamanla ilgili. Yazıda da belrtildiği gibi
Hiç kimse dakikada 45 defa aynı metni yollayabilecek kadar hızlı değildir.


Bu konuda Burak Dayıoğlun'dan şu alıntıyı yapmak istiyorum.

Bizim çok sık kullandığımız ve önerdiğimiz alternatif "giriş denemesi yavaşlatma". Bu teknik kullanıldığında her başarısız giriş denemesi sonrasında sistem bir sonraki giriş denemesine daha geç yanıt veriyor. Örnekle açıklamak daha kolay...

Örneğin ilk giriş denemenizi yapıyorsunuz; kullanıcı adı ve parolanızı girdiniz, sistem bunları kontrol ettikten sonra size 1sn bekleyerek olumlu ya da olumsuz yanıt veriyor. Eğer yanıt olumsuzsa ikinci denemeniz sonrasında sistem 2sn bekliyor ve sonucu bildiriyor. Eğer bu girişte de başaramadıysanız üçüncü girişinizde 4sn, dördüncü girişinizde 8sn bekliyorsunuz. Dördüncüden sonraki her giriş denemesine de sistem 16sn bekledikten sonra yanıt veriyor.

Örnekteki gibi giderek gecikerek yanıt veren bir kullanıcı doğrulama mekanizmasını kullanmanız durumunda deneme-yanılma ya da sözlükten arama gibi parola kırma yöntemleri ile erişmeye çalışan bir saldırgan birim zamanda çok daha az parola deneyebilir ve pratik olarak parola kıramaz duruma gelebiliyor.


Tabi meseleyi zamansal olarak ele aldıktan sonra başka alternatifler de tartışılabilir. Örneğin 1 dakikada aynı hesap 20 den fazla deneniyorsa geçici olarak bloke et gibi... Tabi bu da mükemmel bir çözüm değil ama olaya zaman bazlı yaklaşmak daha etkin olur bence...
0
yilmaz
Denyo Launch diye bir program var piyasada 4.0 versiyonu çıkmış. 1-2 dk içinde (256 k bağlantı ile) bir çok forumun db sini kilitleyebiliyor. ki bu yazılımı yapan arkadaş kendi sitesinin forumunu birşekilde flood denilen bu yöntemden korumayı başarmış.
0
selam
Eğer saldırı aracını siz yazıyor iseniz kendi web sitenizide çok kolay bir şekilde koruyabilirsiniz.. Örneğin saldırı yazılımında User-Agent: başlık bilgisinde Denyo yazarsınız ve kendi forum kodunuz içerisinde User-Agent: Denyo olan istemcilerden veri kabul etmezsiniz. Nigthwalker' in değindiği noktada güzel örneğin: bir istemciden 1 dk. içerisinde aynı veri alanından 15'den fazla veri yollanır ise tüm kayıtlarını silebilirsiniz ve bir süre için o ip'den erişimi kapatabilirsiniz. Ancak neden sadece form güvenliğinde kalındığını anlayamadım. Bu yöntem ile dosyalarınıza dışarıdan link verilmesini engelleyebilir, dökümanlarınızın dışarıdan erişimine kapatabilirsiniz, web sitenizde bulunan resimlerinizin bile dışarıdan erişimini kapatabilirsiniz. Tüm bunları ve daha fazlasını nasıl yapacağınızı anlatmak yerine sizin hayal gücünüze bıraktım.

Bu method bir kaç yol ile aşılabilinir ancak şu anda yaygınlaşıncaya kadar yeterince işinizi görecektir, elbette zaman/istek sayısı oranı, capcha resimler, verinin md5 özeti gibi üç beş şey daha ekleyerek yeterince sıkıntı verebilirsiniz saldırganlara.. Elbette hepsini aşacak bir yazılım üretilebilinir bir gün o zaman sizde daha iyi yollar aramaya başlarsınız ve bu böyle sürüp gider.
0
yilmaz
bahsettiğm yazılım yazan arkadaşı tanıyorum. eski sürümlerine sertifika eklemişta fakat son 2 sürümünde yok. farklı bir şey denemiş. programı bir yere upload eder linkinide verebilirim isterseniz.
0
skoylu
Hiç kimse dakikada 45 defa aynı metni yollayabilecek kadar hızlı değildir.

Her post'un büyüklüğü 2K olsa, toplam 90K filan eder. Diğer şeyleri birleştirince (SYN/SYN-ACK, HTTP Header vs.) etsin 180K. Buda 1440kbit filan eder herhalde. 60 sn için, sn başına 24kbit mi ediyor? Demekki 24kbit veya daha hızlı erişimi olan her makineyle bu işlem yapılabilir. Tersten hesaplayalım, 256K ADSL in upload hızı 64K. Eder 64Kbit. Buda dakikada 3840 kbit eder. Abartıp, protokol overheat'ı 2 misli alarak 45 transaction/dk. için 90'a bölersek, 40K'lık filan postlardan dk. 45 tane yapabileceğimizi görebiliriz.

Demekki aynı metni 45 post/dk yapmak aslında hemen herkesin harcı olabilecek, basit bir bantgenişliği probleminden ibaret.

Karşıdakileri, kötü adamları, rakipleri vs. küçümsememek lazım. Bizim klavye/fare kullanıyor olmamız onların curl/bash kullanmayı bilmiyor oldukları anlamına gelmez.
0
selam
Merhaba...

Yukarıda alıntı yaptığınız cümle sanırım yanlış anlaşılmış.

Bir insan (bir yazılım değil) 1 dk. içerisinde 45 istekte bulunamaz demek istemiştim. Biraz açarsak: Bir insan bir yazıyı okuyacak, onu yorumlayacak düşünecek ve yorum linkine basacak daha sonra anlatmak istediklerini düşünecek uygun bir şekilde yazıya dökecek ve submit edecek. Tüm bu süreç 10 sn. alsa bile aynı form alanına 1 dk. içerisinde 7' den fazla veri girişi yapamaz. Bir insan aynı yazıya (bu bir login alanıda olabilir yada herhangi başka bir şey) 1 dakika içerisinde 45 adet yorum yazabilirmi?
0
skoylu
Şu kadar vakitte (25 yıl filan) 7-8 milyon satır kod yazılabilir mi?

Ben yazdım. Kaba bir hesap yapın, imkansız görünür. Ama eğer benim gibi önce kodları yazacak kodlar, toollar vs. yapıyorsanız bu gayet mümkündür. Sonuçta sizin ürettiğiniz toplam kod sayısı mevzuya bahistir.

Aynı şekilde, duruma göre birisi çıkıp öyle bir otomasyon sistemi getirebilir ki dakikada 45 posttan fazla cevap verebilir.

Gözardı edilen husus, bunun Fazlamesai.net için geçerli olmasa bile, geçerli olabileceği çeşitli formların olmasıdır. Mesela mail-list'lere üyelik formları.

Bir çözüm sadece belli bir oryantasyona yönelik olmamalı, meseleyi 360 dereceyi her eksende kapsayan bir çözüm olmalıdır. Bahsolunan forma güvenlik eklemekse bu konuya saniyed 45 diyerek yaklaşamayız. Ama ne bileyim, phpBB'nin yorumları olsaydı söz konusu olan belki böyle bir yaklaşımda bulunabilirdik.

0
okan
formlarda zaman bazlı session koruması yapmak yine saldırganın işini oldukça zorlaştıracaktır diye düşünüyorum.
0
mcc0013
Lamerler için güzel bir yöntem. Fakat basit bir dil olan visual basic'teki webbrowser objesine karşı savunmasız kalıyor.
saygılar.
0
myx
2 yıllık bir tartışmaya cevap yazmanın dayanılmaz hafifliğini bir kenara bırakacak olursam, form alanlarına serpiştirilen rastgele üretilmiş veriler tam anlamıyla bir koruma sağlamaz. Bir web siteye yollanan bilginin bir insan tarafından yollanıp yollanmadığını anlamak için yapılan şeyin genel olarak şu olduğunu biliyoruz: "İstemciden öyle bir bilgi girmesini iste ki, o bilgiyi saldırı yapmaya programlanmış bir robot değil, bir insan doğrulayabilsin."

Makalede söz edilen korunma yöntemine bu düşünce doğrultusunda bakacak olursak, böyle bir yöntem kolaylıkla aşılabilir. Sayfaya istekte bulunan robot basit bir RegExp deseni yardımıyla "name"de belirtilen rastgele üretilmiş değere ulaşabilir ve artık ne için programlanmışsa o işlemi rahatlıkla sürdürebilir.

Şu an için "güvenlik kodu" kullanmak hala en iyisi sanırım.

(PHP ile hazırlanmış o klasik siyah - beyaz güvenlik kodlarının OCR yazılımlarına karşı yalnızca süs eşyası niteliğinde olduğunu vurgalamak da lazım, "bakın benim güvenlik kodum var" diyen dostlarımızı içinde bulundukları gafletten kurtarmak için)
Görüş belirtmek için giriş yapın...

İlgili Yazılar

PHP 5.0.0 Çıktı

WoLoLo

php.net 5.0.0 sürümünü çıkardığını duyurdu.
Yeni sürümü Zend Engine II ve komple bir XML desteği sağlıyor. Ayrıca yeni sürümde SQLite adı verilen oldukça kullanışlı bir SQL sürümü ile beraber geliyor.


Download : php 5.0.0
Changelog : Release Candidate 3 > php 5.0.0

DCP Portal 7 BETA Yayınlandı

deathline

DCP Portal 7 Beta bir yıldan fazla süren geliştirme süresinden sonra yayınlandı. Sürüm 7 beta 15 Şubat 2007 tarihinden itibaren Codeworx Teknolojileri dosya indirme alanından erişilebilir durumdadır. Bu sürüm için bir güncelleme betiği mevcut olmayıp, gerekli kararlılık ve sağlamlık sınamalarından geçirilmeden kullanılmamalıdır.

MyObjects Php 5 - MySql Nesne Köprüsü 1.0 Beta 2 Yayınlandı

angeleous

Aslen Zend'in PHP 5 programlama yarışması için geliştirdiğim ve BSD lisansıyla dağıtılan MyObjects PHP 5 kütüphanesi ve araçlarının beta 2 sürümü çıktı. İlk defa Fazlamesai.net'de duyurduğum bu araç kitinin özellikleri kısaca şöyle:

Program benim gibi web projelerinde PHP dilini kullanan ve PHP 5'in gelişmiş nesne modelinden faydalanarak MySQL veritabanındaki kayıtlarını nesneler aracilgiyla yönetmek/görüntülemek isteyen programcılar için geliştirildi. Programın tam olarak 'Object Persistance' ya da 'Object Relational Mapping' tanımlarına akademik olarak uyduğunu söyleyemem. Programı yalnızca program yazarken kendi ihtiyaç duyduğum niteliklerden yola çıkarak geliştirdim.

Php5 ve Sqlite

GenX

Phpnin tamamiyle kullanima acilmasi beklenen versiyonu PHP 5'in yayindan onceki son deneme surumu "Release Candidate 3" yayinlandi. Peki bize ne gibi getirileri olacak yeni versiyon PHP'nin?

linux üzerindeki php ile mssql 2000(veya 7.0 veya 6.5...)e bağlanmak istersek

roots

İlla da MySQL kullanacak değilsiniz ya, roots kardeşimiz bize PHP connectivity konusunda bir tecrübesini aktarmış.

Allah oldurmasın ama bir gün icap ederde başınız sıkışırsa ve siz mssql 2000'e linux üzerinde çalışan bir webserverdan php ile bağlanmak zorunda kalırsanız aşağıdakiler sanırım işinize yarayacaktır.

http://www.freetds.com'dan güncel tds sürümünü çekelim. RPM çekebilirsiniz kolay çözüm olarak. Ben tgz olarak indirdim ve...