2014-10-02 11 views
6

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

Trả lời

1

Thay vì khử trùng đầu vào, bạn chỉ có thể cho phép các phần tử được chuyển.

Về cơ bản một khách hàng tạo ra tập tin structur:

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

Trong trường hợp này bạn chỉ cần có để tạo ra một tập tin.

Dummy Code:

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("}"); 
} 

Tạo Elements nên dễ dàng.

Mỗi phần tử chỉ là

S: = yếu tố-khóa: giá trị phần tử;

Sau đó, bạn cũng có thể đưa các lệnh đặc biệt vào danh sách cho phép.

Nếu bạn muốn giữ vệ sinh, hãy xem ở đây: http://www.w3.org/TR/CSS21/grammar.html#scanner

+0

như thế nào mà giúp tôi? Điều gì ngăn người dùng chèn CSS ác? –

+0

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

Các vấn đề liên quan