• 14-06-2014, 00:02:31
    #10
    intval() fonksiyonunu kullanırım id değerini alırken. Çok faydalıdır. Ayrıca query_string ile get paremetlerini kontrol ediyorum. Sorun çıkarsa url deki değişkeni ve ip adresini sql kayıt ediyorum.
  • 14-06-2014, 10:39:17
    #11
    Kimlik doğrulama veya yönetimden onay bekliyor.
    kingofseo adlı üyeden alıntı: mesajı görüntüle
    Örnegin ben bir fonksiyon yaziyorum trim(strip_tags(mysql_real_escape_string($var))); seklinde idleri alirsam is_numeric fonksiyonu ile kontrol ediyorum aksi taktirde ; anasayfa'ya yönenlendiriyorum.
    Malesef bu bir işe yaramaz.

    http://aristona.github.io/web-gelist...reken-konular/ adresindeki:

    - Kullanıcıya güvenmeyin. Aşırı paranoyak olmayın. Input filtrelenir, output escape edilir.
    - mysql_real_escape_string() sizi SQL Injection'dan korumaz.

    bölümlerini okuyabilirsiniz.
  • 27-06-2014, 23:30:46
    #12
    rodrane adlı üyeden alıntı: mesajı görüntüle
    Malesef bu bir işe yaramaz.

    http://aristona.github.io/web-gelist...reken-konular/ adresindeki:

    - Kullanıcıya güvenmeyin. Aşırı paranoyak olmayın. Input filtrelenir, output escape edilir.
    - mysql_real_escape_string() sizi SQL Injection'dan korumaz.

    bölümlerini okuyabilirsiniz.
    outputu escape etmediği ne malum. Yani kimse veritabanında xss kodu yerleştirilmiş bir veritabanı istemez sanırım .Ayrıca kullanıcıya güvenmeyin diyorsun fakat inputla gelen verileri filtre etmeyin diyor gibisin veya filtre edinmi diyorsun çünkü arkadaşın koduda bir nevi filtre yani aynı şeyleri söyler gibisiniz. Makaledeki arkadaş cidden güzel şeyler yazmış paylaşımı için teşekkür ederim.

    Birde php de bir işlemi girdide yapmakla çıktıda yapmak arasında ne fark olabilir Veya hem girdide hemde çıktıda yapmakta bir nevi paranoyaklık olmuyormu Yani php öyle birşeyki ne tarafa çeksen o tarafa geliyor. Surçi lisan ettiysek afola hayırlı ramazanlar.
  • 28-06-2014, 03:01:47
    #13
    aLKaDraZ adlı üyeden alıntı: mesajı görüntüle
    outputu escape etmediği ne malum. Yani kimse veritabanında xss kodu yerleştirilmiş bir veritabanı istemez sanırım .Ayrıca kullanıcıya güvenmeyin diyorsun fakat inputla gelen verileri filtre etmeyin diyor gibisin veya filtre edinmi diyorsun çünkü arkadaşın koduda bir nevi filtre yani aynı şeyleri söyler gibisiniz. Makaledeki arkadaş cidden güzel şeyler yazmış paylaşımı için teşekkür ederim.

    Birde php de bir işlemi girdide yapmakla çıktıda yapmak arasında ne fark olabilir Veya hem girdide hemde çıktıda yapmakta bir nevi paranoyaklık olmuyormu Yani php öyle birşeyki ne tarafa çeksen o tarafa geliyor. Surçi lisan ettiysek afola hayırlı ramazanlar.
    Günümüz teknolojisinde paranoya kabul edilebilir olmalı, en güvenilir sistem fişi çekili olandır. Ben aklıma gelen her türlü önlemi alırım, eğer alınan önlemler bana sorun çıkarıyorsa azaltır yada alternatifini ararım.

    Php de bir işlemi girdide yapmak her zaman avantaj sağlar çünkü işimiz okunabilir web sayfalarıdır, yazı bir veya bir kaç kez yazılır (düzenlenir) fakat defalarca okunur. Çıktı denetimi artarsa iş yükü kat ve kat daha fazla olacaktır.

    Bir başka açıdan bakacak olursak eskisi gibi ram, işlemci yada alan sorunu yaşamıyoruz. Eğer bir site kaynak olarak sizi zorluyorsa çok ciddi yol kat etmişsinizdir bu durumda kaynak için harcanan ücret sizi sıkıntıya sokmayacaktır. Böyle bir site için girdi çıktı demeden her önlemi almak akla yatkın geliyor.

    Çıktıda denetim yapmanın yararları verilen bağlantıda anlatılmış. Her yöntemin cazip tarafları var çok uzun düşünmeye gerek olmadığı kanaatindeyim. Aklınıza yatanı seçin zamanla su yolunu bulacak, ihtiyaçları en iyi karşılayan yönteme ulaşacaksınız.
  • 28-06-2014, 09:29:13
    #14
    sql injection için pdo harika tamamiyle kendisi filtreleme yapıyor tavsiye ederim herkese
  • 28-06-2014, 23:48:33
    #15
    Şu zamanda csrf, xss ve sql injection gibi durumların tamamen tarih olması lazım. Csrf ve xss ile mücadele etmek çok kolay. Sql injection'dan korunmak için ya pdo kullanın yada bunun üzerinde çalışan ORM'lere şans verin. Hatta direkt ORM kullanın. Ugulumanız ne kadar küçük olursa olsun raw php kullanmayın. Bunların yerine silex yada slim gibi mini fw kullanın. Orta ve büyük ökçekli projeler için ise Symfony yada Zend kullanın.
  • 29-06-2014, 01:42:37
    #16
    Framework'lere alışırsanız rahat elbette çok rahat edersiniz.. Ama salt kodlarla da kendi kütüphanenizi oluşturabilirsiniz.
    Benim kendi oluşturduğum sabit class, fonksiyon, css dosyalarım var. Sıfır projelerde bunları kullanırım.

    PHP'de güvenlik ile ilgili bazı notları aktarayım...
    Özellikle GET ile parametre alıyorsanız ve gelecek olan parametrenin sayısal mı, alfabetik mi yoksa alfasayısal mı olduğunu tabiki biliyorsunuzdur... Buna göre GET i korumak mümkün.
    Örneğin sayısal değer gelmesi gerekiyorsa int() kullanırsınız. Ya da
    filter_var($str, FILTER_SANITIZE_NUMBER_INT);
    kullanabilirsiniz.
    Ayrıca; strip_tags ve addslashes ile de güvenliği arttırabilirsiniz.

    PHP 5'den sonra artık built-in güvenlik için bir çok fonksiyon hazır geliyor. Özellikle SANITIZE INPUT (Bakınız: http://www.php.net/manual/en/filter....s.sanitize.php)

    Formlarınızda ise CSRF protection denilen güvenlik önlemini almalısınız.
  • 29-06-2014, 01:52:32
    #17
    CSRF için Kullanabilirsiniz işe yarıyor.

    http://www.phpclasses.org/package/86...F-attacks.html

    echo '<pre>POST:', PHP_EOL, print_r($_POST, TRUE), '</pre>';
    	
    	if (!empty($_POST['submitform1'])) {
    		if (CSRF::check($_POST['csrf_token'], 'form1')) {
    			echo '<strong style="color:green">Form 1 OK.</strong>';
    			// do something
    			// ...
    		} else {
    			echo '<strong style="color:red">Form 1 KO!</strong>';
    		}
    	}
  • 29-06-2014, 02:09:37
    #18
    Platin üye
    13 ve 14. satırda bulunan kodlar çalıştırıldığında ilk iki harften sonra "x" koyarak kodların çalışmasını engelliyorum. xss için kullanabilirsiniz.

    yarın fırsat bulursam sql, html sql ve flood için de bir post geçerim.


    function protect_post($text) {
    
    
    $text = preg_replace('/([\x00-\x08][\x0b-\x0c][\x0e-\x20])/', '', $text);
    $search = 'abcdefghijklmnopqrstuvwxyz';
    $search .= 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $search .= '1234567890!@#$%^&*()';
    $search .= '~`";:?+/={}[]-_|\'\\';
    for ($i = 0; $i < strlen($search); $i++) {
    $text = preg_replace('/(&#[x|X]0{0,8}'.dechex(ord($search[$i])).';?)/i', $search[$i], $text); // with a ;
    $text = preg_replace('/(&#0{0,8}'.ord($search[$i]).';?)/', $search[$i], $text); // with a ;
    }
    $ra1 = Array('javascript', 'vbscript', 'expression', 'applet', 'meta', 'xml', 'blink', 'link', 'style', 'alert', 'script', 'embed', 'object', 'iframe', 'frame', 'frameset', 'ilayer', 'layer', 'bgsound', 'title', 'base', 'cookie');
    $ra2 = Array('onabort', 'width', 'height', 'onactivate', 'onafterprint', 'onafterupdate', 'onbeforeactivate', 'onbeforecopy', 'onbeforecut', 'onbeforedeactivate', 'onbeforeeditfocus', 'onbeforepaste', 'onbeforeprint', 'onbeforeunload', 'onbeforeupdate', 'onblur', 'onbounce', 'oncellchange', 'onchange', 'onclick', 'oncontextmenu', 'oncontrolselect', 'oncopy', 'oncut', 'ondataavailable', 'ondatasetchanged', 'ondatasetcomplete', 'ondblclick', 'ondeactivate', 'ondrag', 'ondragend', 'ondragenter', 'ondragleave', 'ondragover', 'ondragstart', 'ondrop', 'onerror', 'onerrorupdate', 'onfilterchange', 'onfinish', 'onfocus', 'onfocusin', 'onfocusout', 'onhelp', 'onkeydown', 'onkeypress', 'onkeyup', 'onlayoutcomplete', 'onload', 'onlosecapture', 'onmousedown', 'onmouseenter', 'onmouseleave', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'onmousewheel', 'onmove', 'onmoveend', 'onmovestart', 'onpaste', 'onpropertychange', 'onreadystatechange', 'onreset', 'onresize', 'onresizeend', 'onresizestart', 'onrowenter', 'onrowexit', 'onrowsdelete', 'onrowsinserted', 'onscroll', 'onselect', 'onselectionchange', 'onselectstart', 'onstart', 'onstop', 'onsubmit', 'onunload');
    $ra = array_merge($ra1, $ra2);
    $found = true;
    while ($found == true) {
    $text_before = $text;
    for ($i = 0; $i < sizeof($ra); $i++) {
    $pattern = '/';
    for ($j = 0; $j < strlen($ra[$i]); $j++) {
    if ($j > 0) {
    $pattern .= '(';
    $pattern .= '(&#[x|X]0{0,8}([9][a][b]);?)?';
    $pattern .= '|(&#0{0,8}([9][10][13]);?)?';
    $pattern .= ')?';
    }
    $pattern .= $ra[$i][$j];
    }
    $pattern .= '/i';
    $replacement = substr($ra[$i], 0, 2).'<x>'.substr($ra[$i], 2);
    $text = preg_replace($pattern, $replacement, $text);
    if ($text_before == $text) {
    $found = false;
    }
    }
    }
    $str = str_ireplace('<script type="text/javascript">','<script type="text/javascript">',$text);
    $str = str_ireplace('<script>','<script>',$text);
    $str = str_ireplace('</script>','</script>',$text);
    $str = str_ireplace('<style>','<style>',$text);
    $str = str_ireplace('<style type="text/css" rel="stylesheet">','<style type="text/css" rel="stylesheet">',$text);
    $str = str_ireplace('<style type="text/css">','<style type="text/css">',$text);
    $str = str_ireplace('</style>','</style>',$text);
    
    
    return($text);
    }