Xử lý đầu ra theo đúng ngữ cảnh. Ưu tiên thư viện hoặc framework đã được thẩm định có sẵn cơ chế mã hóa đầu ra an toàn. Xác định kiểu mã hóa cần thiết cho từng ngữ cảnh đầu ra, gồm thân HTML, thuộc tính phần tử, URI, phần JavaScript và CSS hoặc thuộc tính style; mã hóa thực thể HTML chỉ phù hợp với thân HTML. Chỉ định kiểu mã hóa mà thành phần downstream sẽ xử lý nhất quán, chẳng hạn ISO-8859-1, UTF-7 hoặc UTF-8, thay vì để trình duyệt hay thành phần khác tự phỏng đoán.
Giới hạn và kiểm tra dữ liệu đầu vào. Coi mọi dữ liệu đầu vào là độc hại và dùng allowlist nghiêm ngặt dựa trên kiểu, độ dài, giá trị, cú pháp, tính nhất quán và quy tắc nghiệp vụ dự kiến. Kiểm tra và làm sạch toàn bộ dữ liệu trong yêu cầu, gồm trường ẩn, cookie, tiêu đề, URL và các trường khác dù ứng dụng không dự kiến hiển thị lại; không chỉ dựa vào denylist. Xác định mọi nguồn đầu vào có thể có và dùng cơ chế có cấu trúc để tách dữ liệu khỏi mã. Khi tập tên tệp hoặc URL hợp lệ bị giới hạn, ánh xạ các giá trị đầu vào cố định như ID số tới đối tượng tương ứng và từ chối giá trị khác. Lặp lại các kiểm tra bảo mật phía máy khách ở phía máy chủ. Với Struts, đặt thuộc tính filter của bean thành true cho dữ liệu form bean; với PHP, không dùng register_globals hoặc cơ chế mô phỏng không an toàn.
Tăng cường phòng thủ. Đặt cookie phiên thành HttpOnly khi trình duyệt hỗ trợ, nhưng cần hiểu rằng biện pháp này không ngăn được mọi XSS và không được mọi trình duyệt hỗ trợ. Tường lửa ứng dụng có thể là biện pháp tạm thời hoặc bổ sung khi chưa thể sửa mã ngay, nhưng có thể bỏ sót vector đầu vào, bị vượt qua hoặc từ chối hay sửa đổi yêu cầu hợp lệ.