2012-05-15 9 views

risposta

19

Non proprio. .val() viene utilizzato per impostare l'attributo value di un campo modulo, pertanto l'escape non è realmente necessario lì. Imposterai il valore tramite il DOM, quindi non è come se stessi costruendo HTML attraverso la concatenazione di stringhe. .prop(), d'altra parte, non interagisce nemmeno con gli attributi - solo le proprietà DOM, quindi non è necessario lavorare su HTML di escape di entrambi.


Edit: per amore di chiarezza, sto supponendo che stai chiedendo perché sei preoccupato per .prop() o .val() come un vettore di attacco XSS (o solo l'opportunità di spararsi in un piede)? In tal caso, è necessario ricordare che quando si impostano attributi e proprietà tramite DOM, i valori impostati sono essenzialmente in modalità sandbox sull'attributo o sul valore con cui si interagiva. Ad esempio, dato il seguente:

<div id="foo"></div> 

E si è tentato di abusare di un valore di attributo, come ad esempio:

$('#foo').attr('rel', '"></div><script>alert("bang");</script><div rel="'); 

Si potrebbe essere preoccupati che questo si tradurrebbe in qualcosa di simile al seguente:

<div id="foo" rel=""></div><script>alert("bang");</script><div rel=""></div> 

Questo non accadrà mai, però. Avrai infatti un attributo rel con la stringa dall'aspetto malvagio come valore, ma non verranno creati nuovi markup o nodi DOM. La stringa stessa non è sfuggita: semplicemente non viene interpretata come markup. È solo una stringa e basta.

+1

Quindi impostare il valore di un elemento su stringa "male" potrebbe * mai * causare problemi? –

+1

Corretto - qualsiasi pericolo sarebbe a valle da quello, per quanto riguarda ciò che si fa con il valore dopo averlo recuperato dall'elemento. Questo presuppone anche che tu lo stia impostando tramite '.val()' o un altro metodo di supporto dell'API DOM. Ho appena ampliato la mia risposta con qualche chiarimento. – jmar777

+0

@ jmar777 È lo stesso per il metodo jquery .attr() per l'impostazione di src di un'immagine? i.e $ ("# profile_pic"). attr ('src', profile_image); devo preoccuparmi della codifica della variabile profile_image qui? quando provo a codificarlo usando ESAPI encodeForHTMLAttribute() non funziona comunque, quindi non credo che sia necessario? grazie – Sarah

6

Si aspettano stringhe, non HTML. Non hai bisogno di scappare da niente.

I metodi stessi non eseguono alcuna operazione di escape, le API DOM che utilizzano utilizzano anche stringhe, non HTML.

Dopo aver iniziato a utilizzare JavaScript, non è quasi mai necessario preoccuparsi della sintassi HTML, l'unica eccezione a cui posso pensare è quando si ha a che fare con la proprietà innerHTML che si occupa esplicitamente di (de) serializzare il DOM in e da HTML.

+0

Probabilmente vale la pena di chiarire che le API DOM sottostanti non sfuggono proprio nulla. Quando imposti valori di attributo e proprietà, non stai creando nuovi markup o nodi DOM o qualcosa del genere, quindi l'escape è una sorta di non problema. – jmar777

+0

@Quentin. È lo stesso per il metodo jquery .attr() per l'impostazione di src di un'immagine? i.e $ ("# profile_pic"). attr ('src', profile_image); devo preoccuparmi della codifica della variabile profile_image qui? quando provo a codificarlo usando ESAPI encodeForHTMLAttribute() non funziona comunque, quindi non credo che sia necessario? grazie – Sarah

0

Voglio solo aggiungere che devi preoccuparti quando inserisci valori all'interno di attributi con effetti collaterali che possono causare l'esecuzione di codice. Questi includono l'attributo image src che può essere usato per xss. Vedi: https://www.owasp.org/index.php/Script_in_IMG_tags