Tôi có một chuỗi đến từ người dùng và sau đó được chèn vào một khối CSS lớn bằng cách sử dụng trình phân tích cú pháp CSS.Những ký tự nào an toàn để không thoát khỏi ngữ cảnh giá trị CSS?
Thoát CSS có thể được thực hiện với \C
(trong đó C là ký tự), \HexOfC
(có khoảng trắng) hoặc \6DigitHexOfC
.
Nói chung, tất cả các ký tự có thể được thoát an toàn và CSS vẫn chạy như mong đợi. Các công trình sau đây:
div {
background: \23 f66;
}
<div>Test</div>
Tuy nhiên, tôi vẫn muốn các thuộc tính CSS để được là "sạch" càng tốt, bởi vì tôi muốn, ví dụ, để có thể xem các URL và các quy tắc sạch với thanh tra viên.
Có các ký tự rõ ràng là xấu. {};\*
tất cả nên được thoát vì chúng có thể được sử dụng để thoát khỏi quy tắc hiện tại. Tôi đang quản lý một danh sách trắng (mọi thứ được thoát, trừ những gì được cho phép) của các ký tự (trái ngược với danh sách đen nơi mọi thứ đều được cho phép, ngoại trừ những gì không). Các ký tự có trong danh sách cho phép mà tôi hiện có là
'#', ',', '.', '(', ')', '-', '%', '+', '=', '/', ' ', ':', '\'', '"', '\n', '\r'
Có các ký tự nguy hiểm ở đây không? Bất cứ điều gì có thể được sử dụng để thoát ra khỏi một quy tắc và ảnh hưởng đến phần còn lại của khối CSS. Có những nhân vật nào không có ở đây mà không cần phải trốn thoát không? (Ký tự chữ và số không được thoát theo mặc định).
như thế nào mà giúp tôi? Điều gì ngăn người dùng chèn CSS ác? –
Anh ấy nên thế nào? Bạn có thể cho phép/không cho phép bất kỳ phần tử nào bạn muốn, bằng cách lọc phần tử-key. Các giá trị div, element-keys và element-value chỉ cần là A-Z, a-z, 0-9, # và ". Bạn tránh lọc nâng cao nếu bạn chuyển đổi từng phần tử bằng tay. – manf