Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Eu higienizo/escapo corretamente?


Por algum motivo, também precisamos escape de uma barra invertida também.
Então, o código apropriado seria, eu acredito
if(isset($_GET['q'])){
  $_GET['q'] = trim($_GET['q']);
  if(strlen($_GET['q']) >= 2){
    $q = $_GET['q'];
    $q = '%'.addCslashes($q, '\%_').'%';
    // now we have the value ready either for escaping or binding
    $q = mysql_real_escape_string($q);
    $sql = "SELECT name, age, address FROM book WHERE name LIKE '$q'";
    //or 
    $sql = "SELECT name, age, address FROM book WHERE name LIKE ?";
    $stm = $pdo->prepare($sql);
    $stm->execute(array($q));
    $data = $stm->fetchAll();
  }
}

Para a saída, use
echo htmlspecialchars($_GET['q']);

stripslashes não são necessários aqui.

aspas mágicas não prejudicarão sua segurança se você não as usar.
Charset é perigoso no caso de algumas codificações extremamente raras, mas somente se configuradas incorretamente. if mysql(i)_set_charset ou DSN (no caso de PDO) foram usados ​​para o efeito - você está seguro novamente.

Quanto ao PDO, um tag wiki deve ser suficiente para começar, eu acredito