Ce face HtmlEscape
HtmlEscape transformă caracterele care au înțeles în HTML în entități: < devine <, & devine & și așa mai departe. Astfel, un text venit de la utilizator se afișează exact cum l-a scris, fără să fie interpretat ca HTML (protecție împotriva XSS).
Constanta gata făcută htmlEscape (cu modul implicit HtmlEscapeMode.unknown) înlocuiește < > & " ' /. Alte moduri: HtmlEscapeMode.element (doar < > &, pentru conținutul unui element) și HtmlEscapeMode.attribute (pentru valori între ghilimele duble).
Parametri
| Parametru | Descriere |
|---|---|
mode |
Ce caractere se înlocuiesc (unknown, element, attribute, sqAttribute). |
text |
La convert: textul de protejat. |
Ce returnează
convert: textul cu entitățile HTML.
Exemple
Exemplul 1: Comentariu periculos afișat în siguranță
import 'dart:convert';
void main() {
const comentariu = '<script>alert("hack")</script> & salut';
print(htmlEscape.convert(comentariu));
print('<p>${htmlEscape.convert('Ion & Ana')}</p>');
}
Rezultat
<script>alert("hack")</script> & salut
<p>Ion & Ana</p>
Exemplul 2: Modurile de escapare
import 'dart:convert';
void main() {
const text = '''Ana's "notă" <10> & 1/2''';
print(const HtmlEscape().convert(text));
print(const HtmlEscape(HtmlEscapeMode.element).convert(text));
print(const HtmlEscape(HtmlEscapeMode.attribute).convert(text));
}
Rezultat
Ana's "notă" <10> & 1/2
Ana's "notă" <10> & 1/2
Ana's "notă" <10> & 1/2
Greșeli frecvente
- Construiești HTML lipind direct textul utilizatorului. Un nume ca
<img onerror=…>rulează cod în pagina altora. Trece orice text extern prinhtmlEscape. - Escapezi de două ori și pe pagină apare
&lt;. Aplică escaparea o singură dată, chiar înainte de afișare.
Comenzi înrudite
jsonEncode: Transformă hărți, liste, texte, numere, bool și null într-un text JSON; alte obiecte trebuie să aibă toJson().Codec: Clasa de bază pentru perechi encode/decode (utf8, base64, json); fuse le leagă în lanț, inverted le inversează.HttpRequest: HttpRequest este o cerere primită de HttpServer: metoda (GET, POST), adresa (uri), antetele, corpul și răspunsul de trimis.