• 21-04-2021, 23:27:48
    #1
    Merhabalar, php bir resim apisi kodladım sql açığı şüphesinden dolayı şuan için linki paylaşamıyorum ancak ?username=AndMex' yazdığımda yani geçerli olan kullanıcı adının sonuna tırnak işareti eklediğimde aşağıdaki hatayı alıyorum. Sizce bu açık yaratır mı? ve nasıl engelleyebilirim?

    Şimdiden teşekkürler.

    Hata :
    SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''AndMex''' at line 1
  • 21-04-2021, 23:28:31
    #2
    Get ile çektiriyorum veriyi
  • 21-04-2021, 23:29:01
    #3
    Evet bu bir açık, veriyi direkt sorguya atamayın önce sanitize(sterilize) edin, mysqli mi kullanıyorsunuz?
  • 21-04-2021, 23:31:18
    #4
    ahmetkucukonder adlı üyeden alıntı: mesajı görüntüle
    Evet bu bir açık, veriyi direkt sorguya atamayın önce sanitize(sterilize) edin, mysqli mi kullanıyorsunuz?
    santize olayı nasıl yapılır ? kodum aşağıdaki gibi, mysqli değil mysql kullanıyorum hocam. Teşekkürler

    Kodum :

    <?php
    try {
        $baglanti = new PDO("mysql:host=localhost;dbname=SANSÜR", "SANSÜR", "SANSÜR");
        $baglanti->exec("SET NAMES utf8");
        $baglanti->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $sorgu = $baglanti->query("SELECT * FROM wo_users WHERE username = '".htmlspecialchars($_GET["username"])."'");
        $cikti = $sorgu->fetch(PDO::FETCH_ASSOC);
        if($cikti == null){
            $cikti['avatar'] = "upload/photos/meetweb-circle.png";
            
        }
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, "https://SANSÜR/".$cikti['avatar']);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
        curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4389.208 Safari/537.36");
        $resim = curl_exec($ch);
        curl_close($ch);
        header("Content-Type: image/png");
        echo $resim;
        exit;
    } catch (PDOException $e) {
        die($e->getMessage());
    }
    $baglanti = null;
    ?>
  • 21-04-2021, 23:31:49
    #5
    Merhaba,
    Bu konu hakkında paylaştığımız döküman size yardımcı olucaktır: https://obir.ninja/guvenlik/01/php-p...ion-guvenligi/
    Güvenle kalın.
  • 21-04-2021, 23:32:58
    #6
    PHP & Flutter & Laravel
    https://gonotes.me/cleanxss buradaki gibi bir fonksiyon kullanabilirsiniz GET değerleriyle işlem yapmadan önce
  • 21-04-2021, 23:33:26
    #7
    Kimlik doğrulama veya yönetimden onay bekliyor.
    Merhaba sorgulara direkt değer vermek yerine; bir önceki adımda doğrulama ve bir referans adresine atama yapılır ve sorgu oluşturulur ise daha güvenli bir get isteği olacaktır.
  • 21-04-2021, 23:35:26
    #8
    murkrow adlı üyeden alıntı: mesajı görüntüle
    Merhaba sorgulara direkt değer vermek yerine; bir önceki adımda doğrulama ve bir referans adresine atama yapılır ve sorgu oluşturulur ise daha güvenli bir get isteği olacaktır.
    aksoyhlc adlı üyeden alıntı: mesajı görüntüle
    https://gonotes.me/cleanxss buradaki gibi bir fonksiyon kullanabilirsiniz GET değerleriyle işlem yapmadan önce
    T13R adlı üyeden alıntı: mesajı görüntüle
    Merhaba,
    Bu konu hakkında paylaştığımız döküman size yardımcı olucaktır: https://obir.ninja/guvenlik/01/php-p...ion-guvenligi/
    Güvenle kalın.
    Hepinize teşekkür ederim, peki bu kod üzerinde nasıl bir şeyler yapabiliriz? düzenleyip yardımcı olabilir misiniz rica etsem?

    Kod :

    <?php
    try {
        $baglanti = new PDO("mysql:host=localhost;dbname=SANSÜR", "SANSÜR", "SANSÜR");
        $baglanti->exec("SET NAMES utf8");
        $baglanti->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $sorgu = $baglanti->query("SELECT * FROM wo_users WHERE username = '".htmlspecialchars($_GET["username"])."'");
        $cikti = $sorgu->fetch(PDO::FETCH_ASSOC);
        if($cikti == null){
            $cikti['avatar'] = "upload/photos/meetweb-circle.png";
            
        }
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, "https://SANSÜR/".$cikti['avatar']);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
        curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4389.208 Safari/537.36");
        $resim = curl_exec($ch);
        curl_close($ch);
        header("Content-Type: image/png");
        echo $resim;
        exit;
    } catch (PDOException $e) {
        die($e->getMessage());
    }
    $baglanti = null;
    ?>
  • 21-04-2021, 23:36:51
    #9
    PDO kullanıyorsunuz bu oldukça güvenli bir çatı fakat kullanımınız yanlış. Dışarıdan veri alırken query'e atamayın, önce veriyi sanitize edin daha sonra sorguyu prepare edin ardından veriyi bind param ile tür beslemesi yaparak sorguya atayın execute edin.

    Kendinize sanitize için bir fonksiyon oluşturun.
    function clean_data($data) {
    $data = trim($data);
    $data = htmlspecialchars($data);
    return $data;
            }
    $username = clean_data($_GET["username"]);
    $sorgu = $baglanti->prepare("SELECT * FROM wo_users WHERE username = :username");
    $sorgu->bindParam(':username', $username, PDO::PARAM_STR);
    $sorgu->execute();
    $cikti = $sorgu->fetch(PDO::FETCH_ASSOC);