Navigate / search

strftime() Türkçe Karakter Problemi [UTF-8]

Strftime() fonksiyonunu kullanırken UTF-8 sayfalarınızda türkçe karakter problemi yaşayabilirsiniz. ISO-8859-9 sorunsuz çalışır UTF-8′e çevirdiğimizde Türkçe karakterler bozuk görünüyor..

23 May�s 2014 10:55:30

strftime() Türkçe Karakter Problemi Çözümü

1
2
setlocale(LC_TIME,'turkish');
$tarih    = iconv('latin5','utf-8',strftime('%Y %B %d'));

Bunu her defasında kullanmak istemiyor iseniz fonksiyon haline getirebilirsiniz. Aşağıdaki fonksiyonu rahatça bu sorunu yaşamadan kullanabilirsiniz

1
2
3
4
function strftime_tr($date_format){
	$tarih    = iconv('latin5','utf-8',strftime($date_format)); 
	return $tarih; 
}

Kullanımı;

1
echo strftime_tr('%Y %B %d');

Sonuç:

23 Mayıs 2014 10:57:21

Php ile Bot Yapımı 1

Merhabalar, Bu yazımızda PHP ile bot yazacağız. Php ile bot yapmak için birden çok yol mevcuttur. Bu yazıda get_contents yöntemiyle bot yapımını anlatmaya çalışacağım.

Bir test olarak basit bir sayfada bot oluşturduk. Bunun için yabancı bir web sitesi seçtim. OCA

1
2
3
4
5
6
//Şimdi bir bağlantı yaratıyoruz
$handle = fopen ("http://www.oca.org/Reading.asp?SID=25" , "r");
//Sayfanın içeriğini çekiyoruz.
$contents = stream_get_contents($handle);
//Verileri aldık bağlantıyı kapatıyoruz
fclose($handle);

Devamını oku

Tek Kod ile Php Sql Injection Açığını Kapatma

Her scriptimde ve her açıklı olan scriptte kullandığım ve kullanılmasını önerdiğim kodu paylaşıyorum. Bu kod ile sql injection tamamen engellenir.

Aşağıdaki fonksiyonu sayfasına include edin

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function veriTemizle($mVar){
    if(is_array($mVar)){
        foreach($mVar as $gVal => $gVar){
            if(!is_array($gVar)){
                    $mVar[$gVal] = htmlspecialchars(strip_tags(urldecode(mysql_escape_string(addslashes(stripslashes(stripslashes(trim(htmlspecialchars_decode($gVar)))))))));  // -> Dizi olmadığını fark edip temizledik.
            }else{
                    $mVar[$gVal] = veriTemizle($gVar);
            }
        }
    }else{
        $mVar = htmlspecialchars(strip_tags(urldecode(mysql_escape_string(addslashes(stripslashes(stripslashes(trim(htmlspecialchars_decode($mVar))))))))); // -> Dizi olmadığını fark edip temizledik.
    }
    return $mVar;
 
 
}

Fonsiyonu sayfalarınızda aşağıdaki gibi kullanabilirsiniz.

1
2
3
4
$_GET = veriTemizle($_GET); // -> GET verilerini temizledik.
$_POST = veriTemizle($_POST); // -> POST verilerini temizledik.
$_SESSION = veriTemizle($_SESSION); // -> SESSION verilerini temizledik.
$_COOKIE = veriTemizle($_COOKIE); // -> COOKIE verilerini temizledik.

PHP Injection Açıklarını Kapatma ve Saldırılardan Korunma

Merhabalar ;

PHP Injection saldırı ve tehtidlerinden korunmak için bir kaç farklı yol mevcut. Bu yazıda size bunların bir kaçını göstereceğim.

Bunu ben 2 şekilde yapıyorum sizede önerim her iki şekilde uygulamalarınızı yazarken bu konulara dikkat etmeniz.

1.Yol :

Site geneline dahil ettiğimiz bir connection.php,config.php veya veritabanı bağlantısı için kullandığımız bir bağlantı dosyamız mevcuttur. Bu dosyanın içinde aşağıdaki kodları ekleyerek get methodumuza gelecek select insert gibi sorguları filtreleyebiliriz.

1
2
3
4
5
6
7
8
9
10
11
12
13
$inj = array (‘select’, ‘insert’, ‘delete’, ‘update’, ‘drop table’, ‘union’,null, ‘SELECT’, ‘INSERT’, ‘DELETE’, ‘UPDATE’, ‘DROP TABLE’, ‘UNION’,NULL,’order by’,’order by’);
for ($i = 0; $i < sizeof ($_GET); ++$i){
for ($j = 0; $j < sizeof ($inj); ++$j){
foreach($_GET as $gets){
if(preg_match (/. $inj[$j] ./, $gets)){
$temp = key ($_GET);
$_GET[$temp] =;
exit(<iframe title="YouTube video player" width="800" height="600" src="https://www.youtube.com/watch?v=_bfDT2RA7r0" frameborder="0" allowfullscreen></iframe>);
continue;
}
}
}
}

2. yolumuz ise şöyle;

Aşağıdaki kodu kullanarak get ve posttan gelen verileri temizleyebilirsiniz. Ama bu şekilde kullanırsanız göndermek istediğiniz zararsız verilerden bazılarınıda temizleyebilir :)

1
$injectcheck = preg_replace("[^À-ÿa-zA-Z0-9\\\-\.\,\:\s\r\t\n ]",'',$injectcheck);

3. olarak bahsetmek istediğim yol gelen verileri yine kontrol ederek. Örneği gelen sayfa id’si INT mi ?

erhangi üyenin detaylarını gösteren bir sayfa düşünün;
x.php?uyeid=1 ( Bu adres 1 no”lu uyenin bilgilerini gostersin )

1
2
$id = mysql_real_escape_string($id);
$sorgu = "SELECT isim,soyad,bla,bla FROM uyeler WHERE id = $_GET[id]";

Eminim birçoğunuz zaten yukarıdaki kodun yeterince güvenli olduğunu düşünüyorsunuz fakat değil.Mysql 4.x ile birlikte mySQL union select destegi vermeye başladı.

Saldırganın tekinin ?id=-1 UNION SELECT 0,uye,parola FROM uye olarak istek yaptığını düşünsenize..Birinci – asıl – select sorgusu herhangi bir sonuç döndürmeyeceği için dönen sonuclar saldırganın girdigi union select içindeki alanlar olacaktır.

Dikkatinizi çektiyse tırnak kullanmadan böyle bir saldırı yapılabiliyor, dolayısıyla bu nokta dikkat edilmesi gereken bu tip id tarzı bilgileri sorguya alırken veri tipini kontrol etmek.

Bunu (int)$degisken veya intval($degisken); seklinde yapabilirsiniz.Ya da is_integer, is_numeric gibi fonksiyonlarla kontrol edip gerekli manual try/catch mekanizmasını kurabilirsiniz.

Ya da bu tür değerleri tırnak içine alarak saldırganın işi zorlaştırılabilir.(where id = “$id” gibi) Zira, bu durumda saldırgan union select sorguları sokabilmek için ilk önce ilk SELECT sorgusunu bitirmek zorunda kalacak ve UNION SELECT yazmadan önce ” karakterini yazacak.Fakat mysql_real_escape_string burda devreye girip ” karakterini escape edeceği için olası saldırılar geçersiz hale gelir.

Yani daha güvenli bir kod aşağıdaki gibi olacak;

1
2
$id = intval($_GET["id"]);
$sorgu = "SELECT * FROM uyeler WHERE id = "$id" ";