Ho una stringa che arriva dall'utente e viene quindi inserita in un grande blocco CSS utilizzando un parser CSS.Quali caratteri sono sicuri di non sfuggire al contesto di valori CSS?
L'escape CSS può essere eseguito con \C
(dove C è un carattere), \HexOfC
(con uno spazio) o \6DigitHexOfC
.
In genere, tutti i caratteri possono essere sfuggiti in modo sicuro e i CSS continuerebbero a funzionare come previsto. Le seguenti opere:
div {
background: \23 f66;
}
<div>Test</div>
Tuttavia, ho ancora voglia le proprietà CSS di essere il più "pulito" possibile, perché voglio, per esempio, di essere in grado di visualizzare gli URL e le regole in modo pulito con l'ispettore.
Ci sono caratteri che sono ovviamente negativi. {};\*
devono essere tutti sfuggiti perché possono essere utilizzati per interrompere la regola corrente. Sto gestendo una lista bianca (tutto viene sfuggito, eccetto per quello che è permesso) di personaggi (al contrario di una lista nera in cui tutto è permesso, tranne che per quello che non lo è). I caratteri autorizzati che ho attualmente sono
'#', ',', '.', '(', ')', '-', '%', '+', '=', '/', ' ', ':', '\'', '"', '\n', '\r'
Ci sono personaggi pericolosi qui? Tutto ciò che può essere usato per uscire da una regola e influenzare il resto del blocco CSS. Ci sono personaggi che non sono qui che verrebbero evitati senza necessità? (I caratteri alfanumerici non sono sfuggiti di default).
Come che mi può aiutare? Cosa impedisce all'utente di inserire male i CSS? –
Come dovrebbe? Puoi abilitare/disabilitare qualsiasi elemento che desideri, filtrando la chiave dell'elemento. div's, element-keys e element-values stesso devono essere solo A-Z, a-z, 0-9, # e ". Si evita il filtraggio avanzato se si converte ciascun elemento manualmente. – manf