php ile güvenli kod geliştirme

Upload: oggoyalcin

Post on 30-May-2018

240 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/14/2019 Php ile gvenli kod gelitirme

    1/34

    Ar. Gr. Ouzhan YALIN

    ULAK CSIRT

  • 8/14/2019 Php ile gvenli kod gelitirme

    2/34

    erikTemel gvenlik problemi kullancdan

    gelen verilerKullancdan gelen veriler nasl gelir ve bu

    verilere nasl eriilir? Eriim problemleri

    Verilerin kontrol edilmesi Rakamsal deerlerin kontrol URLlerin kontrol IP Email kontrol HTML tipli verilerin kontrol Dosya yollarnn kontrol

  • 8/14/2019 Php ile gvenli kod gelitirme

    3/34

    erik

    Temel saldrlar ve engelleme yollarYant Paralama XSS

    SQL enjeksiyonu Komut Enjeksiyonu Kod Enjeksiyonu

    Ek Bilgi ve neriler Hata Raporlama Veritaban gvenlii

    Soru ve Sorunlar.

  • 8/14/2019 Php ile gvenli kod gelitirme

    4/34

    Verilere eriim

    Kullancdan gelen veriyeeriebilmek iin kullanlan evrensel

    deikenler$_POST

    $_GET

    $_COOKIE$_FILE

    $_SERVER

    $_ENV

    $_REQUEST

  • 8/14/2019 Php ile gvenli kod gelitirme

    5/34

    Eriim Problemleri (RegisterGlobals)

    Sunucu tarafna gelen herhangitipteki (g/p/c) parametre

    deiken olarak kayt edilir.x.php?a=1 $a=1

    Tanmlanmam (un-initalized)deikenler sorun oluturabilir.Nasl m?

  • 8/14/2019 Php ile gvenli kod gelitirme

    6/34

    Eriim Problemleri (RegisterGlobals)

    //Script.php

    if(authenticated_user())

    $authorized=1;if($authorized)

    include(onemliveri.php);

    Script.php?authorized=1 ????

  • 8/14/2019 Php ile gvenli kod gelitirme

    7/34

    Korunma yollar

    Kullanlmas gerekmiyorsa:

    Sunucuda bulunan php.ini dosyas

    ierisinden kapatmakKullanlmas gerekliyse:

    Hata raporlamalarnn kstlanmas

    Tip duyarl karlatrma

    if ($authorized===TRUE) { }

  • 8/14/2019 Php ile gvenli kod gelitirme

    8/34

    Deerlerin kontrol

    Kullanc tarafndan gelen deeritayan deikenlerde bulunma

    olana vereceimiz tipleribelirlemeliyiz.

    Script ya da tag zellikleri ile

    verdiimiz deerlere gvenerekhareket etmemeli bunlar herdurumda kontrol etmeliyiz.

  • 8/14/2019 Php ile gvenli kod gelitirme

    9/34

  • 8/14/2019 Php ile gvenli kod gelitirme

    10/34

    Metinsel Deerler

    Ctype ile metin kontrol

    if (!ctype_alnum($_GET['login']))echo Sadece A-Za-z0-9 olabilir.";

    if (!ctype_alpha($_GET[login']))

    echo Sadece A-Za-z olabilir.";

  • 8/14/2019 Php ile gvenli kod gelitirme

    11/34

    Metinsel Deerler

    Trke dorulama (ereg* - preg*)

    if ( eregi("^[a-z-0-9/_ \.]*$,$_GET['login']))echo Sadece belirli karakterler

    olabilir.";

  • 8/14/2019 Php ile gvenli kod gelitirme

    12/34

    Metinsel Deerler

    Filter_var ile metin kontrol

    filter_var($var,FILTER_VALIDATE_URL);filter_var($var,FILTER_VALIDATE_IP);

    filter_var($var,FILTER_VALIDATE_EMAIL);

    filter var($var,FILTER VALIDATE REGE

  • 8/14/2019 Php ile gvenli kod gelitirme

    13/34

    Dosya yollar

    Kullanc tarafndan gnderilen dosyabilgileri incelenmelidir.

    // http://example.com/script.php?path=../../etc/passwd

    fopen(/anadizin/.$_GET[path], r);

  • 8/14/2019 Php ile gvenli kod gelitirme

    14/34

    Dosya yollar

    nceki slayttaki gibi bir saldrdankorunmak iin :

    $_GET[path] =basename($_GET[path]);

    fopen(/anadizin/.$_GET[path], r);

  • 8/14/2019 Php ile gvenli kod gelitirme

    15/34

    Balk Paralama

    //yonlendir.phpheader(Location:{$_SERVER[HTTP_REFERER]});

    return;

    $_SERVER[HTTP_REFERER] =

    \r\n\r\nBye bye content!;

  • 8/14/2019 Php ile gvenli kod gelitirme

    16/34

    Korunma yolu

    PHPyi en son srmne ykseltin.Yeni srmlerde bir seferde birden

    fazla balk bilgisi gnderilemez.

    Eski srmler iinse \r\n bulunup

    bulunmad kontrol edilebilir.

  • 8/14/2019 Php ile gvenli kod gelitirme

    17/34

    XSS XSS aklar uygulama kullancdan

    veri alp, bunlar herhangi bir kodlamaya da dorulama ilemine tabitutmadan sayfaya gndermesi ile

    oluur.

    XSS saldrgann kurbann taraycsndakullanc oturumlar bilgilerin

    alnmasna, web sitesinin tahrifedilmesine veya solucanyklenmesinesebep olan betik altrmasna izin

    verir .

  • 8/14/2019 Php ile gvenli kod gelitirme

    18/34

    Korunma Yolu

    htmlspecilachars(); ,,,& iaretlerini evirir

    htmlentities(); Html verisi olarak kabul edilen hereyi

    evirir.

    strip_tags();Tag olarak kabul edilen hereyi

    kaldrr.

  • 8/14/2019 Php ile gvenli kod gelitirme

    19/34

    Korunma Yolu

    stenirse strip_tags fonksiyonunun bazhtml taglarn kaldrmamas salanabilir.

    $str=strip_tags($_GET[veri],

    );

  • 8/14/2019 Php ile gvenli kod gelitirme

    20/34

    SQL Enjeksiyonu

    Enjeksiyon saldrlarna, zellikleSQLenjeksiyonu, web sitelerindeska rastlanmaktadr. Enjeksiyon

    kullanc tarafndan alnan verininyorumlaycya komut ya dasorgunun bir paras olarakgnderilmesi durumunda oluur.

    Saldrgann dmanca gnderdiiveriler yorumlaycnn istenmeyenkomutlar altmasna veya veriyideitirmesine sebep olur.

  • 8/14/2019 Php ile gvenli kod gelitirme

    21/34

    SQL Enjeksiyonu naslyaplrEn sk kullanlan sql injection sorgu

    rnei;$strSql=select * from kullanicilar

    where ad=$ad and sifre=$sifre;$ad= or 1=1-- ya da$ad= or 1=1 /* olursa

    $strSql=select * from kullanicilarwhere ad= or 1=1 /* andsifre=$sifre

  • 8/14/2019 Php ile gvenli kod gelitirme

    22/34

    Korunma Yollar

    $ad=mysql_real_escape_string($_GET[ad]);

    $ad=mysql_escape_string($_GET[ad]);

    $ad=pg_escape_bytea($_GET[ad]);

    $ad=pg_escape_string($_GET[ad]);

  • 8/14/2019 Php ile gvenli kod gelitirme

    23/34

    Korunma YollarBurada ne yapacaz;

    //deneme.php

    $id=mysql_real_escape_string($_GET[id]);

    mysql_query(select * from kullanicilarwhere id=$id);

    deneme.php?id=20;delete%20from%20kullanicilar

  • 8/14/2019 Php ile gvenli kod gelitirme

    24/34

    Korunma Yollar

    Peki ya burada?

    //deneme.php

    $id=0xBF . 0x27; //

    $id=mysql_real_escape_string($id); //

  • 8/14/2019 Php ile gvenli kod gelitirme

    25/34

    Korunma Yollar

    Grnen en iyi zm preparedstatements$DB=new PDO();

    $stmt=$DB->prepare(insert into users(ad,sifre) values(:ad,:sifre));

    $ad=asd; $sifre=qwe;

    $stmt->bindparam(:ad,$ad);$stmt->bindparam(:sifre,$sifre);$stmt->execute();

  • 8/14/2019 Php ile gvenli kod gelitirme

    26/34

  • 8/14/2019 Php ile gvenli kod gelitirme

    27/34

    Komut Enjeksiyonu

    $_POST[x]=rm rf /*;

    $_POST[y]=`cat /etc/passwdpublic_html/p.html; echo 65`;

  • 8/14/2019 Php ile gvenli kod gelitirme

    28/34

    Korunma Yollar

    $_POST[x]=rm rf /*;$_POST[y]=`cat /etc/passwdpublic_html/p.html; echo 65`;

    escapeshellarg();

    escapeshellcmd();

  • 8/14/2019 Php ile gvenli kod gelitirme

    29/34

    Kod Enjeksiyonu

    Sebep oluturabilecek noktalar:Include ve require kullanlan yerler.Eval kullanlan yerler.

    include(templates/.$tmpname;//$tmpname=../../../../etc/passwdeval($value=array(doQuery({$id}));

    );//$id=));file_put_contents(exec.php,)

  • 8/14/2019 Php ile gvenli kod gelitirme

    30/34

    Dier neriler

    Hata bildirimiVeritaban gvenlii

  • 8/14/2019 Php ile gvenli kod gelitirme

    31/34

    Hata Bildirimi

    Hata bildirimini kapatmak iinmethodlar:php.ini iinden display_errors=0

    yapmak,Kod iinde

    ini_set(display_errors,false) yapmak,Kod iinde error_reporting(0); yazmak

    Hatalar gelitiriciler iin nemlidir.Bu sebeple bir dosyada loglanmasuygun olabilir.

  • 8/14/2019 Php ile gvenli kod gelitirme

    32/34

    Veritaban gvenlii

    Her vhost iin verilen db ifrelerinivhostlarn sahibine teslim etmekve kiinin bir dosya ierisinde

    tanmlayarak kullanmasnsalamaktansa ifreyi sadece o siteiinde kullanlabilecek ve eriimikstlamayacak ekildeayarlamalyz.

  • 8/14/2019 Php ile gvenli kod gelitirme

    33/34

    Veritaban gvenlii

    /vhmysql/deneme/mysql.cnfmysql.default_host=localhost;mysql.default_user=site;

    mysql.default_password=gizli;

    //httpd.conf

    Include /vhmysql/deneme/mysql.cnf

  • 8/14/2019 Php ile gvenli kod gelitirme

    34/34

    CSIRT yaplan almalar

    Ouzhan [email protected]://viki.csirt.ulakbim.gov.tr

    Kaynaklar; http://ilia.ws/files/phptek2007_security.pd http://ilia.ws/files/phptek2007_secpitfalls. http://www.amazon.com/php-architects-G

    mailto:[email protected]://viki.csirt.ulakbim.gov.tr/http://ilia.ws/files/phptek2007_security.pdfhttp://ilia.ws/files/phptek2007_secpitfalls.pdfhttp://www.amazon.com/php-architects-Guide-PHP-Security/dp/0973862106/ref=sr_1_1?ie=UTF8&s=books&qid=1196330670&sr=8-1http://www.amazon.com/php-architects-Guide-PHP-Security/dp/0973862106/ref=sr_1_1?ie=UTF8&s=books&qid=1196330670&sr=8-1http://ilia.ws/files/phptek2007_secpitfalls.pdfhttp://ilia.ws/files/phptek2007_security.pdfhttp://viki.csirt.ulakbim.gov.tr/mailto:[email protected]