• 11-04-2018, 23:53:39
    #1

    Projelerimizi Daha Dinamik Tasarlayabilmek İçin Ajax Kullanabiliyoruz. Peki Kullandığımız POST İşlemini Nasıl Daha Güvenli Hale Getirebiliriz Buyrun Birlikte İnceleyelim.
    Küçük bir örnek üzerinde açıklamak isterim. Bunun için 3 input ve 1 buton kullanacağım.
    HTML Tarafındaki Yapımız:
    <form id="Form1">
            <input id="Deger1" name="Deger1" />
            <input id="Deger2" name="Deger2"/>
            <input id="Deger3" name="Deger3"/>
            <button id="Gonder">Gönder</button>
    </form>
    JavaScript Tarafındaki Yapımız:

                $("#Gonder").click(function () {
                    /*
                    //*****************************************
                    if ($(Form1.Deger1).val() == "") {
                        alert("Lütfen Değer 1 Boş Bırakmayınız");
                        return;
                    }
                    if ($(Form1.Deger2).val() == "") {
                        alert("Lütfen Değer 2 Boş Bırakmayınız");
                        return;
                    }
                    if ($(Form1.Deger3).val() == "") {
                        alert("Lütfen Değer 3 Boş Bırakmayınız");
                        return;
                    }
                    var FormPost = $("#Form1").serialize();
                    var DataPost=FormPost + "&&Islem=Kayit";
                    */
                    //*****************************************
                    //veya
                    //*****************************************
                    var PostDegeri1=$("#Deger1").val();
                    var PostDegeri2=$("#Deger2").val();
                    var PostDegeri3=$("#Deger3").val();
                    if (PostDegeri1 == "") {
                        alert("Lütfen Değer 1 Boş Bırakmayınız");
                        return;
                    }
                    if (PostDegeri2 == "") {
                        alert("Lütfen Değer 2 Boş Bırakmayınız");
                        return;
                    }
                    if (PostDegeri3 == "") {
                        alert("Lütfen Değer 3 Boş Bırakmayınız");
                        return;
                    }
                    var DataPost={Deger1:PostDegeri1,Deger2:PostDegeri2,Deger3:PostDegeri3,Islem:"Kayit"};
                    //*****************************************
                    $.ajax(
                        {
                            url: "Test.php",
                            type: "POST",
                            data: DataPost,
                            success: function (Sonuc) {
                                console.log(Sonuc);
                                try{
                                    Sonuc=JSON.parse(Sonuc);
                                    var Basarisiz = Sonuc.Basarisiz;
                                    var Basarili = Sonuc.Basarili;
                                    if (Basarili) {
                                        alert(Basarili);
                                        //İstenilen Başarılı Mesaj Geldiğinde Yapılacak İşlemler
                                    } else if(Basarisiz){
                                        alert(Basarisiz);
                                        //İstenilen Başarısız Mesaj Geldiğinde Yapılacak İşlemler
                                    }else{
                                        console.log(Sonuc);
                                        //Başarılı veya Başarısız Mesaj Geldiğinde Yapılacak İşlemler
                                    }
                                }catch (e){
                                    console.log(e+" Hata Oluştu..");
                                }
                            },
                            error: function (Sonuc) {
                                console.log(Sonuc);
                                //POST İşlemi Başarısız Olduğunda Yapılacak İşlemler
                            }
                        });
                });
    Burada iki türlü kullanım gösterdim hangisini kullanacağınız farketmez , lakin form verileriniz çok fazla olursa her birini tek tek yazmak zahmetli gelebilir o yüzden serialize yapıp göndermeniz pratiklik açısından daha iyi olur.
    index veya login Sayfasına oturum açma işlemi başarılı olduğu zamanki duruma aşağıdaki kodu ilave etmelisiniz.
    $_SESSION['Token'] = md5($_SERVER['HTTP_USER_AGENT']. "mtlive".$_SERVER['PHPSESSID']);
    //Oturum Açılırken Kaydı Yapılmalı(login başarılı olduğunda)
    SistemAyarlari.php Adında yapılandırma ayarlarımızın bulunduğu bir dosya oluşturalım , İçerisine ilave olarak aşağıdaki kodları ekleyebilirsiniz.
    $ServerName = "mucahittopal.com";
    //Buradaki Değişken Hangi Domain içinde Çalışıyorsanız Onu Yazmalısınız, Böylece Dışarıdan Gelen POST İşlemlerini Engellenebilir.
     
    $Token = md5($_SERVER['HTTP_USER_AGENT']. "mtlive".$_SERVER['PHPSESSID']);
     
     
    //SistemAyarlari.php İçine İlave Edilmeli
    Test.php Dosyasının içine aşağıdaki kodları yazabilirsiniz.
    session_start();
    $SonucArray = [];
    $UserID = $_SESSION['UserID'];
    $KayitliToken = $_SESSION['Token'];
    if (empty($UserID)) {
        header('location: /index.php');
    } else {
        require_once 'SistemAyarlari.php';
        if ($KayitliToken == $Token) {
            if (is_numeric($UserID)) {
                if ($_POST) {
                    if ($_SERVER['REQUEST_METHOD'] === 'POST') {
                        if (!empty($_SERVER['HTTP_X_REQUESTED_WITH'])) {
                            if (strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
                                if (isset($_SERVER['HTTP_REFERER'])) {
                                    if ($ServerName == $_SERVER['SERVER_NAME']) {
                                        $Islem = $_POST['Islem'];
                                        if ($Islem == "Kayit") {
                                            $Deger1 = $_POST["Deger1"];
                                            $Deger2 = $_POST["Deger2"];
                                            $Deger3 = $_POST["Deger3"];
     
                                            //Gerekli İşlemlerimizi Yapıyoruz
                                            //Örnek Sonuç Üretelim
                                            if (1 === 1) {
                                                $SonucArray["Basarili"] = "İşlem Başarılı..!";
                                            } else {
                                                $SonucArray["Basarisiz"] = "İşlem Başarısız..!";
                                            }
                                        } else {
                                            $SonucArray["Basarisiz"] = "İşlem Değişkeni Kayit a Eşit Değil..!";
                                        }
                                    } else {
                                        $SonucArray["Basarisiz"] = "Sunucu Adı Doğru Değil..!";
                                    }
                                } else {
                                    $SonucArray["Basarisiz"] = "Yönlendiren Sayfa Yok..!";
                                }
                            } else {
                                $SonucArray["Basarisiz"] = "Gelen İstek Ajax Değeri Değil..!";
                            }
                        } else {
                            $SonucArray["Basarisiz"] = "Kullanılabilir Bir İstek Yok..!";
                        }
                    } else {
                        $SonucArray["Basarisiz"] = "İstek Metodu POST Değil..!";
                    }
                } else {
                    $SonucArray["Basarisiz"] = "Sayfaya Gönderilen POST Mevcut Değil..!";
                }
            } else {
                $SonucArray["Basarisiz"] = "Kullanıcı Oturumu Numara Değil";
            }
        }else{
            $SonucArray["Basarisiz"] = "Doğru Güvenlik Kontrolüne Sahip Değilsiniz..!";
        }
        print_r(json_encode($SonucArray));
    }
    Kodları tek tek açıklama gereği duymuyorum , zaten else durumlarındaki açıklamalar yeterli bilgiyi veriyor diye düşünüyorum.
    Eksiğim veya hatam varsa lütfen yorumlarda belirtiniz.
    Umarım Faydalı Olur.
    Sevgiyle Ve Bilgiyle Kalın...

    Konunun Orjinal Linki
  • 12-04-2018, 00:16:43
    #2
    if($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest'){
    // İstek var ise burası
    } else {
    // istek yok ise yönlendir. veya kilitle
    }
    bu şekilde de ajax isteği olup olmadığına da bakılabilir ek olarak buna token vs gibi kontroller yapılabilir sizin kodlar çok kalabalık geldi nedense fakat yinede yararlı konu
  • 12-04-2018, 01:12:37
    #3
    D62 adlı üyeden alıntı: mesajı görüntüle
    if($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest'){
    // İstek var ise burası
    } else {
    // istek yok ise yönlendir. veya kilitle
    }
    bu şekilde de ajax isteği olup olmadığına da bakılabilir ek olarak buna token vs gibi kontroller yapılabilir sizin kodlar çok kalabalık geldi nedense fakat yinede yararlı konu
    Bahsettiğiniz şekilde de kullandım tabiki ama yeterli olmayabiliyor diğer kodları da incelerseniz demek istediğimi daha iyi anlarsınız , hepsi kullanılmak zorunda değil ama güvenlik önemli ;-)
  • 12-04-2018, 01:17:27
    #4
    mtlive adlı üyeden alıntı: mesajı görüntüle
    Bahsettiğiniz şekilde de kullandım tabiki ama yeterli olmayabiliyor diğer kodları da incelerseniz demek istediğimi daha iyi anlarsınız , hepsi kullanılmak zorunda değil ama güvenlik önemli ;-)
    yalnız yazmış olduğum cevaba dikkat etmemişsiniz , ek önlemler vs alınabilir demiştim o kısmı net okumadınız sanırım.

    şu şekilde kullanmak yerine ;
    if (!empty($_SERVER['HTTP_X_REQUESTED_WITH'])) {
                            if (strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
    şu şekilde daha kısa kullanılabilir demek istedim ek önlemler ile , konu faydalı yinede emeğinize sağlık
    if($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest'){ }
  • 12-04-2018, 06:26:07
    #5
    Üyeliği durduruldu
    80 tane if açmaya gerek yok, kod çöplüğü olmuş
  • 12-04-2018, 14:23:59
    #6
    Tabiki haklısınız bu kadar if kullanmaya gerek yok 2 tane if ile de yeterli güvenlik alınabilir. Lakin ben burada olabildğimce geniş anlatımda bulundum ki isteyen istediği gibi sadeleştirip kullanabilsin.
  • 12-04-2018, 23:09:02
    #7
    Paylaşım ve yardımlaşma için tebrik ve teşekkürlerimi sunarım.

    if şu şekilde kullanılırsa daha iyi olur kanısındayım.

    if($a!=$b || $c=='blabla' && isset($d)){
    //işlem yapılır.
    }else{
    echo "Eksik veya hatalı parametre mevcut."
    }
  • 12-04-2018, 23:38:00
    #8
    CoLLeR adlı üyeden alıntı: mesajı görüntüle
    Paylaşım ve yardımlaşma için tebrik ve teşekkürlerimi sunarım.

    if şu şekilde kullanılırsa daha iyi olur kanısındayım.

    if($a!=$b || $c=='blabla' && isset($d)){
    //işlem yapılır.
    }else{
    echo "Eksik veya hatalı parametre mevcut."
    }
    Kullanırken bende o şekilde kullanmaya çalışıyorum lakin rahat anlaşılması için bu şekilde açık yazma gereği duydum
  • 13-04-2018, 01:37:43
    #9
    Güzel bir konu olmuş ellerine sağlık