Một cách nguy hiểmSetInnerHTML TypeScript

Việc sử dụng innerHTML không đúng cách có thể khiến bạn gặp phải một cuộc tấn công kịch bản chéo trang [XSS]. Vệ sinh đầu vào của người dùng để hiển thị nổi tiếng là dễ xảy ra lỗi và việc không vệ sinh đúng cách là một trong những nguyên nhân hàng đầu gây ra lỗ hổng web trên internet

Triết lý thiết kế của chúng tôi là làm cho mọi thứ an toàn phải “dễ dàng” và các nhà phát triển nên nêu rõ ý định của họ khi thực hiện các hoạt động “không an toàn”. Tên prop dangerouslySetInnerHTML được cố ý chọn để gây sợ hãi và giá trị prop [một đối tượng thay vì một chuỗi] có thể được sử dụng để biểu thị dữ liệu đã được làm sạch

Sau khi hiểu đầy đủ các phân nhánh bảo mật và làm sạch dữ liệu đúng cách, hãy tạo một đối tượng mới chỉ chứa khóa __html và dữ liệu đã làm sạch của bạn làm giá trị. Đây là một ví dụ sử dụng cú pháp JSX

function createMarkup[] { return {__html: 'First · Second'}; };

Vấn đề là nếu bạn vô tình nói

nó sẽ không được hiển thị vì getUsername[] sẽ trả về một string đơn giản chứ không phải một đối tượng {__html: ''}. Ý định đằng sau cú pháp

Nhưng tại sao nó được gọi là nguy hiểmSetInnerHTML? . Hãy hiểu ngắn gọn

Tại sao nó được gọi là nguy hiểmSetInnerHTML?

Cái tên nguy hiểmSetInnerHTML được cố ý chọn để gây sợ hãi. Nó không phải là một sai lầm đặt tên

Nói chung, việc đặt HTML từ mã là rủi ro vì nó có thể khiến người dùng của bạn gặp phải một cuộc tấn công kịch bản chéo trang [XSS]. Bạn có thể đặt HTML trực tiếp từ React, nhưng bạn phải nhập dangerouslySetInnerHTML và chuyển một đối tượng bằng phím __html, để nhắc nhở bản thân rằng điều đó nguy hiểm

Nếu bạn đang cho phép người dùng chèn HTML trực tiếp vào trang web của mình, thì về mặt kỹ thuật, họ có thể nhúng các tập lệnh và mã độc hại và khi bạn hiển thị HTML đó trong ứng dụng phản ứng của mình, các tập lệnh đó có thể thực thi. một ví dụ đã được biểu diễn ở dưới

import React from "react";
import './App.css';
const App = [] => {const data = `

Welcome to this page


May the code be with you



`;
return [

Understanding dangerouslySetInnerHTML




];
}export default App;

Đó là lý do tại sao bạn cần đảm bảo HTML của mình được làm sạch trước khi chèn nó vào ứng dụng phản ứng của mình. Bạn có thể sử dụng các thư viện như dompurify để làm như vậy

Một ví dụ về cách bạn có thể làm sạch mã của mình bằng cách sử dụng dompurify được hiển thị bên dưới

Màn biểu diễn

Khi bạn đang sử dụng một cách nguy hiểmSetInnerHTML, đằng sau hậu trường, React sẽ biết rằng HTML bên trong thành phần đó không phải là thứ mà nó quan tâm vì nó đến từ một nguồn khác

Vì React sử dụng DOM ảo, nên khi so sánh sự khác biệt với DOM thực, nó có thể bỏ qua phần so sánh với DOM ảo để đạt được hiệu suất cao hơn

Nếu bạn chỉ sử dụng InternalHTML, React không có cách nào để biết nút DOM đã được sửa đổi

Sự kết luận

Tóm lại, dangerouslySetInnerHTML không gì khác ngoài sự thay thế của innerHTML trong React và nên được sử dụng cẩn thận. Tên nguy hiểmSetInnerHTML được chọn có chủ ý để nhắc bạn rằng nó nguy hiểm và có thể gây ra các lỗ hổng XSS để bạn đảm bảo HTML của mình được làm sạch trước khi chèn nó vào ứng dụng phản ứng của mình

Video giải thích

Thêm nội dung tại PlainEnglish. io. Đăng ký nhận bản tin hàng tuần miễn phí của chúng tôi. Theo dõi chúng tôi trên Twitter và LinkedIn. Tham gia cộng đồng của chúng tôi

Tại sao bạn không nên sử dụng một cách nguy hiểmSetInnerHTML?

Do tính dễ bị tấn công của tập lệnh chéo trang [XSS] , DangerlySetInnerHTML có thể tạo thành mối đe dọa lớn đối với ứng dụng của bạn, như tên cho thấy.

Bạn có thể sử dụng một cách nguy hiểmSetInnerHTML không?

Bạn có thể sử dụng một cách nguy hiểmSetInnerHTML không? . Nó sẽ giúp bạn chuyển HTML trực tiếp vào một thành phần trong JSX. Yes, it will help you render markups in ways that the React JSX element will prohibit by default. It will help you pass HTML directly into a component within JSX.

Chúng ta có thể sử dụng một cách nguy hiểmSetInnerHTML trong đoạn React không?

Bằng cách cho phép một cách nguy hiểmSetInnerHTML, bạn tạo ấn tượng rằng một người có thể đặt thuộc tính trên React. Mảnh .

Chúng ta có thể sử dụng InternalHTML trong React JS không?

innerHTML prop rất rủi ro vì rất dễ khiến người dùng của bạn bị tấn công bằng tập lệnh chéo trang [XSS]. React cung cấp một cách nguy hiểmSetInnerHTML để thay thế cho InternalHTML prop để nhắc nhở bạn rằng nó nguy hiểm. Do đó, bạn nên sử dụng prop nguy hiểmSetInnerHTML thay vì InternalHTML prop .

Chủ Đề