You are currently browsing the archives for the Php category.

Archive for the ‘Php’ Category

Php kodlamada güvenlik

Pazartesi, Mayıs 4th, 2009

Arkadaşlar bir sitede de alınması gereken önlemleri ile ilgili bir makale okudum ve burada sizlerle paylaşmak istedim.
————–

Basit Güvenliği:
script’lerinizin güvenli olduğundan emin olmanız için ilk olarak temel kuralları yerine getirmeniz gerekiyor: kullanıcı girdilerinin (input) filtrelenmesi ve çıktıların (output) kontrolü. Eğer bu ikisini doğru olarak yapmıyorsanız script’leriniz her zaman problemleri ile karşı karşıya olacaktır. Bu makale’de bu iki işlem ile ilgili yapılması gerekenler anlatılıyor.

Bütün Girileri Filtreleyin:
Script’leriniz harici bir kaynaktan girdi okuduğunda, bu verinin tehlikeli olduğu varsayılmalı ve güvenilmemelidir. Güvenilmemesi gereken değişkenlerden bazıları: $_POST, $_GET, $_REQUEST ve hatta pek mümkün görünmese de önemli veriler içerebilecek olan $_SERVER .

Tehlikeli bir değişkenden gelen veriyi işlemlere tabi tutmadan önce ilk olarak önce onaylanamanız ve filtrelemeniz gerekmektedir. Onaylama işlemi ile sadece sizin istediğiniz verileri içerdiğinden emin olabilirsiniz. Örneğin bir eposta adresi bilgisi bekliyorsanız, onay fonksiyon’unuz girilen verinin doğru bir eposta adresi olup olmadığını kontrol etmeli.

Hemen basit bir örnekle açıklayalım. Aşağıdaki kodda ilk olarak $_POST değişkeninden e-posta adresini alıyorum ve sonra veriyi onaylama işlemine sokuyorum:

Kodu:
<?
$eposta
= $_POST['eposta'];
# Burada veri hala TEHLİKELİ durumda

// Validate e-mail
if (valid_eposta($eposta) == false) {
// Geçerli bir adres değil
die(‘Geçerli bir eposta adresi değil!’
);
}
?>

Veriyi kontrol ederek script’imize tehlikeli verilerin eklenmesi riski büyük ölçüde azaltılmış oldu. valid_eposta() fonksiyon’u PHPit Code Snippet veritabanında da bulunabilecek olan standart bir onay işlemidir.

Verimiz daha güvenli olsa da işimiz daha bitmedi çünkü hala veriyi MySQL veritabanına yerleştirmek istiyoruz ve bu işlemden önce de bazı kontroller yapmamız gerekiyor. tüm önemli karakterlerin escape edildiği mysql_real_escape_string() standart fonksiyon’unu sunar. Diğer bir yöntem ise SQL sorgusunda veriyi her zaman kesme imleri arasına yerleştirin.

Önceki örneğimize devam edelim:

Kodu:
<?
$eposta
= $_POST['eposta'];
# Burada veri hala TEHLİKELİ durumda

// Validate e-mail
if (valid_eposta($eposta) == false) {
// Geçerli bir adres değil
die(‘Geçerli bir eposta adresi değil!’
);
}

// eposta’nın veritabanı için güvenli hale getirilmesi
$eposta = mysql_real_escape_string($eposta
);

// Artık güvenli!
?>

Artık elimizdeki eposta verisi veritabanına güvenli bir şekilde işlenebilir. Hatalardan kaçınmak için tehlikeli değişkenlere bir ön ek verilebilir, örneğin:
Kodu:
<?
$t_eposta
= $_POST['eposta'];
# Tehlikeli

// Onay işlemi

$g_eposta = mysql_real_escape_string($d_eposta);
?>

Bu şekilde tehlikeli bir veriyi işleme sokarken ön tarafındaki t_ eklentisi ile hemen farkına varabilirsiniz.

Çıktıların filtrelenmesi
Girdilerde olduğu gibi dışarıya sunulan tüm verilerin de (güvenli olarak filtreleyip veritabanına işlediğiniz verilerin dahi) filtrelenmesi gerekmektedir.

Filtrelenmesi gereken en önemli şey probleme yol açabilecek olan ’leridir. Bunu yapmanın en kolay yolu bütün ’i escape işlemine sokan htmlentities() fonksiyon’udur:

Kodu:
<?
echo htmlentities($_GET['eposta'
]);
?>
Bu kod (saldırganın sayfalarınıza JavaScript kodları eklemesine ve diğer kullanıcıların cookie’lerini çalmasını sağlayan) muhtemel XSS (çapraz site betik çalıştırma - cross site scripting) saldırılarını kaldırır. Eğer mümkünse, htmlentities fonksiyon’unun üçüncü argümanı’nı (encoding/charset tipi) da kullanmalısınız. ’da ’i escape işleminde düzgün encoding ayarı yapmadığı için XSS saldırısından etkileniyordu. bu açığı 1 aralık’ta kapattı. Basitçe, her zaman encoding tipini belirlemelisiniz:

Kodu:
<?
echo htmlentities($_GET['eposta'], ENT_QUOTES, ‘UTF-8′
);
?>

Eğer bütün ’lerini filtrelemek istemiyorsanız, bazı ’lere izin vermek istiyorsanız strip_tags() fonksiyon’unu kullanabilirsiniz. Fakat bu, <script> ’lerini filtreleseniz dahi Javascript ekleme açıklarına karşı bir problemi içerebilir. ör ( <div onclick=”alert(’Hi!’);”> .

Diğer bir yöntem de sadece sizin istediklerinizi filtrelemenize yarayacak kendi fonksiyon’unuzu yazmanız (veya internet’teki yüzlerce hazır fonksiyon’dan birini kullanmanız). Bu bazen en iyi yöntem olabilir fakat herhangi bir şeyi unutmanız durumunda problemlerine yol açabilir.

Son olarak, çıktıyı filtrelemenin en iyi yolu, üç argümanı ile birlikte htmlentities() fonksiyonunun kullanımı fakat bununda işlevi sınırlı (ör: formatlama olmaması) kalabilir. Buna çözüm olarak verileri format’lamanızda kullanılabilecek olan kendi kodunuzu yaratabilirsiniz. Kendi kodunuzu yaratma ile ilgili olarak Create your own BBCode, using dokümanına göz atabilirsiniz.

Sonuç :
Bu makalede programlamının iki temel ilkesi olan girdi filtreleme ve çıktı filtreleme’den bahsettim. Eğer bu ikisini doğru olarak yapabilirseniz çok güvenli bir script’ine doğru yola çıkmışsınız demektir.

Verdiğim örnekler çok basit ve hantal. Escape işlemini otomatikleştirmeniz iyi olabilir. Bunun için iyi bir yöntem gerekli işlemleri yapan bir class veya fonksiyon’lar yazmanız.

güvenliği ile ilgili daha fazla bilgiye ihtiyaç duyuyorsanız aşağıdaki sitelerine göz atabilirsiniz:

- Security Consortium - Çok sayıda bilgi içeren mükemmel bir rehberi. Mutlaka okunmalı.
- Essential Security - Chris Shiflett’in Essential Security kitabından bilgiler. Kitabın bir kaç bölümü ücretsiz
- Hardened - bültenlerine yer veriliyor
——-

Php kullanarak sitemap güncellemek ( To update the sitemap using php )

Cumartesi, Mayıs 2nd, 2009

kullanarak güncellemek ( To the using )

Amaç: ile .xml dosyasımızın içini otomatik olarak güncelleme.
Yöntem: . dosyamızda xml uzantılarında taglarının çalışmasınıayarlayacağız. Daha sonra xml dosyasının içine kodlarımızıyazacağız.

Bu kodu . dosyamızın içine ekleyelim
Kod:

Objective: automatically updated .xml dosyasımızın inside.
Method:. files in our xml extension worked setup . Then in the file xml codes write.

This code. file, add in our
Code:

AddType application/x-httpd- . .xml

Bu da .xml dosyamızın içeriği olsun
Kod:
——– KOD BAŞLANDICI———-
<?
$host = “localhost”; // Veritabanı Sunucusu
$mysqladi = “root”; // Veritabanı Yetkili Adı
$mysqlsifre =”"; // Veritabanı Yetkili Şifresi
$db = “phpxml”; // Veritabanı Adı
mysql_connect ($host, $mysqladi, $mysqlsifre) or die (”VT Bağlantısı Yok”);
mysql_select_db ($db) or die (”Veritabanına Bağlanılamadı”);
header(’Content-type: text/xml;charset=UTF-8′);
$xml = “<?xml version=\”1.0\” encoding=\”UTF-8\”?>”.”\n”.”<urlset xmlns=\”http://www.sitemaps.org/schemas//0.9\”>”.”\n”;
$urunsayfasi=”http://www.domain.com/urunler.?id=”;

$sorgu=mysql_query(”Select id from urunler”);
while($xmlsorgu=mysql_fetch_array($sorgu)){
$xml .=    “\t”.”<url>”.”\n\t\t”.”<loc>”.$urunsayfasi.$xmlsorgu["id"].”</loc>”.”\n\t”.”</url>”;
}
$xml.=”</urlset>”;
echo $xml;
?>

—— KOD BİTİŞİ——-

Not: Bu XML site haritasında veritabanı bilgilerini değiştirmelisiniz. Ayrıca veritabanından çektiğiniz bilgileri kendinize göre düzenleyin. İsterseniz öncelik ve değişim değerlerini ekleyebilirsiniz.

Note: This must change the database information in XML site map. Moreover, according to your own database, edit the information you have taken. If you want you can add value and change priorities.

Sınırsız Html veya text içerikli dosya editleyen script

Cuma, Aralık 19th, 2008

Bu scriptle veya text içerikli dosyaların kodlarında değişiklik yapabilirsiniz.index. ve dizinoku. dosyalarının oldugu dizine bir klasör olusturarak dosyalarınızı bu klasöre atınız.Sınırsız dosya değiştirebilirsiniz. Script hostunuzda çalıtırılabilir.
örnek olarak <title>Armut Sitesi</title> titlesini aynı klasördeki veya farklı klasörlerdeki dosyaları içinden değiştirerek <title>Elma Sitesi</title>  yapabilirsiniz. İndirmek için tıklayın.

or text file to change the script with unlimited
or text files with this scriptle code changes and yapabilirsiniz.index. by creating a folder dizinoku. files to the directory that files can change this folder atınız.Sınırsız file. Hostunuzda çalıtırılabilir script.
Examples <title> Pear Site </ title> titlesini same or a different folder in the folder from within the files by changing <title> Apple Site </ title> to. Click here to download


Windows sunucuda .htaccess alternatifi IsapiRewrite4.dll

Perşembe, Ekim 30th, 2008

Linux hosting sahibi olmayan arkadaşların çoğu için (arama motorları için optimizasyon) olayı bir problemdir.Bu sorunu windows sunucuda halletmenin tek yolunun hata sayfalarını kullanarak (404) oldugu söylenir.
Size anlatacağım yöntemin basitliği ve kullanımının ‘e çok yakın olması işinize çok yarayacak.İlk önce buradan gerekli olan dosyayı indirin. İndirdiğiniz bu dosyanın içinde bir dll ve bir ini dosyası var.

Yapacağımız işlem şu ;
ilk önce masaüstünden bilgisayarıma sağ tıklayıp yönet diyoruz. Servislerden iis yi buluyoruz.Burada sıralı veb sitelerimizin hangisinde yapacaksak ona sağ tıklayıp özellikler diyoruz. tabına gelip ekle (Add) diyoruz. Gözat kısmından .dll yi seçip isim kısmına yazıp tamam diyoruz. Şimdi sitemiz gibi bir ini dosyası kullanmamız için hazır.

Dikkat edilmesi gerekenler ;
.dll ve .ini aynı klasörde olmalı.
Dll ismi neyse ini ismide onunla aynı olmalı.
dosyamızı direk kullnamayız ,
Yönlendirme öncesinde / koymayı unutmuyoruz.
RewriteRule ^/tr/([^/]+)/([^/]+).$ /sayfa.?id=$1&sayfa=$2 [L] burada gördüğümüz gibi sayfa. den önce / kullandık.
dosyamızın içeriğini kopyalayıp ini doyamıza yapıştırdık / işaretlerini koyduk ve sitemiz hazır güle güle kullanın.
Not:Bu dll ücretsizdir ve hiç bir lisans problemi yoktur.

Mysqlden veri okurken iki döngü iç içe kullanmamız gerekirse mysql_fetch_assoc

Pazar, Ekim 26th, 2008

Mysqlden veri çekerken iç içe kullanacağımız whilelerde array yerine mysql_fetch_assoc kullanıyoruz.

Örnek php

Html taglarını convert etmek

Pazar, Ekim 26th, 2008

Aşağıdaki yöntemi kullanarak postla veya getle çektiğiniz verilerin kodlarını ortadan kaldırabilirsiniz.
<?
$_POST = array_map(”htmlspecialchars”,$_POST);
$_GET = array_map(”htmlspecialchars”,$_GET);
?>

Metni karakterlerden bölerek değişkenlere atamak

Pazar, Ekim 26th, 2008

<?
$ = “elma-armut-kebap”;
$bolme = explode(’-’,$);
$say=count($bolme);
$i=0;
while ($i<$say){
$degisken[i] = $bolme[$i].’<br>’;
echo $degisken[i].’<br>’;
}
<?
Kodumuz bu şekilde şimdi anlatalım;
değişkenimiz yazılardan olusan ve aynı karakterlerin yani - lerin tekrarlandığı bir string
explode ile her - karakterinden sonra gelen her elemanı alır ve dizinin bir elemanı yapıyoruz.Bu elemanları değişken olarak kaydettik ve echo ile yazdırdık.

Oyun Domain Registration Australia
Add to Technorati Favorites Technorati