sql >> Database teknologi >  >> RDS >> Mysql

Desinficerer/flygter jeg korrekt?

Af en eller anden grund skal vi også undslippe en skråstreg a> også.
Så den rigtige kode ville være, tror jeg

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();
  }
}

Brug

til output
echo htmlspecialchars($_GET['q']);

strimler er ikke nødvendige her.

magiske citater vil ikke skade din sikkerhed, hvis du ikke vil bruge dem.
Charset er farligt i tilfælde af nogle ekstremt sjældne kodninger, men kun hvis de er forkert indstillet. hvis mysql(i)_set_charset eller DSN (i tilfælde af PDO) blev brugt til formålet - du er sikker igen.

Med hensyn til PDO, en tag-wiki burde være nok til start, tror jeg




  1. Sådan bruges CASE Statement i MySQL

  2. Optælling af referencer til en post i en tabel via fremmednøgler

  3. PHP MySQLI Forhindrer SQL-injektion

  4. Enterprise Manager 11g FMW Control i R12.2