Tôi đang sử dụng trình gỡ lỗi JSON Newton. Làm thế nào có thể làm sạch JSON cho XSS (cross scripting)? Làm sạch chuỗi JSON trước khi hủy tuần tự hoặc viết một số loại trình chuyển đổi/khử trùng tùy chỉnh? Nếu vậy - tôi không chắc chắn 100% về cách tốt nhất để tiếp cận điều này.làm sạch JSON cho XSS trước khi deserializing
Dưới đây là ví dụ về JSON có tập lệnh nguy hiểm được tiêm và cần "làm sạch". Tôi muốn có một quản lý này trước khi tôi de-serialize nó. Nhưng chúng ta cần phải giả định tất cả các loại kịch bản XSS, bao gồm cả tập lệnh mã hóa BASE64 vv, do đó, vấn đề phức tạp hơn khi một chuỗi REGEX đơn giản thay thế.
{ "MyVar" : "hello<script>bad script code</script>world" }
Đây là một bản chụp của deserializer tôi (JSON -> Object):
public T Deserialize<T>(string json)
{
T obj;
var JSON = cleanJSON(json); //OPTION 1 sanitize here
var customConverter = new JSONSanitizer();// OPTION 2 create a custom converter
obj = JsonConvert.DeserializeObject<T>(json, customConverter);
return obj;
}
JSON được đăng tải từ một giao diện bên UI 3rd, vì vậy nó khá tiếp xúc, vì thế mà xác nhận server-side. Từ đó, nó được tuần tự hóa thành tất cả các loại đối tượng và thường được lưu trữ trong một DB, sau đó được lấy ra và xuất ra trực tiếp trong giao diện người dùng dựa trên HTML do đó việc tiêm script phải được giảm nhẹ.
Tôi đã cập nhật câu hỏi của mình để giải quyết ý tôi là "dọn dẹp". – MarzSocks
Nó phụ thuộc vào ngữ cảnh. Bạn có thể cung cấp một số chi tiết về cách dữ liệu sẽ được hiển thị không? Nó có chứa dữ liệu URL không? Nó sẽ được đặt thẳng vào HTML? Nó sẽ được truy cập từ javascript chỉ? nó là một thuộc tính HTML? Việc ngăn chặn XSS thực sự phụ thuộc vào ngữ cảnh. – Gray
JSON được đăng từ giao diện giao diện người dùng của bên thứ ba, do đó, nó được tiếp xúc khá & do đó xác thực phía máy chủ. Từ đó nó được serialized vào tất cả các loại đối tượng và thường được lưu trữ trong một DB, sau đó được lấy ra và xuất trực tiếp trong giao diện người dùng dựa trên HTML để thẻ script phải được kiểm soát. Lý tưởng nhất là muốn làm sạch nó trước khi nó đi vào lớp logic của ứng dụng và serializer là nơi để cai trị tất cả chúng. :-) – MarzSocks