Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Desinfiziere/entkomme ich richtig?

Aus irgendeinem Grund müssen wir auch einen Backslash maskieren also.
Der richtige Code wäre also, glaube ich

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

Verwenden Sie für die Ausgabe

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

Stripslashes werden hier nicht benötigt.

magische Anführungszeichen werden Ihrer Sicherheit nicht schaden, wenn Sie sie nicht verwenden.
Zeichensatz ist im Falle einiger extrem seltener Codierungen gefährlich, aber nur, wenn er falsch gesetzt ist. wenn mysql(i)_set_charset oder DSN (bei PDO) verwendet wurden - Sie sind wieder sicher.

Wie für PDO, ein Tag Wiki sollte für den Anfang reichen, glaube ich