사용자로부터 도착한 문자열을 CSS 파서를 사용하여 큰 CSS 블록에 삽입합니다.CSS 값 컨텍스트에서 벗어날 수없는 문자는 무엇입니까?
CSS 이스케이프는 \C
(C는 문자), \HexOfC
(공백 포함) 또는 \6DigitHexOfC
으로 수행 할 수 있습니다.
일반적으로 모든 문자를 안전하게 이스케이프 할 수 있으며 CSS는 여전히 예상대로 실행됩니다. 다음 작품 :
div {
background: \23 f66;
}
<div>Test</div>
그러나 나는 아직도 내가 원하기 때문에, 예를 들어, 깨끗하게 URL 및 규칙을 볼 수 있도록, CSS의 속성이 가능한 "깨끗한"로되고 싶어 사찰 관에게.
분명히 나쁜 문자가 있습니다. {};\*
은 모두 현재 규칙에서 벗어날 수 있으므로 모두 이스케이프해야합니다. 나는 허용 된 것을 제외하고 화이트리스트를 관리하고있다. (허용되지 않는 것을 제외한 모든 것이 허용되는 블랙리스트와는 대조적으로). 현재 허용 된 허용 된 문자는
'#', ',', '.', '(', ')', '-', '%', '+', '=', '/', ' ', ':', '\'', '"', '\n', '\r'
여기에 위험한 문자가 있습니까? 규칙에서 벗어나 나머지 CSS 블록에 영향을 줄 수있는 모든 것. 불필요하게 도주를 당할 수있는 문자가 여기에 있습니까? 영숫자 문자는 기본적으로 이스케이프되지 않습니다.
어떻게 그 날을 도움이 되나요? 사용자가 사악한 CSS를 삽입하는 것을 어떻게 막을 수 있습니까? –
그는 어떻게해야합니까? element-key를 필터링하여 원하는 모든 요소를 허용/거부 할 수 있습니다. div, 요소 키 및 요소 값 자체는 A-Z, a-z, 0-9, # 및 "일 필요가 있습니다. 각 요소를 직접 변환하면 고급 필터링을 피할 수 있습니다. – manf