Regular expression

martedì 18 novembre 2008 - 00.03

squilibrio Profilo | Expert

Un aiutino, ho trovato un post in cui si fa riferimento ad un ipotetico crash di alcuni browser con stringhe di questo tipo

<SCRIPT LANGUAGE="JavaScript"><!--
var re = new RegExp("[[**]] [[**]] [[**]] [[**]]... [[**]]");
</script>
▪ Heap overflow
▪ Can overflow 2 bytes for each malformed “expression”
▪ Up to 3970 total bytes can be overflown



secondo voi perchè??


Grazie

freeteo Profilo | Guru

Ciao,
forse c'è un bug nel costruttore della Regex? potrebbe anche essere anche se non ne ho mai sentito parlare.
Puoi postare il link dove hai preso queste informazioni? Grazie.
ciao.

Matteo Raumer
[MVP Visual C#]
http://blogs.dotnethell.it/freeteo

squilibrio Profilo | Expert

La descrizione del bug è questa

The above causes a heap overflow which overflows two bytes for each malformed expression. Up to 3970 bytes can be overflown.

This vulnerability existed in both Safari 2, Safari 3, and Safari for the iPhone.


Secondo te cosa vorrebbe dire??

Mi spiego, vorrei capire perchè si verifica questo problema ....


Grazie mille

freeteo Profilo | Guru

>The above causes a heap overflow which overflows two bytes for
>each malformed expression. Up to 3970 bytes can be overflown.
>This vulnerability existed in both Safari 2, Safari 3, and Safari
>for the iPhone.
ok allora è ufficiale, puoi postare il link da dove hai preso queste info? Grazie.



>te cosa vorrebbe dire??
>Mi spiego, vorrei capire perchè si verifica questo problema ....
allora il fatto è che probabilmente la pagina di qualche male intenzionato potrebbe contenere il codice javascript che sfrutta questo bug e cercare di mettere qualche istruzione dannosa sullo stack (io non saprei neanche come sinceramente).
Diciamo che sono però casi estremi e soprattutto basta stare attenti ai siti che stai navigando...poi è anche vero che se è tracciato come bug, con il prossimo aggiornamento viene fixato, quindi tenendoti aggiornato il problema si risolve in poco tempo di sicuro.

Sinceramente sono molti anni che uso il pc e soprattutto internet in maniera pesante sia per lavoro che non, e non ho mai avuto nessun problema di virus, sono solo fortunato ? potrebbe essere, certo è che non apro niente che non conosco, e sto attento a dove navigo, evitando siti che mi danno dei dubbi (tipo il link ha scritto "banca..." ma nella status bar mi dice che il link è un altro...)


Ciao.

Matteo Raumer
[MVP Visual C#]
http://blogs.dotnethell.it/freeteo

squilibrio Profilo | Expert

Purtroppo non ricordo dove ho recupereato il link!

Tornando al problema, non mi preoccupa il fatto di subire l'owerflow

vorrei invece capire perchè viene generato l'overflow, cioè cosa genera il problema a livello di codice.

Grazie mille

squilibrio Profilo | Expert

Nessuno sa dirmi perchè viene generato l'overflow?

luigidibiasi Profilo | Guru

A livello di codice è difficile rispondere perché da come hai scritto il primo post si deduce che il problema sia all'interno della funzione RegExp che essendo anche essa interna al motore javascript del browser non è accessibile.

Il problema quindi probabilmente nasce da un errore di programmazione (non sapremo mai dove sta il bug)

>> <SCRIPT LANGUAGE="JavaScript"><!--
>>var re = new RegExp("[[**]] [[**]] [[**]] [[**]]... [[**]]");
>></script>

Ci siamo creati un parser e lo chiamiamo re

>>▪ Heap overflow
▪>> Can overflow 2 bytes for each malformed “expression”
Puoi scrivere 2 bytes nell'heap ogni volta che parsi qualcosa con il parser definito sopra?
>>▪ Up to 3970 total bytes can be overflown
Tutto ciò che viene dopo i 3970 bytes và in overflow. Quindi se tu provi a parsare un insieme di 3972 bytes fai crashare tutto o almeno và a sovrascrivere l'heap.

Io ho provato così:

<body>

<SCRIPT LANGUAGE="JavaScript">

var re = new RegExp("[[**]] [[**]] [[**]] [[**]]... [[**]]");
var myA = new Array();
var myS = '';

var k=0;
for (k=0;k<6000;k++)
{
myA[k]='p';
myS+='p';
}
re.test(myA);
re.test(myS);

alert('completato');

</script>
</body>

ma chrome, firefox safari e iexplore hanno resistito (iexplore a dire la verità ci ha pensato un pò su' prima di sbloccarsi)

Luigi Di Biasi
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5