Utilizzo di virgolette singole o doppie per impedire XSS e SQLi?

0

Perché è consigliabile inserire virgolette singole o doppie attorno ai valori degli attributi HTML? Si raccomanda di prevenire l'XSS, ma perché?

Lo stesso vale per l'iniezione SQL: si consiglia di utilizzare virgolette singole o doppie durante la dichiarazione dei valori di input in una query?

Quali rischi sono associati alla dichiarazione di valori di input non quotati in una query SQL o in un attributo HTML?

    
posta Tushar 08.08.2018 - 11:26
fonte

2 risposte

1

Senza virgolette, il payload sfuggirebbe al valore dell'attributo effettivo e avvierà un nuovo attributo con il proprio carico utile:

<div class=fist onclick=console.log(document.cookie)>

Mentre con le virgolette rimarrà un innocuo valore di attributo singolo:

<div class="fist onclick=console.log(document.cookie)">

Nota che per prevenire XSS devi codificare anche i caratteri speciali all'interno del valore.

Per l'iniezione SQL la situazione è diversa. È rigorosamente non raccomandato di dichiarare i valori di input nella query in primo luogo.

Per evitare un'iniezione SQL, è necessario definire un parametro nella query al posto del valore effettivo, che deve essere inviato separatamente all'esecuzione della query:

$stmt->prepare("SELECT * FROM t WHERE id=?");
$stmt->execute([$id]);

Pertanto, ci deve essere non una singola citazione nella query relativa al valore aggiunto dinamicamente, il che rende la domanda su virgolette semplicemente irrilevante.

    
risposta data 08.08.2018 - 14:13
fonte
1

Non fare mai affidamento su preventivi per proteggerti dall'iniezione di codice. Non in HTML e certamente non in SQL.

Un utente malintenzionato che ha l'abilità di inserire stringhe arbitrarie e senza caratteri di escape nel codice sorgente ha già vinto, indipendentemente dai caratteri che utilizzi per includere il testo non filtrato.

Invece, usa qualsiasi sistema che la lingua o la struttura che stai usando sia stata creata per gestire l'input dell'utente. In puro SQL, probabilmente si tratta di query parametrizzate . In HTML reso da PHP, htmlspecialchars . In JavaScript sul lato client, Element.setAttribute . Scopri quale sistema la tua lingua / struttura fornisce e usalo. Non limitarti a racchiudere il testo arbitrario tra virgolette (singolo o doppio) e supponi che funzioni; it probabilmente non .

    
risposta data 06.11.2018 - 18:18
fonte

Leggi altre domande sui tag