Konu Başlıkları: PERL NEDİR ?
Tekil Mesaj gösterimi
Alt 20 January 2009, 14:43   Mesaj No:3

CoNQueRoR_61

Papatyam Usta Üyesi
Avatar Otomotik
Durumu:CoNQueRoR_61 isimli Üye şimdilik offline konumundadır
Papatyam No : 1397
Üyelik T.: 20 January 2009
Arkadaşları:0
Cinsiyet:
Memleket:istanbul
Yaş:33
Mesaj: 131
Konular:
Beğenildi:
Beğendi:
Takdirleri:10
Takdir Et:
Konu Bu  Üyemize Aittir!
Standart Ynt: PERL NEDİR ?

Dizi değişken oluşturulduktan sonra CGI.pm modülü kullanılarak cookie makinaya gönderilir :

print header(-cookie=>$cookie);

CGI.pm modülü ile daha önce gönderilmiş cookie'yi okumak çok kolaydır :

$isim = cookie("cookie_ismi"

Burada yukardaki hash değişkenin "-name" anahtarına değer olarak verdiğimiz ismi yazdık ve $isim değişkenine atadık. Daha sonra bu değişkeni kullanarak makineye gönderdiğimiz isim değeri ile işlem yapabiliriz.

Toparlamak açısından cookie gönderen bir örnek yapalım. Basit örneğimizde ziyaretci sayfaya geldiğinde ismini sorgulayan bir form olsun, ziyaretci ismini yazıp göndersin ve program makinaya cookie göndersin. Eğer ziyarecti daha önce bu formu doldurmuşsa cookie okunsun ve ekrana yazılsın, form gösterilmesin :

#!/usr/bin/perl

# cookie.cgi

use CGI qw(:standard);

$query = new CGI;

$isim = $query -> param('isim');
$istem = $query -> param('istem');

$cookie_isim = cookie("ziyaretci_ismi"

if ($istem eq "kukile&quot {
$cookie = cookie(-name => "ziyaretci_ismi",
-value => "$isim",
-expires => "+1d"

print header(-cookie=>$cookie);

print "Cookie basariyla gonderildi, geri donus icin <a href=cookie.cgi>buraya tiklayin</a>";

exit;
}

if ($istem eq "kukisil&quot {

$cookie = cookie(-name => "ziyaretci_ismi",
-value => "$isim",
-expires => "now"


print header(-cookie=>$cookie);

print "Cookie basariyla silindi, geri donus icin <a href=cookie.cgi>buraya tiklayin</a>";

exit;
}

print "Content-Type: text/html\n\n";

if ($cookie_isim eq "&quot {

print "<form action=cookie.cgi method=post>";
print "<input type=hidden name=istem value=kukile>";
print "Merhaba, lütfen isminizi girin : ";
print "<input type=text name=isim>";
print "<input type=submit value=\"Cookie'yi Gönder!\">";

exit;
}

print "Hoşgeldin $cookie_isim, ismini içeren cookie 1 gün süreyle
makinanda barınacaktır,";
print "denemek için tarihini bir gün ileriye alıp tekrar ziyaret edebilirsin. ";
print "Makinadaki cookie'yi silmek için
<a href=cookie.cgi?istem=kukisil>buraya tıklayabilirsin";






Cookie gönderilmeden önce :





Cookie gönderildikten sonra :





Dikkat !!! Cookie gönderirken cookie'den önce şu kodu :

print "Content-Type: text/html\n\n";

kullanmayın, cookie gönderildikten sonra kullanabilirsiniz. Eğer bu kodu cookie gönderilmeden önce (print header(-cookie=>$cookie); kodundan önce) kullanırsanız cookie'nin içerdiği bilgiler direk ekrana yazılır.



Perl'de güvenlik :

CGI programlarında en büyük güvenlik tehtidi SSI kodlarıdır. Eğer ziyaretcilerden form bilgileri varsa ve bu form bilgileri ekrana yazdırılıyorsa form bilgilerindeki SSI komutlarının form bilgilerinin açılması esnasında şu şekilde temizlemeniz gerekir :

$deger =~s/<!--(.|\n)*-->//g;

Eğer bir dosyanın içeriğinde ziyaretcilerin özellikle de kötü niyetli ziyaretcilerinin görmesi sakıncalı olabilecek bilgiler varsa;

Bu dosyayı cgi-bin dizininin içine koyun,
Mutlaka uzantısını ".cgi" ya da ".pl" yapın,
Eğer Apache web server kullanıyorsanız .htaccess kullanın,
Dosyanın bulunduğu dizinde mutlaka boş da olsa bir index.html bulundurun,
Eğer dosyadan sadece faydalanıyorsanız (require) dosyanın o dizinde bulunduğuna dair bir belirti, link, yazı vs. bulundurmayın,
Programı internet alanına gönderdikten sonra browser üzerinden programın klasörünün bulunduğu yolu ve dosyanın bulunduğu tam yolu yazıp dosyanın inip inmediğini ya da ekranda görüntülenip görüntülenmediğini defalarca kontrol edin.


Bunun dışında eğer başkası tarafından hazır yazılmış bir program kullanıyorsanız programın dağıtıldığı web sitesini takip edin, buglardan ve bu bugların temizlenmesinden kötü niyetli kişilerden önce siz haberdar olun.

.htaccess dosyalası ile dizin içeriğinin korunması :

Eğer kullandığınız web server programı Apache ise dizin içerisindeki dosyaların görüntülenmemesi ve indirilememesi için şu şekilde bir dosyayı notepad vasıtası ile kaydedip dizin içine göndererek güvenliği sağlayabilirsiniz :

AuthUserFile /dev/null
AuthGroupFile /dev/null
AuthName DenyViaWeb
AuthType Basic


<Limit GET>
order allow,deny
deny from all
</Limit>


Yazılan programların web alanına gönderilmesi :

Kendi yazdığınız ya da başkası tarafından yazılmış hazır programların internet'te sağlıklı olarak çalışabilmesi için FTP programı ile gönderilirken bir takım ayarların yapılması gereklidir.

Dosyaları ASCII olarak gönderin :

Yazdığınız CGI programlarını (*.cgi ya da *.pl) ve bu program içerisinde kullandığınız veritabanı dosyaları (*.txt, *.dat...) delenmemiş metin tabanlı yani ASCII dosyalardır. Bunun windows işletim sisteminde çalışan server'larda bir önemi olmasa da Linux işletim sistemi bulunan bir bilgisayarın server'ı için ASCII ve BINARY gönderilen dosyalar farklı şeyler ifade eder. Eğer bir cgi dosyası ASCII olarak değil de BINARY olarak gönderilirse internet alanında Internal Server Error (hata 500) hatası alınır.

Cute FTP ile CGI dosyaları gönderilirken varsayılan ayarlarla çalışılıyorsa herhangi ek ayar yapmanıza gerek yoktur. Cute FTP dosyaları göndrirken ASCII - BINARY ayrımı yapar ve dosyanın türünü anlar, ona göre gönderir.

Wise_FTP programını kullanıyorsanız CGI programlarını gönderirken sağdaki büyük pencerenin en altındaki radyo butonlardan "ASCII" butonunun işaretli olduğuna dikkat etmelisiniz. Aynı şekilde eğer resim, müzik ya da sıkıştırılmış ZIP dosyası gönderiyorsanız "Binary" seçeneğini işaretlemelisiniz.

Diğer FTP programlarında da dosyaları gönderme esnasında ya da dosyaların gönderileceği server'a bağlanma esnasında yapılacak bir ayar mutlaka vardır.

Chmod ayarı :

Chmod Unıx sistemlerde dosyalara izin hakkı (permissions) vermeye yarayan bir komuttur. Unıx sistemlerde dosyalara 3 tür izin verilebilir.

Bunlar;
okuma (read), yazma (write), çalıştırma (execute) dir. chmod ayarı ile CGI dosyalarımızın ve içindeki şifre gibi bilgilerimizin güvenliğini sağlayabiliriz. CGI dosyaları genelde 755 chmod ile çalışırlar. Bunun anlamı; sahibi için okuma, yazma çalıştırma, diğerleri için ise okuma ve yazma anlamına gelir. Başka birisi serverınızdaki CGI dosyalarını silemez, içeriğini göremez ve değiştiremez. sadece çalıştırabilir. Veri dosyaları genelde CGI dosyalarının form vasıtasıyla gönderdiği bilgileri depolama amacıyla kullanılır. Genelde chmod'ları 644 ya da 666'dır. sadece yazılıp okunma izinleri vardır, çalıştırılamazlar.

Cute FTP programı ile dosyayı gönderdikten sonra dosyaya chmod ayarı yapmak için dosyaya sağ tıklayıp "chmod" yazan bölümü tıklayın ve çıkan pencerede dosyaya vermek istediğiniz chmod'u yazın.

Wise FTP ile chmod ayarı yapmak için dosyaya bir kere sol tıklayarak seçili hale getirin, sonra sağ tıklayın ve "chmod" yazan yere bir kere tıklayın, çıkan pencereye vermek istediğiniz değeri yazın.


Eğer web alanına gönderdiğiniz bir CGI programını browser üzerinden çalıştırmak istediğinizde "Internal Server Error" hatası alıyorsanız şu ihtimalleri gözden geçirin ;


Perl yolu (shebang) yazılmışmı, doğru mu?
Dosya ASCII olarak gönderilmiş mi?
Chmod ayarı yapılmış mı, Doğru mu?
Dosyanın içinde bulunduğu dizinin CGI/Perl programları çalıştırma izni var mı?

CGI/Perl programcılarının ya da hazır programları kullanan kişilerin dosyaları web alanına upload etmesi esnasında en çok yaptıkları hata bunlardır.

Windows server'larda dosyaları direk klasörden klasöre taşıyabilirsiniz. ASCII - Binary olması farketmez zaten böyle de bir ayar yoktur. Ayrıca chmod ayarı yapmanıza da gerek yoktur.
__________________
Biz Bu Hallere Düşecek Adammıydık ???
Alıntı ile Cevapla