Mam ciąg znaków, który przychodzi od użytkownika, a następnie jest wstawiany do dużego bloku CSS przy użyciu parsera CSS.Jakich znaków nie można uciec w kontekście wartości CSS?
CSS Cytowanie można zrobić z \C
(gdzie C jest postacią), \HexOfC
(ze spacją) lub \6DigitHexOfC
.
Ogólnie, wszystkie znaki można bezpiecznie wymykać, a CSS nadal będzie działał zgodnie z oczekiwaniami. Następujące prace:
div {
background: \23 f66;
}
<div>Test</div>
Jednak nadal chcę właściwości CSS być tak „czysty” jak to możliwe, ponieważ chcę, na przykład, aby móc przeglądać adresy i reguły czysto z inspektorem.
Istnieją znaki, które są oczywiście złe. {};\*
powinny zostać usunięte, ponieważ mogą zostać użyte do zerwania z obecną regułą. Zarządzam białą listą (wszystko zostaje usunięte, z wyjątkiem dozwolonych) postaci (w przeciwieństwie do czarnej listy, w której wszystko jest dozwolone, z wyjątkiem tego, co nie jest dozwolone). Znaki na białej liście, które obecnie mam, to:
'#', ',', '.', '(', ')', '-', '%', '+', '=', '/', ' ', ':', '\'', '"', '\n', '\r'
Czy są tu niebezpieczne znaki? Wszystko, co może być użyte do wyrwania się z reguły i wpłynąć na resztę bloku CSS. Czy są tu postacie, których nie ma tutaj, aby uniknąć niepotrzebnego ucieczki? (Znaki alfanumeryczne nie są domyślnie chronione).
Jak to mi pomoże? Co powstrzymuje użytkownika przed wstawianiem złego CSS? –
Jak powinien on? Możesz pozwolić/zabronić dowolnego elementu, przez filtrowanie klucza elementu. div, klucze elementarne i same wartości elementarne to po prostu A-Z, a-z, 0-9, # i ". Unikniesz zaawansowanego filtrowania, jeśli konwertujesz każdy element ręcznie. – manf