Bước 1: Escape Output Được cung cấp bởi người dùng
Nếu bạn muốn bao gồm dữ liệu trong một trang đó là được cung cấp bởi người dùng, thoát sản lượng. Và, trong danh sách được đơn giản hóa này, chúng ta sẽ kết hợp với một thao tác thoát đơn giản: HTML mã hóa bất kỳ <,>, &, ‘,“. Ví dụ, PHP cung cấp hàm htmlspecialchars() để thực hiện nhiệm vụ chung này.
Bước 2: Luôn luôn sử dụng XHTML
Đọc qua các chiến lược phòng ngừa XSS OWASP, và nó trở nên rõ ràng rằng việc bảo vệ chống tiêm đòi hỏi nỗ lực nhiều hơn nữa nếu bạn sử dụng thuộc tính không thể viện chứng trong HTML của bạn. Ngược lại, trong các thuộc tính được trích dẫn, dữ liệu thoát sẽ trở thành quá trình tương tự cần thiết để thoát dữ liệu cho nội dung trong các thẻ, hoạt động thoát mà chúng tôi đã nêu ở trên. Đó là bởi vì người gây rối duy nhất trong việc lẻn vào nội dung có cấu trúc quan trọng trong bối cảnh thuộc tính được trích dẫn là báo giá đóng.
Rõ ràng, đánh dấu của bạn không phải là XHTML để chứa các thuộc tính được trích dẫn. Tuy nhiên, việc chụp và xác thực XHTML sẽ giúp bạn dễ dàng kiểm tra xem tất cả các thuộc tính có được trích dẫn hay không.
Bước 3: Chỉ cho phép giá trị chữ và số liệu trong CSS và JavaScript
Chúng ta cần phải giới hạn dữ liệu bạn cho phép từ người dùng đó sẽ được xuất ra trong phần CSS và Javascript của trang để tự chữ và số (ví dụ, một regex như [a-zA-Z0-9] +) loại và đảm bảo chúng được sử dụng trong ngữ cảnh mà chúng thực sự đại diện cho các giá trị. Trong Javascript, điều này có nghĩa là dữ liệu người dùng chỉ nên được xuất trong các chuỗi được gán cho các biến (ví dụ, var userId = “ALPHANUMERIC_USER_ID_HERE” ;.) Trong CSS điều này có nghĩa là dữ liệu người dùng chỉ được xuất trong ngữ cảnh cho một giá trị thuộc tính (ví dụ: p {color: #ALPHANUMERIC_USER_COLOR_HERE;}.) Điều này có vẻ là Draconian, nhưng, này, đây được cho là một hướng dẫn XSS đơn giản
Bây giờ, để rõ ràng, bạn nên luôn xác thực dữ liệu người dùng để đảm bảo dữ liệu đáp ứng mong đợi của bạn , ngay cả đối với dữ liệu đầu ra trong các thẻ hoặc thuộc tính, như trong các ví dụ trước đó. Tuy nhiên, điều này đặc biệt quan trọng đối với các vùng CSS và JavaScript, vì tính phức tạp của các cấu trúc dữ liệu có thể khiến cho việc tấn công XSS trở nên cực kỳ khó khăn.
Dữ liệu phổ biến bạn có thể muốn người dùng có thể cung cấp cho JavaScript của bạn như Facebook, Youtube và ID của Twitter đều có thể được sử dụng trong khi có hạn chế này.Và, các thuộc tính màu CSS và các kiểu khác cũng có thể được tích hợp.
Bước 4: URL-Mã hóa URL Query String thông số
Nếu dữ liệu người dùng là đầu ra trong vòng một tham số URL của một chuỗi truy vấn liên kết, hãy chắc chắn để URL mã hóa dữ liệu. Một lần nữa, sử dụng PHP làm ví dụ, bạn có thể chỉ cần sử dụng hàm urlencode(). Bây giờ, hãy làm rõ điều này và làm việc thông qua một vài ví dụ, vì tôi đã thấy nhiều sự nhầm lẫn liên quan đến điểm cụ thể này.
Phải URL mã hóa
Ví dụ sau kết quả đầu ra dữ liệu người dùng mà phải được mã hóa URL vì nó được sử dụng như một giá trị trong chuỗi truy vấn.
http://site.com?id=USER_DATA_HERE_MUST_BE_URL_ENCODED”>
Phải Không URL-Encode
Ví dụ sau xuất ra dữ liệu người dùng cung cấp cho toàn bộ URL. Trong trường hợp này, dữ liệu người dùng phải được thoát bằng hàm thoát chuẩn (HTML mã hóa bất kỳ <,>, &, ‘,"), không được mã hóa URL. Mã hóa URL ví dụ này sẽ dẫn đến các liên kết không đúng định dạng.
Nếu liên kết này URL của bạn hoặc liên kết từ cơ sở dữ liệu ... vì nếu nó từ URL .. y Bạn nên lọc '$ _GET' – Baba
Tôi không nhận được hoặc xử lý bất kỳ thông số nào trên trang này .. –
Bạn có ý gì khi không nhận được bất kỳ thông số nào trên trang này? – Baba