folder Tahribat.com Forumları
linefolder Asp - Php - Cgi - Perl
linefolder Doğru-Yanlış Kendi Yaptığım İlk Signup.Php



Doğru-Yanlış Kendi Yaptığım İlk Signup.Php

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    kofcu
    kofcu's avatar
    Kayıt Tarihi: 29/Ağustos/2014
    Erkek

    merhaba arkadaşlar geçende Webmatrix kurmaya çalışıp kuramamıştım sonrasında webmatrix'ten vazgeçip çok güzel kral sade temiz XAMPP i öğrendim müritlerimizden ve onu kurdum.

    kendi kendime denemelerimi yapabiliyorum artık.

    php konusunda anlayamadığım yerler var özellikle error handling ve exception konusu

    derslerini aldığım yerde bunları çok detaylı anlatmadılar(ya da ben anlamadım) (w3schools)

    her neyse buna rağmen ben kendi kendime yapmaya çalıştığım bir deneme sistem var

    sınıf listesi, notları görme, not girme vesaire gibi şeyler ile kayıt ol, oturum aç.

     

    kayıt ol kısmını yaptım aklımda bazı sorular oluştu ama bu soruları sorarken yaptığımı da göstereyim dedim bir video çektim

    video:

    https://youtu.be/1vAtq3nL8fc

    özetle: signup.html ile form oluşturdum post metodu ile signup.php'ye koydum onun da bu bilgileri database e koymasını ve bizi bir yere yönlendirmesini istedim.

    sorumsa: bu signup.php'de $_POST["kul_adi"] şeklinde çekiyorum veriyi fakat böyle yazınca nereden post gelse veriyi çekiyor o isimde. yani bi adam istese herhangi bir yerden database e istediğini koyabilir. bunu engellemek için ne yapacağımı bilemediğimden kendimce koca bir if açtım ve if(istediğim yer) ise kodları çalıştır değilse çalıştırma gibi bir şey yaptım. doğru bir yöntem midir nasıldır bilemedim ama bir sorayım dedim.

    gereksiz bir soru sorduysam affola. esasen kendi çözümüm de hoşuma gitti onu da göstermek istedim :)

    signup.php kodlarım şöyle:

    <?php
    if($_SERVER['HTTP_REFERER']=="http://localhost:90/mysql%20-%20php%20deneme/signup.html"){
    $host = "127.0.0.1";
    $username = "co";
    $password = "123456";
    $dbname = "ilkdeneme";
    $table = "uyeler";
    
    if($_SERVER["REQUEST_METHOD"] == "POST"){
    $kul_adi = $_POST["kul_adi"];
    $pass = $_POST["pass"];
    
    try{
    	// burada connection kuruluyor
    	$conn = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
    		// burada exeption kodları var ne olduğunu bilmiyorum
    		$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    	// sql sorgumu yazıyorum
    	$sql = "Insert Into $table ()
    		VALUES('', '$kul_adi', '$pass')";
    	$conn->exec($sql);
    	// olay bittiğinde olacağı yazıyorum
    	header("Location: afarim.html");
    	die();
    }
    
    // burada exeption catch kodları var yine ne olduğunu tam bilmiyorum
    catch(PDOException $e)
        {
        echo $sql . "<br>" . $e->getMessage();
        }
    
    // burada connection'ı kaldırdık
    $conn = null;
    }
    } else {
    	print "hek mi yapcan la?";
    }
    ?>

     bu arada tagler(forumdaki) kod içeriğini biraz bozmuş. şeyhimize geribildirim olsun buradan :)

    kofcu tarafından 27/Tem/15 00:48 tarihinde düzenlenmiştir

    ben de sevgiden yanayım...
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    DrKill
    DrKill's avatar
    Kayıt Tarihi: 10/Mart/2004
    Erkek

    Hocam kayıt formunda şifre "pass" hanesine şunu yazarsak muhtemelen script sıçar.

     

    '); DROP TABLE uyeler; --

     

     

    PDO bind param ile prapared statement'ları kullanmalısın hocam.

     

    XSS içinde htmlspecialchars vardı sanırım onu kullanabilirsin.

     

    Fazla bakamadım kodlara, başka arkadaşlar yardımcı olur eksik söylediğim yerlerde. İyi akşamlar


    Bu imzayı her gördüğünüzde 4gb kotanızın 0,00000358559191226959228515625 azalmaktadır. Bilerek ve istenerek bu imza yapılmıştır. Amaç kotanızı sömürmektir
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    kofcu
    kofcu's avatar
    Kayıt Tarihi: 29/Ağustos/2014
    Erkek

    hehhheh :) evet doğru diyorsun. haberim var aslında bu tarz şeylerden kursta söylemişlerdi. aklımdaydı ama soruyu sormak için yazdım bu sayfayı ondan hiçbir şeye dikkat etmedim.

    doğru onları kullansam iyiydi sonuçta sorumu anlatmak için deneme de yazmış olsam düzgün bir script yazmam bende düzgün bir alışkanlık oluşturacaktır.

    onun dışında  PDO bindparam'ı bilmiyorum. esasen PDO hakkında hiçbir şey bilmiyorum. sanırım en önemli kısımlardan biri ama w3schools çok yüzeysel geçmiş.

    php.net deki dökümantasyonu okusam mı diye düşündüm aslında sağlam öğrenmek için ama yaz bitince zaten artık bakamayacağım için o kadar zamanım yok.

    o yüzden deneme-yanılma, ihtiyaç-sonuç, beyin fırtınası gibi ilerlemye karar verdim biraz buradaki mürit kardeşlerimin başını ağrıtmış olacağım belki istemeyerek onun için kusura bakmayın.

    ama her şeyi de direk sormuyorum önce bir araştırma yapıyorum tabi o kadar da değil, tembellik olmuş olur..


    ben de sevgiden yanayım...
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    DrKill
    DrKill's avatar
    Kayıt Tarihi: 10/Mart/2004
    Erkek

    Hocam o zaman

    XSS nedir, neden oluşur? Nasıl önlem alınır bir araştır.

    SQL İnjection nedir nasıl önlem alınır onuda araştır hocam.

     

    Şimdilik bunları öğrensen yeter. İleride LFI, CSRF felan araştırsan yeter.

    Kolay gelsin.

     

    Bu arada bana kalırsa onlarca zamandır php kullanmış biri olarak kurumsal amaçlı kullanacaksan PHP'yi öğrenmeni tavsiye etmem. Özellikle takım çalışmasında.

    Tek sebebim kod okunabilirliği ve spagetti kod hocam. Standartları o kadar esnek ki herkes kafasına göre yazabilir. Yoksa hız konusunda felan (kasımdaki PHP 7 ile derlenebilir olacak) çoğu web tabanlı dile on basabilir.

     

    ASP.NET MVC

    ya da

    JAVA JSP JSF felan öğren hocam.

    Ama hobi amaçlı ve tek kişilik çalışacaksan kesinlikle PHP ye devam et derim.

     

    DrKill tarafından 26/Tem/15 21:58 tarihinde düzenlenmiştir

    Bu imzayı her gördüğünüzde 4gb kotanızın 0,00000358559191226959228515625 azalmaktadır. Bilerek ve istenerek bu imza yapılmıştır. Amaç kotanızı sömürmektir
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    wert
    wert's avatar
    Kayıt Tarihi: 19/Eylül/2005
    Erkek

    tam emin olmamakla birlikte ve güvenmemen gerektiğini düşünerekten

    <?php
    
    if($_SERVER['HTTP_REFERER']=="http://localhost:90/mysql%20-%20php%20deneme/signup.html"){
    
    $host = "127.0.0.1";
    
    $username = "co";
    
    $password = "123456";
    
    $dbname = "ilkdeneme";
    
    $table = "uyeler";
    
     
    
    if(($_SERVER["REQUEST_METHOD"] == "POST") && ($_SERVER['HTTP_REFERER']== "http://www.busayfadan.com/gelenpostlarıkabulet.php")){
    
    $kul_adi = $_POST["kul_adi"];
    
    $pass = $_POST["pass"];
    
     
    
    try{
    
        // burada connection kuruluyor
    
        $conn = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
    
            // burada exeption kodları var ne olduğunu bilmiyorum
    
            $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    
        // sql sorgumu yazıyorum
    
        $sql = "Insert Into $table ()
    
            VALUES('', '$kul_adi', '$pass')";
    
        $conn->exec($sql);
    
        // olay bittiğinde olacağı yazıyorum
    
        header("Location: afarim.html");
    
        die();
    
    }
    
     
    
    // burada exeption catch kodları var yine ne olduğunu tam bilmiyorum
    
    catch(PDOException $e)
    
        {
    
        echo $sql . "
    " . $e->getMessage();
    
        }
    
     
    
    // burada connection'ı kaldırdık
    
    $conn = null;
    
    }
    
    } else {
    
        print "hek mi yapcan la?";
    
    }
    
    ?>
    
    
    
     
    
    


    wert tarafından 27/Tem/15 00:22 tarihinde düzenlenmiştir

    |sadece aptalların başarısı ders notu ile ölçülür|
  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    pSkpt
    pSkpt's avatar
    Kayıt Tarihi: 10/Aralık/2010
    Erkek

    HTTP_REFFERER'a güvenme CURL ile istediğimi yazdırırım.

    PHP XSRF Protection diye arat güvenlikle alakalı bilgi bulursun.

    Böyle basitten başlayarak uygulamalar yaparak geliştirirsin zaten kendini devam et. :)


    İmza...
  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    kvasir
    kvasir's avatar
    Kayıt Tarihi: 24/Ağustos/2005
    Erkek

    Postla alma filter_inputla al.

  8. KısayolKısayol reportŞikayet pmÖzel Mesaj
    kofcu
    kofcu's avatar
    Kayıt Tarihi: 29/Ağustos/2014
    Erkek

    ------------------------------------------------------------

    DrKill 

    ------------------------------------------------------------

    ***PDO bind param ile prapared statement'ları kullanmalısın hocam.

    -öğrenmiştim ama önemini yeni kavradım hocam SQL injection için uygunmuş sanırım

     

    Prepared statements basically work like:

    1.prepare

    2.optimize

    3.execute

     

    have two main advantages:

    1.reduces parsing time

    2.minimize bandwidth to the server(çünkü sorguyu 1 kere çekiyor sonra sadece parametre çekiyor)

    3.very useful against SQL injections

     

    Yapılışı: connection'ı kurduktan sonra

    1.$stmt = $conn->prepare("INSERT INTO $table() VALUES ('', :kul_adi, :pass)");

    2.$stmt->bindparam(':kul_adi', $kul_adi);$stmt->bindparam(':pass', $pass);

    3.$stmt->execute();

     

    ***XSS içinde htmlspecialchars vardı sanırım onu kullanabilirsin.

    -bunun için de postu böyle aldım

    $kul_adi = htmlspecialchars($_POST["kul_adi"]);

    $pass = htmlspecialchars($_POST["pass"]);

     

    ***Fazla bakamadım kodlara, başka arkadaşlar yardımcı olur eksik söylediğim yerlerde. İyi akşamlar

    teşekkür ederim iyi günler :)

     

     

    ***XSS nedir, neden oluşur? Nasıl önlem alınır bir araştır.

    -cross side scripting için girişleri kontrol ettim $_SERVER["php_SELF"] gibi global variablellara htmlspecialchars uyguladım

     

    ***SQL İnjection nedir nasıl önlem alınır onuda araştır hocam.

    -prepared statements kullandım bunun için

     

    ***Şimdilik bunları öğrensen yeter. İleride LFI, CSRF felan araştırsan yeter.

    -LFI: Local File Input bi de RFI: Remote File Input varmış ama bu artık popüler değilmiş. Bu tür açıklar, Scriptte sayfa include edilirken, include edilecek sayfanın, kullanıcının müdahale edebildiği veriler üzerinden tanımlanmasından kaynaklanırmış. cross site scripting e benzettim. 

    CSRF: Cross Site Request Forgery. seasurf diyorlarmış bir de neden anlamadım ama bu benim ilk sorduğum soru ve çözümüm şimdi öğrendiğim kadarıyla buna örnekmiş :)

    korunmak için 4 şey söylemişler

    1. http-refferer kullanın. benim bilmeden yaptığım ama pSkpt müridin güvenilir olmadığını söylediği

    2. geti uygunsuz yerlerde kullanma(eh düşünülmesi gereken bir şey zaten)

    3. post kullan

    4. hidden değer gönder gibi bir şey demiş şöyle de bir kod vermiş ama anlamadım

    <form ...>

    <input type="hidden" name="csrf value"value="8dcb5e56904d9b7d4bbf333afdd154ca">

     

    ***Bu arada bana kalırsa onlarca zamandır php kullanmış biri olarak kurumsal amaçlı kullanacaksan PHP'yi öğrenmeni tavsiye etmem. Özellikle takım çalışmasında.

    Tek sebebim kod okunabilirliği ve spagetti kod hocam. Standartları o kadar esnek ki herkes kafasına göre yazabilir. Yoksa hız konusunda felan (kasımdaki PHP 7 ile derlenebilir olacak) çoğu web tabanlı dile on basabilir.

    ASP.NET MVC

    ya da

    JAVA JSP JSF felan öğren hocam.

    Ama hobi amaçlı ve tek kişilik çalışacaksan kesinlikle PHP ye devam et derim.

    -hobi sayılır hocam malesef. kendi kendime 2 yazdır web programlama öğrenmeye çalışıyorum. HTML, CSS, Javascript, SQL, PHP şeklinde gittim. Çok sağlam profesyonel bir şekilde öğrendim sayılmaz zaten sorular soruyorum görüyorsun, ama işte öyle en azından adım atabilecek kadar kafa yorabilecek kadar öğrendim. eksiklerimi de pratik yapa yapa tamamlarım diye düşünüyorum.

     

    ------------------------------------------------------------

    wert 

    ------------------------------------------------------------

    -17. satırındaki  ($_SERVER['HTTP_REFERER']== "http://www.busayfadan.com/gelenpostlarıkabulet.php")){ kısmını anlamadım hocam

     

    ------------------------------------------------------------

    pSkpt 

    ------------------------------------------------------------

    ***HTTP_REFFERER'a güvenme CURL ile istediğimi yazdırırım.

    -CURL ü de duydum ama şimdilik bana biraz uzak bir alan. referer a güvenmeyeceksem ne yapmalıyım bilemedim. ama bunu dediğin için http refferer'ı da htmlspecialchars()dan geçirdim. napsam acaba tüm sayfayı baştan aşağı bir htmlspecialcharstan mı geçirsem güvenli olsun diye? :)

     

    PHP XSRF Protection diye arat güvenlikle alakalı bilgi bulursun.

    arattım. buldum. aynı şeyden bahseden diğer müride cevap olarak yazdım.

     

    Böyle basitten başlayarak uygulamalar yaparak geliştirirsin zaten kendini devam et. :)

    teşekkür ederim bu yolda devam ediyorum bir süre daha :)

     

    ------------------------------------------------------------

    kvasir 

    ------------------------------------------------------------

    ***Postla alma filter_inputla al.

    -onu beceremedim syntax hatası alıyorum nereyi yanlış yaptım bilemedim. o yüzden yine postla aldım ama htmlspecialchars() dan geçirdim. syntax hatası aldığım halini koddan silmedim bir kontol edebilir misin?

     

    ------------------------------------------------------------

     

    -> ve => ve :: ne ayak? derslerde kullanıldı ama hiç demediler bu demek falan diye

    notepad++ adam! adam! elektrik gitti sabah ama yazdıklarımı kurtardı

    validate data kısmını hem MySQL'den hem php'den hem de html üzerinde javascript ile yapmayı planlıyorum? nasıl olur?

    die(); anlamı ve kullanım alanları nedir? dışardan görüp almıştım orada yazdığı için koduma ekledim

    cookie kopyalasam şifreler de gelir mi? yani birinin cookie dosyalarını kopyalasam kendi cookielerime yapıştırsam sonra gelsem mesela facebook a girsem onun oturumu açılır mı?

    html purifier en iyisi diyorlar validate and sanitize için?

     

    <?php
    /*function shield($data) {
      $data = trim($data);
      $data = stripslashes($data);
      $data = htmlspecialchars($data);
      return $data;*/
    //bu fonksiyonu(ya da benzerini)bu sayfada hiç kullanmadım ama kullansam mı diye düşündüm
      
    if(htmlspecialchars($_SERVER['HTTP_REFERER'])=="http://localhost:90/mysql%20-%20php%20deneme/signup.html"){
    $host = "127.0.0.1";
    $username = "co";
    $password = "123456";
    $dbname = "ilkdeneme";
    $table = "uyeler";
    
    if($_SERVER["REQUEST_METHOD"] == "POST"){
    $kul_adi = htmlspecialchars($_POST["kul_adi"]);
    $pass = htmlspecialchars($_POST["pass"]);
    
    /* filter input syntax error alıyorum yardım.
    $kul_adi = filter_input(INPUT_POST, 'kul_adi', FILTER_SANITIZE_SPECIAL_CHARS];
    $pass = filter_input(INPUT_POST, 'pass', FILTER_SANITIZE_SPECIAL_CHARS];
    üsttekileri iptal edip çalıştırdım olmadı üsttekileri de aktif ettim olmadı
    üsttekileri aktif edip farklı isim verdim filter input a da o isimle koydum olmadı*/
    
    try{
    	// burada connection kuruluyor
    	$conn = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
    		// burada exeption kodları var hala ne olduğunu tam bilmiyorum
    		$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    					/*artık sql sorgumu yazmıyorum prepared statement a geçtim ^^
    					// sql sorgumu yazıyorum
    					$sql = "Insert Into $table ()
    						VALUES('', '$kul_adi', '$pass')";
    					$conn->exec($sql);
    					*/
    	//ps1 prepare prepared statements
    	$stmt = $conn->prepare("INSERT INTO $table() VALUES ('', :kul_adi, :pass)");
    	//ps2 bind parameters
    	$stmt->bindparam(':kul_adi', $kul_adi);
    	$stmt->bindparam(':pass', $pass);
    	//ps3
    	$stmt->execute();
    	// olay bittiğinde olacağı yazıyorum
    	header("Location: afarim.html");
    	die();
    }
    
    // burada exeption catch kodları var yine ne olduğunu tam bilmiyorum
    catch(PDOException $e)
        {
        echo /*$stmt . */"<br>" . $e->getMessage();
        }
    
    // burada connection'ı kaldırdık
    $conn = null;
    }
    } else {
    	print "hek mi yapcan la?";
    }
    ?>

     

    kofcu tarafından 28/Tem/15 14:14 tarihinde düzenlenmiştir

    ben de sevgiden yanayım...
  9. KısayolKısayol reportŞikayet pmÖzel Mesaj
    kofcu
    kofcu's avatar
    Kayıt Tarihi: 29/Ağustos/2014
    Erkek

    LAAAAAAN :D parantez kapatmayı unutmuşum filter_input'ta syntax hatası almamın nedenini şimdi attığım cevabı okurken fark ettim :D

    neyse yine de sormuş olayım htmlspecialchars() or filter_input?

    şimdi de gördüm ki parantez kapatmayı unutmamışım düz parantez yerine köşeli parantez ile kapatmışım şift yerine alta basmışım yani :S :)

    kofcu tarafından 28/Tem/15 14:21 tarihinde düzenlenmiştir

    ben de sevgiden yanayım...
Toplam Hit: 1244 Toplam Mesaj: 9
üyelik sistemi php_ signup_