Mi capita di leggere su XSS e su come evitarlo. Da quello che ho letto, sono venuto a sapere che abbiamo bisogno del filtraggio degli input, della corretta gestione del codice dell'applicazione e della codifica dell'output per rendere l'applicazione Web un po 'sicura per XSS. Dopo aver esaminato diversi articoli, persistono diversi dubbi.Alcuni chiarimenti riguardanti XSS
Quando ho provato jQuery.text ("untrusted_data") o element.text = untrusted_data, il browser sembra essere la codifica del contenuto perfettamente, ma ho letto da qualche altra parte che sul lato client la codifica non dovrebbe essere attendibile e devi "sempre" codificare sul lato server. Perché la codifica sul lato client non è considerata sicura?
Ogni volta che ho cercato di impostare il valore utilizzando jQuery.val (untrusted_data) o element.value = untrusted_data sembra essere abbastanza sicuro. Quindi è davvero XSS sicuro o mi sono perso ogni caso qui?
- Inoltre, mi capita di leggere da qualche parte che jQuery.setAttribute (attrName, untrusted_data) e setAttribute (attrName, untrusted_data) sono generalmente considerati sicuri solo se i nomi attributo non includono gli attributi basati su URL Contesto (src, href ecc.) O Gestori di eventi (onClick, onMouseOver, ecc.). In questo caso, come dovrei impostare un attributo href usando setAttribute ("href", untrusted_data)? EncodeForHtmlAttribute (untrusted_data) dal lato server è il giusto approccio?
- Come devo gestire la creazione dinamica di HTML. Si consideri l'esempio di seguito
<div id="divName1" onClick="copyData()">untrusted_data</div>
<div id="divName2"></div>
function copyData()
{
var divValue = jQuery("#divName1").html();
jQuery("#divName2").html(divValue);/XSS Here
}
Quello che voglio ottenere è quello di ottenere il testo da divName1 e incollarlo al contenuto del divName2. Il codice che ho scritto sopra è vulnerabile all'XSS. Posso cambiare questo
jQuery ("# divName2"). Testo (divValue)
Quindi, questo garantirà la codifica, ma, come ho capito, diciamo che la codifica sul lato client è a rischio e dovrebbe essere usata solo la codifica lato server. Come dovrei scrivere questo per essere sicuro XSS senza usare la codifica lato client? Sono un po 'confuso qui :(. Si prega di aiutarmi a chiarire questi dubbi.
'element.text' stesso è sicuro, ma è possibile riscontrare problemi se si utilizza l'interpolazione delle stringhe per passare i dati al codice client. –