2011-11-29 29 views
8

Tôi đang thử nghiệm các cuộc tấn công xss trên mã của riêng tôi. Ví dụ bên dưới là một hộp đơn giản, nơi người dùng có thể nhập bất cứ điều gì anh ta muốn. Sau khi nhấn "test!" nút, JS sẽ hiển thị các chuỗi đầu vào thành hai divs.This là một ví dụ tôi thực hiện để giải thích rõ hơn câu hỏi của tôi:html() vs các cuộc tấn công bên trongHTML jquery/javascript & XSS

<html> 
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> 
<script type="text/javascript"> 
    function testIt(){ 
     var input = document.getElementById('input-test').value; 
     var testHtml = document.getElementById('test-html'); 
     var testInnerHTML = document.getElementById('test-innerHTML'); 
     $(testHtml).html(input); 
     testInnerHTML.innerHTML = input; 
    } 
</script> 
<head>this is a test</head> 
<body> 
    <input id="input-test" type="text" name="foo" /> 
    <input type="button" onClick="testIt();" value="test!"/> 
    <div id="test-html"> 
    </div> 
    <div id="test-innerHTML"> 
    </div> 
</body> 

nếu bạn cố gắng sao chép nó vào một file .html và chạy nó, nó sẽ hoạt động tốt, nhưng nếu bạn cố gắng nhập <script>alert('xss')</script>, chỉ một hộp cảnh báo sẽ được ném: một hộp bên trong `test-html 'div (với hàm html()).

Tôi thực sự không thể hiểu tại sao điều này xảy ra, và cũng có thể, kiểm tra việc mã với firebug mang lại cho tôi kết quả này (sau khi tiêm kịch bản)

<body> 
this is a test 
<input id="input-test" type="text" name="foo"> 
<input type="button" value="test!" onclick="testIt();"> 
<div id="test-html"> </div> 
<div id="test-innerHTML"> 
    <script> 
    alert('xss') 
    </script> 
</div> 
</body> 

như bạn có thể nhìn thấy test-html div là trống rỗng, và test-innerhtml div contans script. Ai đó có thể cho tôi biết tại sao? Có phải vì html() là an toàn hơn đối với việc chèn các tập lệnh hay tương tự?

Xin cảm ơn trước, Trân trọng.

+2

Bạn không cần phải lo lắng về an ninh khi người dùng , bởi vì bất kỳ tập lệnh nào họ cố gắng chèn sẽ chỉ fect chúng tại thời điểm đó. Những gì bạn cần phải lo lắng là điều gì sẽ xảy ra khi văn bản được nhập vào máy chủ web của bạn - nếu bạn lưu trữ nó trong cơ sở dữ liệu, bạn cần đảm bảo rằng bạn không chỉ liên kết một cách mù quáng văn bản đã nhập vào cuối SQL truy vấn. Nếu sau đó bạn quay lại văn bản đã nhập trước đó, bạn cần phải chắc chắn rằng giá trị đã nhập được thoát để, ví dụ: "

0

có jquery html sẽ không làm cho thẻ script

nhưng nó không phải là an toàn hơn vì bạn có thể sử dụng nhiều trọng tải XSS khác như <a href> phong cách, biểu vv ..

+0

Nó * là * an toàn hơn, nó không phải là * hoàn toàn * an toàn và không nên dựa vào. – Mario

+0

vâng tôi đoán đó là sự thật, nhưng an toàn không phải là từ, chúng ta hãy đồng ý nó ít bị tổn thương hơn sau đó innerHTML. – Ben

+0

Thực ra, ** những gì jQuery làm dễ bị khai thác hơn ** vì điều đầu tiên mà jQuery thực hiện khi tìm thấy các thẻ '

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