URL güvenliği - TurkishNuke
PHP Nuke - Themes - Modules - Blocks - Addons - Turkish Nuke: Forumlar

Turkish Nuke ~ Başlığı Görüntüle - URL güvenliği

Sorularınızı sorarken başlıkta "Acil, yardım, biri yardım etsin, bir bakın, çözümü nedir?, yardım edecek yok mu?" gibi başlıklar kullanmayınız. Başlıklar okuyan kişilere mesaj içeriği ile ilgili bilgi vermesi için var. Ve bilgi vermeyen başlık yöneticiler tarafından kilitlenebilir, silinebilir, değiştirilebilir.

 

Turkish Nuke Forum Ana Sayfası -> Programlama Dilleri -> URL güvenliği
cemone
MesajTarih: Sal Hzr 14, 2005 8:50 am 
URL, güvenliği, URL güvenliği,
Alıntıyla Cevap Ver
   
Katılımcı
Katılımcı


Kayıt: Mar 30, 2005
Mesajlar: 91
Nerden: kayseri


URL'de anahtarlama kullanarak düzenli giden parametrelere ulaşılmamasını sağlayabilecek md5 fonksiyonunun kullanıldığı bir yöntem.
Dinamik sayfaların internette statik sayfaların yerine geçmesi ilebirlikte ilgili html sayfarına paremetre göndererk sayfanın içeriğinin değişmesi sağlanabiliyor.
Örneğin

http://xyz.com/kategori.php?k=1 sayfası k parametresi ile kaçıncı kategoriyi görüntülemek istiyorsanız ona ait olan resmi gösterir.

Daha özel sayfalarımız olduğunu varsayalım. Mesela kullanıcılarımızın icq da olduğu gibi bir kullanıcı numarası ile tekilliğini sağladığımızı varsayalım.

http://xyz.com/kullanici.php?no=1 şeklinde ki bir yapının 1 nolu kullanıcının bilgilerini diğer kullanıcılara göstermek için kullanıldığını varsayalım.

Sitenizi gezen her hangibir kişi sitede diğer kullanıcı bilgilerine ulaşmak için tek yapacağı no parametresini arttırarak sayfayı yeniden çağırmak olacaktır.

Böylecene izin verdiğiniz kadar olan bilgilere rahatlıkla ulaşabilecektir. Eğer sizin istediğiniz sadece gösterilen bağlantıdan kullanıcı bilgilerine ulaşmak ise şimdi anlatacağım yöntem işinize yarayabilir.

md5() fonksiyonu

md5 fonksiyonu bir katarın (string) 32 karakterlik hexedecimal hash değerini MD5 message digest algoritmasını kullanarak döndürür. Bulunan değerden (çıktı) girdiye tekrar geri dönülemez. Yani algoritma tek yönlü bir şifreleme algoritmasıdır.
Php'de string md5(string str) şeklinde tanımlanmıştır.

örnek vermek gerekirse md5 lenmiş girdi ve çıktı aşağıdaki gibi görülebilir.


for($n=1; $n < 10 ;$n++ )
{
$str = md5($n);
echo "$n:$str<br>";
}
/*
Çıktısı:
1:c4ca4238a0b923820dcc509a6f75849b
2:c81e728d9d4c2f636f067f89cc14862c
3:eccbc87e4b5ce2fe28308fd9f2a7baf3
4:a87ff679a2f3e71d9181a67b7542122c
5:e4da3b7fbbce2345d7772b0674a318d5
6:1679091c5a880faf6fb5e6087eb1b2dc
7:8f14e45fceea167a5a36dedd4bea2543
8:c9f0f895fb98ab9159f51fd0297e236d
9:45c48cce2e2d7fbdea1afc51c7c6ad26
*/



md5'i nasıl kullanacağız

http://xyz.com/kullanici.php?no=1 şeklinde bir URL üzerinde ziyaretçi kolayca mantık yürütüp no yu arttırarak diğer kullanıcılar hakkında bilgiye ulaşabilirdi. Dahada kötüsü bir program yapıp sunduğunuz kadar bilgiyi ele geçirebilir.

Biz bu kişilerin işlerini biraz daha zorlaştırmaya çalışalım. Yukarıda ki URL adresini kendimiz yaratalım ve http://xyz.com/kullanici.php?no=1&m=c4ca4238a0b923820dcc509a6f75849b şekline getirelim.

Bu işlemden sonrada kullanici php'de kontrol yapmamız gerekiyor. Kontrolun aşağıdaki şekilde olduğunu varsayalım.

if($m!=md5($no))
{
echo "İzinsiz ulaşım.<br>";
exit(); // Burada bir hata sayfası çıkarmak daha mantıklı
}
// Buraya gelebildiyseniz normal görüntüleme işlemne devam edebilirsiniz.



Daha iyisi
Tamam bu yöntemi kullandığınızı varsayalım peki ya bu dokümanı okuyan tek kişi siz değilseniz. Birinci parametreyi md5 leyip ikincisini bilgiyi ulaşabilen kişi yaratabilirse ne olacak.

Küçük bir çözüm program içinde md5 fonksiyonuna bir ekleme yapmak. Örneğin bir anahtar ekliyebiliriz.

$anahtar = 'Smile kimse bilmez';
for($n=1; $n < 10 ;$n++ )
{
$str = md5($n.$anahtar);
echo "$n:$str<br>";
}
/*
1:ca4dd161be8e0eb1822c8774406b598b
2:7af9fc853719a96a661c9173e4be5f5a
3:1ac140b91f245a4406ff6f4f99af5045
4:de5e507a1468d4add1d87e343a6adb56
5:c5a040e097b07346e3cd4fa9df917b5a
6:61e2e0e8423585e8b9f32e09ac9fa458
7:4528f12d61df3ba3a2f08a5c82646441
8:086cf3e596d30bc8ed7dc2de21b5fcfa
9:02c70560d05402b519204ae2911bb004
*/



Gördüğünüz gibi değerler değişti. Anahtarı kimse bilmediğine göre artık sorunumuz yok. Unutmamalı ki bu sadece işleri biraz zorlaştırmak için bir yöntem. İnsan yapımı olduğu sürece bir şekilde bilgileriniz güvenli değildir. Ama biz yinede eşeği bağlayalım.

Birazda kodlara bakalım.


// Güvenli Param sitede her yerden bunu çağıracağız
function GuvenliParam($p_str)
{
$anahtar = 'Smile kimse bilmez';
return md5($p_str. $anahtar);
}

// Şimdi gerekli URL'yi dinamik yaratıp ekrana basan fonksiyonumuzun şu şekilde olduğunu varsayalım
function EchoKullaniciURL($p_kullanici_no)
{
?>
<a href="kullanici.php?no=<?echo $p_kullanici_no.'&m='.GuvenliParam($p_kullanici_no); ?>');">Kullanici Bilgileri</a>
<?
}

// kullanici.php'de ki kontrolde aşağıdaki gibi olsun.
if($m!=GuvenliParam($no))
{
echo "İzinsiz ulaşım.<br>";
exit(); // Burada bir hata sayfası çıkarmak daha mantıklı
}
// Buraya gelebildiyseniz normal görüntüleme işlemne devam edebilirsiniz.
 
Başa dön
Kullanıcı profilini gör Özel mesaj gönder E-mail'i gönder Kullanıcının web sitesini ziyaret et MSN Messenger
cemone
MesajTarih: Sal Hzr 14, 2005 8:51 am 
Web, sitesinde, otomatik, dil, seçimi, Web sitesinde otomatik dil seçimi,
Alıntıyla Cevap Ver
   
Katılımcı
Katılımcı


Kayıt: Mar 30, 2005
Mesajlar: 91
Nerden: kayseri


Kod:
Burada vereceğim çok kısa kodlarla, browserdaki dil değerini okuyup ona göre ziyaretçiyi istediğiniz sayfalara yönlendireceksiniz.
Çoklu dil desteği veren sitelerin amacı ziyaretçinin siteyi kendi dilinde ve/veya istediği dilde görebilmesini sağlamaktır. Genelde bunun için kullanılan yöntem, sitenin girişinde veya her sayfanın bir köşesine bayraklar veya pulldown menüler yerleştirip, ziyaretçinin uygun seçimi yapmasını sağlamaktır. Son zamanlarda bu klasik yöntemin yerini sayfaları otomatik olarak ziyaretçinin browser (tarayıcı) diline göre gösterme yöntemi aldı. Eğer browserınızın ayarlarına girdiyseniz "dil ayarları" bölümünü görmüşsünüzdür. Bu dil değerini, browser bir sayfayı web sunucudan istediğinde sunucuya HTTP_ACCEPT_LANGUAGE değişkeni içinde gönderir.

Burada vereceğim çok kısa kodlarla, browserdaki dil değerini okuyup ona göre ziyaretçiyi istediğiniz sayfalara yönlendireceksiniz.

Dil değişkenini okumak için

$dil = $HTTP_ENV_VARS['HTTP_ACCEPT_LANGUAGE'];

gibi bir komut yeterli. Ama dönen sonuç birden fazla ülkede kullanılan dillerde örneğin İngilizce için en, en-us, en-ca gibi dil ve ülke kodunu beraber içerebiliyor. O yüzden ben şu kısa fonksiyonu kullanıyorum.

function browserdili() {


// fonksiyon içinden çağırdığımız için global
global $HTTP_ENV_VARS;

$dil = $HTTP_ENV_VARS['HTTP_ACCEPT_LANGUAGE'];

// Bize sadece ilk 2 harflik ISO dil kodu yeterli
$dil = substr( $dil, 0, 2 );

return $dil;

}

Bundan sonra fonksiyonun döndürdüğü değere göre sitenin her hangi bir sayfaya yönlenmesini sağlamak kolay. Örneğin sayfamızda sadece "en", "fr", "tr" dil desteği olsun, ve bu dillere ait sayfalar anadizinin altında "/en", "/fr" ve "/tr" alt dizinlerinde bulunsun:

// türkçe
if ( browserdili() == "tr") header( "Location: http://sizinsunucunuz.com/tr/index.php" );

// fransızca
if ( browserdili() == "fr") header( "Location: http://sizinsunucunuz.com/fr/index.php" );

// ingilizce
if ( browserdili() == "en") header( "Location: http://sizinsunucunuz.com/en/index.php" );

Bu şekilde gerekli yönlendirmeyi yaptık. Şimdi de ziyaretçinin dili "tr", "fr" veya "en", yani bizim desteklediğimiz dillerden farklı ise ne yapabiliriz onu inceleyelim. Böyle bir durumda yaygın olarak kullanılan - bilinen dillerden olan ingilizceyi varsayılan dil olarak kabul edip, oraya yönlendirebiliriz. Önceki örnekteki durumu geçerli kabul edersek:


// türkçe
if ( browserdili() == "tr") header( "Location: http://sizinsunucunuz.com/tr/index.php" );

// fransızca
if ( browserdili() == "fr") header( "Location: http://sizinsunucunuz.com/fr/index.php" );

// ingilizce
header( "Location: http://sizinsunucunuz.com/en/index.php" );

Şimdi bu fonksiyonu biraz geliştirip, içinde varsayılan dil desteği olan bir hale getirelim. Böylece isteyen rahatça bu fonksiyonu kendi web sitesinde kullansın.

function browserdili( $secenekler ) {


// fonksiyon içinden çağırdığımız için global
global $HTTP_ENV_VARS;

$dil = $HTTP_ENV_VARS['HTTP_ACCEPT_LANGUAGE'];

// Bize sadece ilk 2 harflik ISO dil kodu yeterli
$dil = substr( $dil, 0, 2 );

// varsayılan iki değer atıyorum
$location = false; $deflocation = false;

for ($i=0; $i< (sizeof($secenekler))/2; $i++) {

// echo "<br><br>".$dil." ".$secenekler[2*$i]."<br><br>";

if ($secenekler[2*$i] == $dil) $location = $secenekler[2*$i+1];
if ($secenekler[2*$i] == "varsayılan" ) $deflocation = $secenekler[2*$i+1];

};

if ( !$location ) $location = $deflocation;

return $location;

}

Kullanımı:

header( "Location: http://sizinsunucunuz.com".browserdili( array( "en","/en/index.php","tr","/tr/index.php","varsayılan","/en/index.php") ));
 
Başa dön
Kullanıcı profilini gör Özel mesaj gönder E-mail'i gönder Kullanıcının web sitesini ziyaret et MSN Messenger
Mesajları göster:   
Tüm saatler GMT +2 Saat

Sonraki başlık
Önceki başlık
1. sayfa (Toplam 1 sayfa)
Turkish Nuke Forum Ana Sayfası  ~  Programlama Dilleri

Yeni Başlık Gönder   Cevap Gönder


 
Forum Seçin:  

Bu forumda yeni konular açamazsınız
Bu forumdaki mesajlara cevap veremezsiniz
Bu forumdaki mesajlarınızı değiştiremezsiniz
Bu forumdaki mesajlarınızı silemezsiniz
Bu forumdaki anketlerde oy kullanamazsınız

Copyright © Haziran 2005, TurkishNuke ™ Her hakkı saklıdır.
Web sitemizin PHP-Nuke tabanlıdır.

Bu site en iyi 1024x768 ve üzeri çözünürlüklerde, İnternet Explorer ve Firefox ile görüntülenir.
 

stories | temizlik | Kırcaali

AktifPHP!