do more with less
news, esperienze, esempi da condividere e qualcosa su di me

lunedì 25 ottobre 2004

FreeTextBox - Come usarlo senza urtare la sicurezza di ASP.NET

Chi ha provato ad usare questo controllo, si è forse scontrato con l'impossibilità di salvare dei contenuti HTML inseriti nella fase di editing. Grazie ad alcuni suggerimenti di Raffaele Rialdi e con qualche minuto speso ad analizzare il codice javascript del controllo, sono riuscito a risolvere il problema in questo modo:

Modifica javascipt di FreeTextBox

Aprite il file FreeTextBox-MainScript.js e cercate la funzione FTB_CopyHtmlToHidden. Inserite sopra questa funzione questo codice:

function Encode(content){ return encodeURIComponent(content)}

Quindi modificate la funzione FTB_CopyHtmlToHidden come segue:


 


function FTB_CopyHtmlToHidden(ftbName)
{
if (!FTB_Initialized(ftbName))
return;
hiddenHtml = FTB_GetHiddenField(ftbName);
editor = FTB_GetIFrame(ftbName);
if (isIE)
{
if (FTB_IsHtmlMode(ftbName))
{
hiddenHtml.value = Encode(editor.document.body.innerText);
}
else
{
hiddenHtml.value = Encode(editor.document.body.innerHTML);
}
}
else
{
if (FTB_IsHtmlMode(ftbName))
{
editorContent = editor.document.body.ownerDocument.createRange();
editorContent.selectNodeContents(editor.document.body);
hiddenHtml.value = Encode(editorContent.toString());
}
else
{
hiddenHtml.value = Encode(editor.document.body.innerHTML);
}
}
if (hiddenHtml.value == '' || hiddenHtml.value == '')
{
hiddenHtml.value = '';
}
}

Nel vostro codice server side utilizzate il metodo HttpUtility.UrlDecode per vedere in chiaro il contenuto della proprietà Text del vostro controllo FreeTextBox. Ricordatevi, inoltre, di rimpostare il valore di questa proprietà con il valore in chiaro altrimenti mostrerete all'utente una stringa di dati difficilmente comprensibile ;-)


Il risultato sembra essere quello voluto, cioè permettere l'inserimento di contenuti HTML utilizzando FreeTextBox.


Questo ovviamente apre le porte ad altre considerazioni sulla sicurezza. Il minimo è grarantire che questo controllo sia usato solo in aree riservate ad utenti "Editor" di fiducia che non useranno questo strumento per inserire codice nocivo alla vostra applicazione.