sql >> Databáze >  >> RDS >> Mysql

Dezinfikuji/uteču správně?

Z nějakého důvodu také potřebujeme escapovat zpětné lomítko taky.
Věřím, že správný kód by byl

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

Pro výstup použijte

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

lomítka zde nejsou potřeba.

magické uvozovky nepoškodí vaši bezpečnost, pokud je nebudete používat.
znaková sada je nebezpečná v případě některých extrémně vzácných kódování, ale pouze pokud je nesprávně nastavena. if mysql(i)_set_charset nebo DSN (v případě PDO) byly použity pro tento účel - jste opět v bezpečí.

Pokud jde o PDO, wiki tagů by pro začátek mělo stačit, věřím




  1. Jak mohu použít executemany k vložení seznamu slovníků v Pythonu do MySQL

  2. jaké jsou změny v případě sady řádků výsledku mysql 8?

  3. Jarní konference FLOSS UK

  4. Jak mohu vrátit zpět příkaz mysql, který jsem právě provedl?