English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Di recente è uscita una notizia, quattro dipendenti del dipartimento di sicurezza informatica di Alibaba hanno utilizzato una falla del sito web per scrivere uno script JavaScript per rubare mooncakes, quindi sono diventati curiosi e vogliono sapere come scrivere questo script JavaScript, e come vengono implementati vari attacchi di spionaggio e rapina.
Cos'è un attacco di注入 JavaScript?
1. Ogni volta che si accetta il contenuto inserito dall'utente e si visualizza di nuovo questi contenuti, il sito web è facilmente soggetto agli attacchi di注入 JavaScript. Studiamo un'applicazione specifica che è facile subire attacchi di注入 JavaScript. Supponiamo che sia stato creato un sito web di feedback dei clienti. I clienti possono accedere al sito web e inserire informazioni di feedback sul prodotto. Quando i clienti inviano il feedback, le informazioni di feedback vengono visualizzate di nuovo nella pagina di feedback.
Il sito web di feedback dei clienti è un sito web semplice. Sfortunatamente, questo sito è vulnerabile agli attacchi di iniezione JavaScript.
Supponiamo di inserire il seguente testo in un modulo di feedback dei clienti:
<script>alert(“Attack!”)</script>
Questo testo rappresenta lo script JavaScript per mostrare una finestra di messaggio di avviso. Quando qualcuno invia questo script a un modulo di feedback dei clienti, il messaggio "Attack!" verrà visualizzato ogni volta che qualcuno accede al sito web di feedback dei clienti.
2. C'è anche la possibilità di inserire un pezzo di codice JavaScript nell'address bar del browser per modificare il contenuto delle variabili JavaScript della pagina o dei tag della pagina.
Con l'iniezione JavaScript, l'utente non deve chiudere o salvare la pagina web per cambiare il suo contenuto, tutto questo viene fatto nell'address bar del browser. La sintassi del comando è la seguente:
javascript:alert(#command#)
Ad esempio, se vuoi vedere un avviso di alert su http://www.example.com, prima inserisci l'URL nell'address bar e aspetta che la pagina si carichi, poi elimina l'URL e inserisci:
javascript:alert("Hello World")
Come nuova URL. Questo aprirà una finestra di avviso "Hello World", con questa tecnica si può quasi cambiare qualsiasi contenuto di una pagina web, ad esempio un'immagine. Supponiamo di avere un'immagine di logo del sito web, troviamo un pezzo di codice HTML all'interno del file sorgente della pagina:
<IMG Name="hi" SRC="hello.gif">
L'immagine è chiamata "hi", il file sorgente è "hello.gif", vogliamo cambiarla con il file "bye.jpeg" archiviato sul nostro sito (http://www.mysite.com), quindi l'indirizzo completo dell'immagine è http://www.mysite.com/bye.jpeg, usando l'iniezione JavaScript, dobbiamo solo inserire nell'address bar:
javascript:alert(document.hi.src="http://www.mysite.com/bye.jpeg")
Verrai avvisato con un alert di pop-up "http://www.mysite.com/bye.jpeg", poi l'immagine viene modificata. È importante notare che queste modifiche sono temporanee! Se ricarichi la pagina o accedi di nuovo, le tue modifiche spariranno perché hai fatto queste modifiche solo sul tuo PC, non sul server web.
Usando lo stesso metodo possiamo vedere o cambiare il valore delle variabili, ad esempio troviamo un pezzo di codice del genere sul nostro sito web:
<SCRIPT LANGUAGE="JavaScript"> var a="test" </SCRIPT>
Questo significa che il valore della variabile a è "test", ora inseriamo:
javascript:alert(a)
Poi cambiamo il suo valore in "hello":
javascript:alert(a="hello")
L'iniezione di JavaScript di solito viene usata per cambiare le proprietà del modulo, supponiamo di avere un pezzo di codice del genere:
<form name="format" action="send.php" method="post"> <input type="hidden" name="mail" value="[email protected]"> <input type="text" name="name"> <input type="submit" value="submit"></form>
Vogliamo che il modulo venga inviato alla nostra email, non a [email protected]. Possiamo usare il comando seguente:
javascript:alert(document.format.mail.value="[email protected]")
• Forse avete notato la gerarchia di questi comandi:
• Descriviamo in ordine da sinistra a destra:
• 1) Il più a sinistra è document
• 2) Poi è il nome dell'oggetto che vogliamo cambiare (ad esempio document.hi.src) o l'oggetto contenente (ad esempio document.format.mail.value)
• 3) Infine, è l'attributo che vogliamo cambiare (ad esempio il percorso di origine: document.hi.src, o il valore della variabile: document.format.mail.value)
• 4) Usiamo il simbolo "." per separare
• 5) Quando vogliamo cambiare il valore dell'attributo, usiamo il simbolo "=" e il nuovo valore dell'attributo
• * Note: quando il nuovo valore dell'attributo è una stringa (ad esempio: document.format.mail.value="[email protected]") deve essere racchiuso tra virgolette doppi.
• Se vogliamo usarlo come valore di una variabile, non è necessario usare virgolette doppi "". Ad esempio, se vogliamo assegnare il valore della variabile b alla variabile a, possiamo digitare javascript:alert(a=b).
• Ma, la maggior parte dei tag nella pagina non ha un nome, ad esempio:
<form action="send.php" method="post"> <input type="hidden" name="mail" value="[email protected]"> <input type="text" name="name"> <input type="submit" value="submit"></form>
In questo pezzo di codice non c'è il nome del modulo, basandoci sulle informazioni sopra, possiamo usare questo comando:
javascript:alert(document. .mail.value="[email protected]")
In questo caso dobbiamo contare e trovare il numero di sequenza del modulo, ecco un esempio:
<form action="send.php" method="post"> <input type="text" name="name"> <input type="submit" value="submit"> </form> <form action="send.php" method="post"> <input type="hidden" name="mail" value="[email protected]"> <input type="text" name="name"> <input type="submit" value="submit"> </form> <form action="send.php" method="post"> <input type="text" name="name"> <input type="submit" value="submit"> </form>
•Nella codifica sopra possiamo vedere 3 moduli, ma ci interessa solo il secondo, quindi il numero di sequenza del modulo che vogliamo è 2. Non dimenticare che contiamo da 1, ad esempio 1, 2, 3, 4... mentre JavaScript inizia da 0, ad esempio 0, 1, 2, 3... quindi il numero effettivo del modulo è 1, non 2. Di solito dobbiamo sottrarre 1 al numero del modulo trovato per completare il nostro comando:
javascript:alert(document.forms[1].mail.value="[email protected]")
•Così puoi modificare immagini o link senza nome, puoi sostituire "forms" con qualsiasi tipo di etichetta che desideri. Per le immagini è così
javascript:alert(document.images[3].src="#l'indirizzo dell'immagine che desideri#")
Per i link è così
javascript:alert(document.links[0].href="#l'indirizzo URL che desideri#")
Infine, possiamo utilizzare questa tecnica per modificare i cookies. Il comando seguente è stato scritto da Dr_aMado di triviasecurity.net e ho fatto solo qualche piccola modifica per farlo apparire prima che l'utente lo modifichi. Basta copiarlo nella barra degli indirizzi:
javascript:alert(window.c=function a(n,v,nv){c=document.cookie;c=c.substring(c.indexOf(n)+n.length,c.length); c=c.substring(1,((c.indexOf(";")>-1)?c.indexOf(";"):c.length));nc=unescape(c).replace(v,nv); document.cookie=n+"="+escape(nc);return unescape(document.cookie);}); alert('Il cookie è: "'+document.cookie+'"');alert(c(prompt("Il nome del cookie:",""),}} prompt("Cambia questo valore:",""),prompt("con questo:","")))
//Se vuoi modificare manualmente il tuo cookie, puoi utilizzare il seguente comando:
javascript:alert(document.cookie)
Questo mostrerà i tuoi cookie attuali, supponiamo che siano "userid=1"; se vuoi cambiarli in "userid=2", puoi utilizzare il seguente comando:
javascript:alert(document.cookie="userid=2")
Infine, devo enfatizzare che tutte le modifiche sono solo sul lato client! È come salvare una pagina web sul tuo PC e modificarla. Tuttavia, utilizzando questa tecnica, puoi ingannare la pagina (ad esempio, i cookie) o superare le verifiche di sicurezza. Ad esempio, alcune pagine rilevano la posizione da cui l'utente invia i dati; se si inviano dati da http://www.test.com/form.php a http://www.test.com/check.php, check.php potrebbe verificare se i dati provengono dal form su http: //www.test.com/form.php. Oltre a ciò, se hai intenzione di inserire il tuo codice JavaScript nella pagina, utilizzando tali tecniche, sarai in grado di modificare le immagini mantenendole invariabili!
Infine, poiché l'iniezione JavaScript è così terribile, cosa possiamo fare noi per prevenire l'iniezione JavaScript sui nostri siti web?
Metodo 1:
Un metodo semplice per prevenire gli attacchi di注入 JavaScript è di codificare in HTML qualsiasi dato di input dell'utente del sito web durante la visualizzazione dei dati nella vista.
Ad esempio: <%=Html.Encode(feedback.Message)%>
Che cosa significa codificare una stringa in HTML? Quando si codifica una stringa in HTML, i caratteri pericolosi come < e > vengono sostituiti con entità HTML come < e >. Pertanto, quando si codifica una stringa in HTML <script>alert("Boo!")</script>, viene convertita in <script>alert("Attacco!")</script>. Il browser non esegue lo script JavaScript durante l'analisi della stringa codificata, ma visualizza una pagina innocua.
Metodo due:
Oltre a utilizzare dati HTML codificati per visualizzare dati nella vista, è possibile utilizzare dati HTML codificati prima di inviare i dati al database.
StringEscapeUtils.escapeHtml("dati inviati dal frontend");
Di solito, le persone preferiscono utilizzare il primo metodo discusso in questo tutorial, piuttosto che il secondo metodo. Il problema del secondo metodo è che i dati HTML codificati verranno conservati nel database. In altre parole, i dati nel database conterranno caratteri strani. Quali sono i difetti? Se si desidera visualizzare i dati del database in forme diverse dai siti web, si incontreranno problemi. Ad esempio, non è facile visualizzare i dati in applicazioni Windows Forms.
Grazie per la condivisione degli utenti: http://zxf-noimp.iteye.com/blog/1130771
Questo è tutto il contenuto dell'articolo, speriamo che sia utile per la tua apprendimento e che tu sostenga fortemente il tutorial URL.
Dichiarazione: il contenuto di questo articolo è stato tratto da Internet, il copyright spetta ai rispettivi autori. Il contenuto è stato contribuito e caricato autonomamente dagli utenti di Internet, il sito web non detiene il diritto di proprietà, non è stato editato manualmente e non assume alcuna responsabilità legale. Se trovi contenuti sospetti di violazione del copyright, ti preghiamo di inviare una email a: notice#oldtoolbag.com (al momento dell'invio dell'email, sostituisci # con @) per segnalare il problema e fornire prove pertinenti. Una volta verificata la veridicità, il sito web rimuoverà immediatamente i contenuti sospetti di violazione del copyright.