#!/usr/bin/perl # # Yoneticilerin bakmaya yetkili olduğu sayfalara erişmek için # girilen şifrelerin doğru olup olmadığını kontrol eden program. # # Yönetici şifresi cgi-bin dizinindeki "sifre.dat" dosyasında # saklanır. Aslında bu yontem guvenlik açısından pek sağlam # olmamakla birlikte, uygulamanında zaten çok fazla # güvenlik gerektirdiği soylenemez. # open(DBG, ">/tmp/dbg"); print DBG "giris\n"; $gelen_bilgi = <STDIN>; print DBG "GELEN BILGI $gelen_bilgi\n"; chomp($gelen_bilgi); # gelen_bilgi içinde SIFRE=abcdef gibi bir satır olmalı. @ciftler = split("&", $gelen_bilgi); foreach $cift (@ciftler) { # print DBG "CIFT $cift\n"; ($alan_adi, $degeri) = split("=", $cift); $degeri =~ tr/+/ /; $degeri =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $form{$alan_adi} = $degeri; } $girilen_sifre = $form{'SIFRE'}; print DBG "$gelen_sifre\n"; print DBG "$form{'SIFRE'}\n"; # # Diskteki şifre dosyasından geçerli şifreyi al open(SIFRE, "sifre.dat") or &hata("Şifre dosyası açılamadı!"); $gecerli_sifre = <SIFRE>; chomp($gecerli_sifre); print DBG "DAT $gecerli_sifre\n"; close (SIFRE); if ( $girilen_sifre eq $gecerli_sifre ) { # kullanıcı geçerli bir şifre girdi. # Uygulamanın diğer sayfalarında kullanıcıya bir daha şifre sormamak için # kullanıcının tarayıcısına bir Cookie gönderelim. # Kullanıcının yetkili olup olmadığını kontrol etme gereksinimi # duyduğumuzda kullanıcının tarayıcısından bu Cookie yi sorgulayarak # bu kontrolu yapabiliriz. # Göndereceğimiz Cookie "sifre=dogru" diye bir karakter dizisi # Tek yaptığı iş, kullanıcının şifresini doğru girmiş olduğunu # belirtmek. Elbette şifrenin kendisini de Cookie olarak gönderebilirdik # ama bu güvenlik açısından pek iyi olmazdı. # Aşağıdaki satırdaki gibi verilen Cookie'ler, kullanıcı tarayıcısını # kapattığı anda yok olur. # # Cookie içindeki "domain=.cgi.com.tr;" ifadesi bu Cookie'nin # ancak bu alan adına sahip bilgisayarlar tarafından sorgulanabileceğini # belirtiyor. Bir çeşit güvenlik önlemi. print "Set-Cookie: sifre=dogru; path=/;\n"; # Artık rapor seçenekleri menusune geçebiliriz. Kullanıcının # tarayıcısın göndereceğimiz bir "Location" komutu kullanıcıyı # istediğimiz adrese yönlendirecektir. (Location komutunun # sonundaki çift \n önemlidir. print "Location: /cgi-bin/i_kaynak/rapor_menu.pl\n\n"; } else { # Bir daha denesin print "Location: /i_kaynak/sifre_sor.html\n\n"; } exit;