Possibile inserimento in PHP DOP

-1

Esperto afferma che il PDO è uno degli script sicuri di mysql injection. Ho letto il manuale e faccio qualche piccola ricerca. E qui, sto cercando di ottenere il valore ID dal parametro URL, come in:

<?php
include("pdo_con.php");

if (isset($_GET['id'])){
    $id=$_GET['id'];
    $id=strip_tags($id);
    }
    $sth = $mydb->prepare("SELECT * FROM ra_articlez WHERE id=:id");
    $sth->execute(array(':id' => $id ));
    $result = $sth->fetch(PDO::FETCH_ASSOC);
    if ($result>0){
        $updatedb = $mydb->prepare("UPDATE ra_articlez SET count=count+1 WHERE id=:id");
        $updatedb->bindParam(':id', $id);
        $updatedb->execute();
        }
?>

dai codici sopra, il collegamento con quel parametro è come questo:

www. website . com/article.php?id=1

È già sicuro? Devo aggiungere un attributo, ad esempio, strip_tags, entità html? o per dichiarare intval prima del ID in ..... WHERE id ...... ?, Qualsiasi aiuto sarebbe molto bello! Grazie.

    
posta Herman Nz 05.03.2015 - 03:16
fonte

1 risposta

2

Is it already secure?

Sì, hai usato correttamente le istruzioni preparate e, con tutto ciò che sappiamo al momento, dovrebbe essere sicuro (supponendo che tu non usi alcuni set di caratteri multibyte dispari ). Se in futuro verranno riscontrati problemi di sicurezza in PDO, probabilmente ne sentirai la conoscenza e, se aggiorni regolarmente il software, dovrebbe essere risolto in tempi ragionevoli.

Do I have to add an attribute, say, strip_tags, html entities?

Non devi, e non dovresti neanche. Non dovresti cambiare i dati quando li inserisci nel database, questo porterà solo a problemi in seguito.

strip_tags e htmlentities vengono utilizzati per prevenire XSS (sebbene non si debba usare strip_tags ), che è un attacco che si verifica quando si stampano i dati all'utente, non quando lo si inserisce nel database. Ed è qui che dovresti difenderti (questo porta a dati più puliti, codice più pulito e sicurezza migliore).

or to declare intval before the ID

Puoi usare qualcosa come is_numeric($input) o qualcosa come (int) $input == $input . Non è una cattiva idea da un punto di vista UX (puoi segnalare qualcosa come Only integers are acceptable , e non è male come difesa in profondità (anche se non è necessario neanche).

What about using SSL plus PDO scripting?

SSL è qualcosa di completamente diverso. Non proteggerà il tuo server dagli attacchi, ma proteggerà i tuoi utenti (tieni presente che probabilmente sei anche un utente) contro gli attacchi man in the middle (che possono essere utilizzati ad esempio per rubare le loro password o leggere dati privati) . Se disponi di dati sensibili e / o di un modulo di accesso, potrebbe essere una buona idea utilizzare SSL / TLS.

Ciò che ti garantirebbe maggiore sicurezza contro gli attacchi sarebbe un firewall a livello di applicazione come mod_security, che controlla sostanzialmente tutti gli input contro un paio di regex per trovare e prevenire gli attacchi (non dovresti fare affidamento su questo però, è solo un ulteriore livello di sicurezza).

    
risposta data 05.03.2015 - 14:17
fonte

Leggi altre domande sui tag