Merhaba arkadaşlar güvenlik açıkları hakkında iki tane sorum var bunların çözümünü bulamadım
1.si
Diyelim bir yorum sistemim var ve kullanıcı javascript ile cookieyi kendi sitesine yolladı. bu nasıl bir açık oluşturabilir ? bunu anlayamadım
2.si ise üye giriş işlemlerinde session_id'nin özelliği nedir ve giriş yapınca session_id'yi değiştirmeye gereksinim duyarız değiştirmezsek nasıl sisteme sızabilirler ?
vereceğiniz cevaplar için şimdiden teşekkür ediyorum
XSS ve SESSION
9
●677
- 11-04-2010, 18:57:11Peki session ?
örnek bir kod vereyim
<?php session_start(); if ( $_SESSION['login'] ) { echo 'giriş yapıldı'; } else { $_SESSION['login'] = true; }session atamasını bu şekilde yapıyorum. Yani bu hack edilebilir mi ?
daha ne yapabilirim güvenliği arttırmak için? session_id ile arasında ki bağlantı ne ? :S - 11-04-2010, 19:30:51bu sekilde daha guvenli sezon varmi yokmu kontrol et sezonun degerini degil.Cycl0ne adlı üyeden alıntı: mesajı görüntüle
ve session save olayini bir arastirki paylasimli hosting paketlerinde sezonlarini caldirma.
sezon korumanın güzel bir yolu token oluşturmaktır
<? $_SESSION['token'] = md5($username.$password.SITEKEY)); boylece token ile kontrol edersin fonksiyonlarinda sitenin configine bir DEFINE['SITEKEY'] = '234554svsvsdfalanfilan'; gibi siteye ozel hash eklersin bir fonksiyon ile bakarsin token la hash sistemin uyusuyormu diye ?>
- 11-04-2010, 21:34:21Session siteye giriş yapan kullanıcıyı diğer sayfalarda tanımlaman için
mesela mysql ile kullanıcı adını aldın giriş yaptırdın
diğer sayfalarda senin bu kullanıcıyı tanıman için ya session yada çerez kullanman gerekir.
//sezonlar session.start(); //ile baslatilir $siteanahtar = 'eerji4r44jio34r34iorj'; function giris ($username,$password) { $username = mysql_real_escape_string($username); $password = mysql_real_escape_string($password); // injectiondan korunmak icin escape yapildi $q= "select * from users where username = '$username' and password ='$password'"; $q = mysql_query($q); $sonuc_row = mysql_fetch_row($q); $sonuc = mysql_num_rows($q); if ($sonuc == 1) { // db deki 2. sutun users tablosundaki username // bilgisayar mantiginda sayilar 0 dan basladigi icin sutun no - 1 olarak alinir $_SESSION['username']= $sonuc_row[1]; //db deki 1. sutun id $_SESSION['uid']= $sonuc_row[0]; $_SESSION['token'] = md5($username.$password.$siteanahtar); // 3 tane sezon atadik; } else { echo ' gecersiz kullanici sifre kombinasyonu'; } $username = 'kapitan'; $sifre = 'abc'; // giris fonksiyonumuzu cagiralim giris($username,$sifre); //boylece kapitan ve abc 2lisi users tablosunda varsa bize session lari acar. simdi sessionlar ile nasil kontrol yapilir. //mesela uyelik bilgileri guncelleme. $uye_sql= "select * from users where id = '$_SESSION[uid]'"; $uye_sql = mysql_query($uye_sql); $uye_sql= mysql_fetch_row($uye_sql); if ($_SESSION['token'] == md5($uye_sql['1'].$uye_sql[2].$siteanahtar){ //yukaridak' 1 username 2 password sutunlarini temsil ediyor site anahtarda sitemize ait anahtar echo 'uye guncelemeye izin var'; } else { echo 'size ait olmayan uyeligi guncelleyemezsiniz.'; }üyelik işlemlerinde bu sistemi gönül rahatlığı ile kullanabilirsiniz ama Cross site açıklarına sezonlarınızı nasıl koruyacağınızı php ve apache ile ilgili dökümantasyon sayfalarında bulabilirsiniz.
başka bişi olursa pm den ulaşabilirsiniz. - 12-04-2010, 00:47:20veritabanından üyeleri kontrol edebiliyorum. Sizin verdiğiniz kodlara çok benzer bir sistemi kullanıyorum buraya kadar herşey normal . Siteye özgü bir anahtar atadınız herhangi bir değişkene onu da sessiona kullanıcı şifre ve anahtari birleştirip md5 ile şifrelediniz bunu da sessiona atadınız. Peki bunu nasıl bir yerde kontrol ediyorsunuz ? Bir tek bunu anlayamadım. Ve benimle ilgilendiğiniz zamanınızı harcadıginiz için teşekkür ederim
- 12-04-2010, 01:51:13mesela.
userduzenle.php?id=10 diye 10 idli userı düzenleme sayfamız olsun. eğer giriş yapan kişininin id si 10 değilse ona bu hakkı vermeyeceğiz . senaryomuz bu $userid= mysql_real_escape_string($_GET['id']); $uye_sql= "select * from users where id = '$userid'"; // $uye_sql = mysql_query($uye_sql); $uye_sql= mysql_fetch_row($uye_sql); if ($_SESSION['token'] == md5($uye_sql['1'].$uye_sql[2].$siteanahtar){ //yukaridak' 1 username 2 password sutunlarini temsil ediyor site anahtarda sitemize ait anahtar //simdi kullanıcı girişi yaparken girilen kullanıcı adı ve password u SESSION //token a atamıştık //kullanıcı adımız: kapitan //şifre :abc //$_SESSION['token'] = md5('kapitan'.'sifre'.$siteanahtar) olmustu // ama 10 idli kullanicinin kullaniciadi kapitan10 sifresi ise abc10 // boylece $_SESSION['token'] in simdiki degeri //md5('kapitan10'.'abc10'.$siteanahtar) a esit olmadigindan kullaniciya //baskasinin profil ini duzenlemesine olanak vermedik. echo 'uye guncelemeye izin var'; } else { echo 'size ait olmayan uyeligi guncelleyemezsiniz.'; }veya her kullaniciya bir token atarsin. hem email aktive etmede kullanirsin.
hemde site ici islemlerde.