PHP & Ajax İle Güvenli POST İşlemi

PHP & Ajax İle Güvenli POST İşlemi

  • 11,135 Kez Okundu
  • PHP & MySQL
  • 2 Yorum
  • 2018-04-11 16:41:41

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:

<script>


            $("#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
                        }
                    });
            });
        </script>

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...

sefa
@sefa demiş ki ;

Teşekkür ederim işime yaradı

ÖZCAN DOĞAN
@ÖZCAN DOĞAN demiş ki ;

Paylaşım için teşekkürler...

YORUM YAPMAK İSTER MİSİN?

    Sponsor Reklamlar
    Son Yorumlar
    Etiket Bulutu
    C#PopupFormOtomatikProgramBaşlatmaBaşlangıçBasitEkran Koruyucuc#ekran görüntüsümail göndermeexedllbirleştirmekIL MergePhpMSSQL BAĞLANTIGerçekIPRealTextBinaryConvertÇalışmaSüreHesaplamakBulmakCssjQueryHtmlScroll TopYukarı ÇıkOnMinimizeControlBoxSimge DurumunaKüçültInternetGetConnectedStateİnternetBağlantıKontrolŞifre MatikPassword GeneratorHash ŞifrelemeMD5SHA1SHA256SHA384SHA512Asimetrik ŞifrelemeRSASimetrik ŞifrelemeKriptoŞifrelemeAlgoritmaDESRC2RijndaelTripleDESKeyLogKlavye DinleTuş YakalamaGlobal HookDialogResultÇıkış MesajıUyarı MesajıFormClosingMySQLConnector/NetKullanımSoruCheckBoxListViewÇoklu SilmebiosdramexploitkontrolgüvenlikinteljavascriptrowhammerscriptPHPAdmin PanelResponsiveXtbadminFreeÜcretsizWifiWirelessKeysŞifreAnahtarPasswordKablosuz AğDepolamaŞifreler NeredeKablosuz ŞifreAndroidTelefonNasılYazılırProgramlama DiliHesap MakinesiSEONedirNasıl YapılırAnalizGoogleLinkÖzgünMobilKonuResim Robots.txtSite MapŞifreli GirişŞifreli FormŞifre KoymaŞifreli AçılışCompilingDebuggingDerlemeKarma ModMixed ModeApp.ConfigKurbanBayramMübarek OlsunBlogScriptYonetimAdminPanelText EditorMSHTMLEditorYazıDüzenleyiciEasyAppKolayUygulamaÇalıştırmaAkıllı TelefonKlavyeiOSKeyboardEl YazısıCalculatorMyScriptHand WritingDosya YöneticisiFile ExplorerFTPBluetoothRootTask ManagerGörev YöneticisiSystemTargetWeb Application PentestErrorShowHideHataGösterGizlePDOSelectInsertUpdateDeleteConnectSeçimEklemeSilmeGüncellemeMsSQLVeritabanıÇeviriçiDatabaseConverterDbConvertMaskeli IPGerçek IPTarayıcı Tespitİşletim Sistemi TespitTekil Ziyaretçi BilgileriAktif Ziyaretçi BilgileriZiyaretçi SayacıVirüsTemizlemeFirewallServiceSecurityServiceTimeServicePentestGüvenliksızma TestiuniscanwindowslinuxperlDosyaKlasörListelemekFileFolderListInternetDownloadUploadSpeedMonitorServisMsconfigStartupRunServiceIOSMatematikDenklemÇözümKameraKablosuzinternetHotspotPaylaşımAyarlarKaliLinuxSharedTerminalÖsymDuyuruTimeTimeZoneDateZamanTarihdate()time()FreelancerSerbestÇalışanJobsİşlerWebSiteVersionSürümGeçişUbuntuSunucuApachephpinfo()phpversion()FonksiyonHerseyiKopyalacopyallcopySızma TestiSQLMapWindowsPython810HotSpotWi-FiWlannetshhostednetworkAutoWlanJsGeri SayımTextAreaOtomatik KayıtSayacSaniyeCountDownXtbadminV2AjaxJavaScriptNumaraFormatPhoneNumberFormatTelefonNumarasıDebuggerDetectUnpackerDisassemblerSecurityReverseEngineeringAlgorithmMacDKHOSCTFCapture The FlagForensicTriviaIntelligenceCRC32CRYPTPASSWORD_HASHWin10StoreMağazaMicrosoftReInstallWSLPowerShellPOSTCyberSiberAdli BilişimHackerUSBCDLiveToolsBruterNmapMSSQL ServerMS SQL ExpressMS AccessOracleIBM DB2SybaseInterbaseInformixExceldBase DbfVisual FoxProMySQLConnectionŞifreleri BulCMDLaZagneEthernetTuxCutNetCutNetKillPerformansCronTabCronJobRestartStopStartBashShellWireSharkFlagUSOMBTKBase64QRÇözümlerWriteUpWrite-UpFinalReconOSINTToolScannerWebsiteSiber GüvenlikPhishingVPNWannacryMobileDeviceFunctionMobil AlgılaMobil TespitisMobilephp mobilJavascriptYazı EfektKayan YazıText EffectsearchBoxinputclassplaceholdersetIntervalsetTimeoutJSpreventBackwindowpushStatehistoryonloadblock browser back buttonVPN Nediranonimtorucuz ürünucuzurunum.commarket kıyaslaürün kıyaslakıyaslakarşılaştıra101şokhappy centermigroscarrefoursabizim marketkıyasürün fiyatıfiyat kıyaslaucuz fiyatfiyat sorVideoEmbedPlayerVideoIDgetVideoIDIframeCreditCardCard DetectKart AlgılaKart TespitKredi Kartı TespitVisaMastercardAIOpenAIChatGPTYapay Zekaquickchatkrispbeatovencleanvoicepodcastleflairillustrokepatternedstockimgcopymonkeyocoyaunbouncevidyotrymaverickquickchatpuzzlelabssounddrawcleanupresumewordedlookatheresanaiforthatsynthesiadescriptotterinkforall