2014-10-02 13 views
6

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).

Odpowiedz

1

Zamiast odkażania danych wejściowych, można po prostu zezwolić na przenoszenie elementów.

Zasadniczo klient wygenerowany plik structur:

[ 
    MyDiv: { # Key 
     background: "#FFFFFF" # Element 
    } 
] 

W tym przypadku po prostu trzeba utworzyć plik.

Kod Dummy:

StringBuilder sb = new StringBuilder(); 
foreach(String key: structure.getKeys()) { 
    final List<Element> e = structure.getElements(key); 
    sb.append(".") // This may be changed of course 
     .append(key) // ID or class based on type above 
     .append("{") 
     // Append Elements 
     .append("}"); 
} 

Generowanie Elementy powinny być proste.

każdego elementu tak

S: = element klucz: element wartość;

Następnie możesz dodać do białej listy specjalne polecenia.

Jeśli chcesz zachować odkażania, spójrz tutaj: http://www.w3.org/TR/CSS21/grammar.html#scanner

+0

Jak to mi pomoże? Co powstrzymuje użytkownika przed wstawianiem złego CSS? –

+0

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

Powiązane problemy