Tôi tình cờ đọc về XSS và cách tránh XSS. Từ những gì tôi đã đọc, tôi đã biết rằng chúng ta cần lọc đầu vào, xử lý thích hợp mã ứng dụng và mã hóa đầu ra để làm cho ứng dụng web có phần XSS an toàn. Sau khi trải qua một số bài báo, một số nghi ngờ vẫn tồn tại.Một số giải thích về XSS
Khi tôi cố gắng jQuery.text ("untrusted_data") hoặc element.text = untrusted_data, các trình duyệt dường như được mã hóa nội dung một cách hoàn hảo, nhưng tôi đã đọc ở đâu khác mà client-side mã hóa không được tin cậy và bạn phải "luôn" mã hóa ở phía máy chủ. Tại sao mã hóa phía máy khách được coi là không an toàn?
Bất cứ khi nào tôi đã cố gắng để thiết lập giá trị sử dụng jQuery.val (untrusted_data) hoặc element.value = untrusted_data nó có vẻ là đủ an toàn. Vì vậy, nó thực sự XSS an toàn hoặc tôi đã bỏ lỡ bất kỳ trường hợp ở đây?
- Ngoài ra, tôi tình cờ đọc ở đâu đó rằng jQuery.setAttribute (attrName, untrusted_data) và setAttribute (attrName, untrusted_data) thường coi là an toàn chỉ khi Thuộc tính tên không bao gồm các thuộc tính dựa URL Context (src, href etc) hoặc Trình xử lý sự kiện (onClick, onMouseOver, v.v.). Nếu đó là trường hợp, làm thế nào tôi phải thiết lập một thuộc tính href bằng cách sử dụng setAttribute ("href", untrusted_data)? Là encodeForHtmlAttribute (untrusted_data) từ phía máy chủ đúng cách tiếp cận?
- Tôi nên xử lý việc tạo html động như thế nào. Hãy xem xét ví dụ dưới đây
<div id="divName1" onClick="copyData()">untrusted_data</div>
<div id="divName2"></div>
function copyData()
{
var divValue = jQuery("#divName1").html();
jQuery("#divName2").html(divValue);/XSS Here
}
Những gì tôi muốn đạt được ở đây là để có được văn bản từ divName1 và dán nội dung divName2 của. Mã tôi đã viết ở trên là XSS dễ bị tổn thương. Tôi có thể thay đổi điều này để
jQuery ("# divName2"). Text (divValue)
Vì vậy, điều này sẽ đảm bảo mã hóa, nhưng như tôi hiểu, chúng ta nói rằng mã hóa client-side là không an toàn và chỉ sử dụng mã hóa phía máy chủ. Làm thế nào tôi nên viết này để được XSS an toàn mà không cần sử dụng mã hóa phía máy khách? Tôi là một chút nhầm lẫn ở đây :(. Xin hãy giúp tôi ra để xóa những nghi ngờ.
'element.text' chính nó là an toàn, nhưng bạn có thể gặp phải vấn đề nếu bạn sử dụng nội suy chuỗi để truyền dữ liệu đến mã máy khách. –