Konuyu görüntüle
IUCODERS FORUM > Programlama > PHP > Güvenlik Önlemleri - PHP
Yazar
mstf


avatar
istanbul
Kayıt: 06.01.2012
14.01.2012-00:19 #76891
Php de çoğu güvenlik sorunları form işlemlerinden kaynaklanır.
Eğer webmaster gelen verileri uygun bir biçimde filtrelememişse bu saldırganın kötü kodlarının da çalışmasına neden olacaktır
mesela xss ataklarında şöyle bir şey olsun.bir form olsun ve bu formdan
verileri alıp veritabanına kaydetmeyi deneyelim.formdan isim ve şifre isteyelim.eğer şu şekilde veriler alınırsa bir xss açığı oluşacak



<?php

isim=$_POST['isim'];
sifre=$_POST['sifre'];
?>

evet normalde su sekilde post olur

kayit.php?isim=admin&sifre=123456

ama webmaster filtrelemediği için şu kodu çalıştırırsak xss alertimizi verebiliriz

kayit.php?isim=<script>alert('xss');</script>&sifre=123456

bunu browser da çalıştırdığımız zaman alert penceresi içerisinde xss uyarısı verecektir.peki <script> alert(document.cookie)</script> yazarsak ne olur.o anki session id mizi verir.bu şekilde eğer bir linkte bu url yi gizleyip sitenin yöneticisine tıklatırsak sitenin yöneticisinin cookie sini çalıp siteye yonetici yetkisiyle girebiliriz.

Evet bir de veritabanına gonderilen sorgularda filtreleme olmazsa çeşitli hatalardan yararlanılıp siteye ciddi zararlar verilebilir.
mesela
haberler.php?id=34
burdaki id değeri integer yani sayısal bir ifadedir.eğer bir id yi integer olmayan bir değer girersek sistem hata verecektir.ve bu hatalardan veritabnında mevcut olan nerdeyse tüm bilgileri çekebiliriz.
eğer bunun gibi yani haberler.php?id=34 gibi olan veri,ler çekiyorsak


<?php
$id=intval($_GET['id']);
?>
şeklinde yaparak sadece integer verileri alırız ve boylece sql injection ataklarından kurtulabiliriz.

Ya da veritabanından text olan bir sütundan veri çekersek mesela sitemde olan
site.php?detay=site.com burda linke
site.php?detay=site.com' şeklinde girersek gene hata verecektir.bunuda şu şekilde engelleyebiliriz


<?php
$detay=mysql_real_escape_string($_GET['detay']);
?>

Ayrıca şu fonksiyonlarda işinizi görür.

htmlspecialchars();
strip_tags();
addslashes();
htmlentities();
mysql_real_escape_string();


NOT:BU YAZIYI KENDİ SİTEMDEDE YAYINLADIM.(Ç)ALINTI SANILMASIN.










Yazar
divisionbyzero


avatar
İstanbul
Kayıt: 15.11.2012
15.11.2012-21:14 #78602
mysql_real_escape_string sadece o an açık bir mysql bağlantısı varsa çalışır. yani bağlantıyı oluşturmadan bu fonksiyonu kullanmanın bir işlevi olmayacaktır. bir hata da almazsınız o yüzden bunu gözden kaçırmayın.

mysql kütüphanisi yerine mysqli veya pdo kullanarak daha güvenli ve düzenli database işlemleri yapabilirsiniz.





Yazar
mstf


avatar
istanbul
Kayıt: 06.01.2012
15.11.2012-22:28 #78603
haklısın.zaten php mysql_* ile ilgili fonksiyonları geliştirmeyi durdurdu.
artık dediğin gibi pdo mysqli yada frameworklerin database classları kullanılıyor.
ama form işlemlerinde strip_tags ve htmlspecialchars kullanımı xss açıklarından korunmak için son derece gerekli










Yazar
clairvoyant


avatar
Antalya
Kayıt: 05.05.2006
16.11.2012-00:52 #78604
mstf yazdi
 
kayit.php?isim=<script>alert('xss');</script>&sifre=123456

bunu browser da çalıştırdığımız zaman alert penceresi içerisinde xss uyarısı verecektir.peki <script> alert(document.cookie)</script> yazarsak ne olur.o anki session id mizi verir.bu şekilde eğer bir linkte bu url yi gizleyip sitenin yöneticisine tıklatırsak sitenin yöneticisinin cookie sini çalıp siteye yonetici yetkisiyle girebiliriz.

URL'den basit xss saldırılarını yiyen browser kaldı mı bilmiyorum ama cookie'leri "httponly" flagi ile gönderirseniz document.cookie ile ulaşılamaz.

Örn:
setcookie('TestCookie', 'Test value', null, null, null, null, true);

Eğer session id'sine document.cookie ile erişilmesini önlemek istiyorsanız session_start()'tan önce şunu yazmanız gerekiyor:
session_set_cookie_params(0, null, null, null, true);

Injection'a gelince; PDO gibi bir kütüphane kullanırsanız strip bilmem neler ile uğraşmanıza pek gerek kalmaz.





Let`s make this world a better place to live !

Del.icio.us
Digg
Facebook
Furl
Google
Blink
Simpy
Spurl
Y! MyWeb