Non sono sicuro delle eccezioni a cui fa riferimento il manuale quando si parla di protezione dei dati. Si potrebbe dire che l'eccezione è quando i dati sono già noti per essere sicuri. Ad esempio, qui ci sono alcuni casi che vengono in mente:
- i dati è tipizzata come un numero (questo è davvero una specializzazione della voce successiva)
- sai già che non contiene caratteri che ha bisogno di essere sfuggito (ad esempio, si tratta di guardare qualcosa in un array di "whitelist", che contiene alcune opzioni che si hardcoded)
per esempio, se avete $id = intval($_GET['id'])
allora non c'è bisogno di fuggire $id
prima di iniettarlo in una query.
Tuttavia! Non può mai farti male sfuggire a tutto l'input e così facendo si elimina la possibilità che si introducano vulnerabilità nel codice (ad esempio se si dimentica di scappare, se i requisiti cambiano, o qualcosa di veramente). Quindi consiglio di prendere l'abitudine di scappare da tutto e di dimenticare le "eccezioni".
Per quanto riguarda le %
e _
personaggi come parte dell'input, questi non hanno bisogno di essere sfuggito a meno che non si sta andando ad alimentare questo ingresso per un comando che li riconosce. Così, per esempio, se si dispone di una query come questa:
$term = $_GET['term'];
$sql = sprintf("SELECT FROM table WHERE column LIKE '%%s%'",
mysql_real_escape_string($term));
In questo caso, se l'utente digita una %
come parte di $term
è ragionevole supporre che vogliono cercare in realtà per un letterale %
. Pertanto in questi casi è necessario evitare %
sostituendolo con \%
(\
è il carattere di escape predefinito). str_replace
o strtr
sono due buone opzioni per questo.
È necessario utilizzare [PDO] (http://php.net/manual/en/book.pdo.php). Fare il tuo sito web personale è una grande opportunità per impararlo. – kapa
Il punto 2 si riferisce alle clausole 'LIKE' e non è rilevante per l'utilizzo di dati stringa in altri contesti. – mario
una delle eccezioni potrebbe essere una stringa già sfuggita. – hjpotter92