addslashes()
La funzione addslashes() aggiunge un backslash davanti a determinati caratteri in una string per incorporarli in modo sicuro nel codice.
La funzione addslashes() aggiunge un backslash (\) davanti a determinati caratteri in una string, in modo che possano essere incorporati in sicurezza nel codice o nei dati. Esegue l'escape di quattro caratteri: il singolo apice ('), il doppio apice ("), il backslash (\) stesso e il byte NUL (\0). Ciò è utile quando si deve inserire una string all'interno di un'altra string tra virgolette senza che le virgolette interne interrompano la sintassi circostante.
Sintassi
addslashes(string $string): stringAccetta un unico parametro — la string da sottoporre a escape — e restituisce una nuova string con i backslash aggiunti. La string originale rimane invariata.
| Parametro | Descrizione |
|---|---|
$string | Obbligatorio. La string da sottoporre a escape. |
Esempio di base
La string seguente contiene sia apici singoli che doppi. Passandola a addslashes() si ottiene una copia con ciascun apice preceduto da escape:
L'output è:
This is a string with \'quotes\' and \"double quotes\".Ogni ' e " ha ora un backslash davanti, così la string può essere inserita in un contesto tra virgolette senza chiudere prematuramente la string circostante.
Annullare il risultato con stripslashes()
addslashes() è l'inverso di stripslashes(). Ciò che la prima funzione aggiunge, la seconda lo rimuove, quindi è possibile fare un viaggio di andata e ritorno di un valore senza perdere dati:
<?php
$original = "O'Reilly's book costs \$5.";
$escaped = addslashes($original);
$restored = stripslashes($escaped);
echo $escaped . "\n"; // O\'Reilly\'s book costs $5.
echo $restored . "\n"; // O'Reilly's book costs $5.
var_dump($original === $restored); // bool(true)
?>Vengono rimossi soltanto i backslash inseriti da addslashes() stessa, quindi la string ripristinata corrisponde esattamente all'originale.
Quando utilizzarla
Ricorrere a addslashes() quando si deve incorporare testo all'interno di un'altra string tra virgolette — ad esempio, costruendo un letterale string per un file di esportazione, uno snippet di configurazione o un output che verrà poi analizzato da eval() (il cui uso è generalmente sconsigliato). È un helper di formattazione, non una funzione di escape legata a una destinazione specifica.
addslashes() non è una funzione di sicurezza
Questo è il punto più importante da comprendere. addslashes() non rende una string sicura per le query SQL o per l'output HTML, e utilizzarla in tal modo espone l'applicazione a vulnerabilità:
- Per le query al database, utilizzare prepared statement con PDO o
mysqli, oppuremysqli_real_escape_string()per l'approccio di escape legacy. A differenza diaddslashes(),mysqli_real_escape_string()è consapevole della connessione e del charset. - Per l'output HTML, utilizzare
htmlspecialchars()per neutralizzare<,>,&e le virgolette.
addslashes() non è inoltre compatibile con i caratteri multi-byte: opera byte per byte e può corrompere o generare un escape errato di string in codifiche come Shift-JIS o GBK, motivo per cui non deve essere considerata affidabile per la sicurezza SQL.
Funzioni correlate
stripslashes()— rimuove i backslash aggiunti daaddslashes().addcslashes()— consente di scegliere esattamente quali caratteri sottoporre a escape.quotemeta()— esegue l'escape dei metacaratteri delle espressioni regolari.htmlspecialchars()— esegue l'escape dei caratteri con significato speciale in HTML.