Javascript tạo nonce ngẫu nhiên
Có nhiều cách không an toàn để liệt kê danh sách trắng các thẻ tập lệnh nội tuyến, trình xử lý sự kiện nội tuyến, thẻ kiểu nội tuyến và kiểu nội tuyến, nhưng tôi sẽ không nói về chúng vì chúng không an toàn và phá vỡ toàn bộ quan điểm của CSP Show Đặt CSP trong Nút. jsĐể xác định tài nguyên được phép trong CSP thông qua Nút. js, chúng ta phải khai báo chúng dưới dạng tiêu đề phản hồi
CSP nằm trong tiêu đề phản hồi và nơi trình duyệt sẽ xem để biết anh ta có thể hiển thị những gì Sử dụng Express, chúng ta chỉ cần làm như sau
Vào chế độ toàn màn hình Thoát chế độ toàn màn hình Như bạn có thể thấy, chúng tôi đã xác định các lệnh được sử dụng nhiều nhất cho 4, nghĩa là chúng tôi chỉ cho phép các tài nguyên từ máy chủ hiện tại (bao gồm lược đồ URL và số cổng) mà thôi.Nếu bạn chạy ứng dụng này ( 5) và theo liên kết, bạn sẽ nhận được một Hello World đẹp mắtNếu bạn mở Bảng điều khiển (F12), bạn sẽ không thấy gì vì hiện tại chúng tôi chưa làm gì nhiều EJSĐể hiển thị trang 6, hãy tải các tập lệnh và kiểu bên ngoài để kiểm tra CSP của chúng tôi, tôi sẽ sử dụng EJSVui lòng sử dụng bất kỳ công cụ mẫu nào khác phù hợp với nhu cầu của bạn Tôi đánh giá cao EJS vì lý do sau
Sau khi cài đặt EJS ( 7), chúng ta sẽ phải tạo một thư mục 8, ở thư mục gốc của ứng dụng, để lưu trữ các tệp 9EJS sẽ xem bên trong thư mục này để 0 (các) trang của bạn theo cách bạn hướng dẫn anh ấy thực hiệnTrong thư mục này, tạo một tệp tên là 1 với nội dung sau
Vào chế độ toàn màn hình Thoát chế độ toàn màn hình Có, tệp 9 là tệp 6 trong đó chúng tôi có thể sử dụng 4 đơn giản, chúng tôi sẽ thấy điều đó trong giây látCập nhật tệp máy chủ chính của chúng tôi để trông như thế này
Vào chế độ toàn màn hình Thoát chế độ toàn màn hình nguồn lực bên ngoàiBây giờ, để kiểm tra CSP của chúng tôi, chúng tôi chỉ cần tải một số tài nguyên bên ngoài 1 để trông như thế này
Vào chế độ toàn màn hình Thoát chế độ toàn màn hình Lưu 1, tải lại ứng dụng trong trình duyệt và mở Bảng điều khiển
Vào chế độ toàn màn hình Thoát chế độ toàn màn hình 0Vào chế độ toàn màn hình Thoát chế độ toàn màn hình Bây giờ, bạn có thể thấy rằng CSP của chúng tôi đã chặn Pure. css và Lodash, vì vậy mọi thứ đang hoạt động như mong đợi vì chúng không được định nghĩa trong CSP của chúng tôi là tài nguyên được phép tải trong trình duyệt Mũ bảo hiểmHãy tưởng tượng, không nhất thiết là vì nó xảy ra khi bạn đang tạo một ứng dụng, có một số lượng tập lệnh và kiểu hợp lý để đưa vào danh sách trắng
Hãy thêm Mũ bảo hiểm vào ứng dụng Express của chúng tôi bằng lệnh sau 7Để dễ dàng duy trì CSP của chúng ta, hãy di chuyển nó vào trong thư mục 8, thư mục gốc của ứng dụng, trong một tệp có tên 9Cấu trúc ứng dụng trông giống như cây sau 1Vào chế độ toàn màn hình Thoát chế độ toàn màn hình Hãy thêm một CSP với Mũ bảo hiểm 2Vào chế độ toàn màn hình Thoát chế độ toàn màn hình và cập nhật 0 để gọi phần mềm trung gian này 3Vào chế độ toàn màn hình Thoát chế độ toàn màn hình Lưu cả hai tệp, làm mới trình duyệt của bạn và mở Bảng điều khiển 4Vào chế độ toàn màn hình Thoát chế độ toàn màn hình 5Vào chế độ toàn màn hình Thoát chế độ toàn màn hình Như bạn có thể thấy, hiện chỉ có Lodash bị chặn 🤔 Về cơ bản, có rất nhiều điều đang xảy ra và sẽ có một loạt bài đăng để giải thích chi tiết từng tiêu đề và cách định cấu hình chúng Nhưng bạn biết đấy, Mũ bảo hiểm đặt một loạt các giá trị mặc định để bảo vệ điểm cuối của bạn 1Đây là chỉ thị cho phép Pure. css Nó có nghĩa là. "cho phép bất kỳ nguồn kiểu nào từ miền của tôi hoặc nguồn kiểu được cung cấp qua https hoặc kiểu nội tuyến" Nhưng như tôi đã nói trước đây, bất kỳ biểu thức 2 nào đều không an toàn và không nên được sử dụng trừ khi chúng thực sự không còn lựa chọn nào khácTôi đã liên kết ở phần đầu của phần này với tài liệu của Mũ bảo hiểm Chúng tôi sẽ giải quyết tất cả các vấn đề một cách chính xác trong phần tiếp theo và phần cuối cùng Hash và NonceĐể cho phép thực thi tập lệnh nội tuyến, trình xử lý sự kiện nội tuyến và kiểu nội tuyến, có thể chỉ định một hàm băm hoặc nonce khớp với mã nội tuyến, để tránh sử dụng biểu thức 3BămBăm là một chuỗi bao gồm hai phần được kết nối bằng dấu gạch ngang với nhau
CSP hỗ trợ sha256, sha384 và sha512 Nhưng khi bạn băm một tập lệnh hoặc một kiểu, chuỗi được tạo chỉ khớp với mã được băm, nghĩa là nếu mã thay đổi theo bất kỳ cách nào (dấu chấm, dấu cách, dòng mới, nhận xét, mã được thêm/xóa/định dạng) thì hàm băm sẽ không từ MDN
nonceMặt khác, nonce là số mật mã được sử dụng một lần, được tạo bằng trình tạo số ngẫu nhiên bảo mật bằng mật mã, phải là duy nhất cho mỗi phản hồi HTTP dưới dạng chuỗi mã hóa base64 ngẫu nhiên gồm ít nhất 128 bit dữ liệu Vì vậy, trong trường hợp kết xuất phía máy chủ, một nonce thường được sử dụng hơn và có thể được sử dụng cho các tập lệnh và kiểu nội tuyến và bên ngoài 4 sẽ không cho phép các yêu cầu biểu định kiểu bắt nguồn từ quy tắc 5Để sử dụng một nonce, cho một tập lệnh, chúng ta phải khai báo ở đầu chỉ thị 1 biểu thức 7 để cho phép thực thi tập lệnh đó cũng như bất kỳ tập lệnh nào được tải bởi tập lệnh gốc nàyKhi sử dụng biểu thức 7, các biểu thức khác như 4 hoặc 3 sẽ bị bỏ quaTôi muốn giữ cho mã của mình sạch sẽ và có thể bảo trì được vì lúc này hay lúc khác tôi sẽ muốn cập nhật mã, đây là lý do tại sao tôi chia (như hầu hết các nhà phát triển) mã của mình thành các phần để mỗi phần có thể dễ dàng theo dõi trong tương lai gần hoặc xa. 1 vào thư mục 8, cấu trúc ứng dụng bây giờ trông giống như cái cây sau 6Vào chế độ toàn màn hình Thoát chế độ toàn màn hình Mở 1 và thêm nội dung sau 7Vào chế độ toàn màn hình Thoát chế độ toàn màn hình Mô-đun tiền điện tử là chức năng tích hợp sẵn của Node. js nhưng tốt hơn hết là kiểm tra xem nó có được bao gồm hay không, trong bản cài đặt của chúng tôi, giống như tài liệu Làm cách nào để tạo nonce ngẫu nhiên trong JavaScript?Trước tiên, chúng tôi xác định một chuỗi gồm tất cả các ký tự được phép trong chuỗi ngẫu nhiên cuối cùng của chúng tôi. Sau đó, chúng tôi lặp lại cho đến khi có độ dài nhất định sẽ đại diện cho kích thước chuỗi. Trong vòng lặp này, chúng ta sẽ xem xét chuỗi ký tự được phép dưới dạng một loại mảng (từng ký tự một) và chọn ngẫu nhiên một chỉ mục của mảng
Nonce trong Javascript là gì?Thuộc tính toàn cục nonce là một thuộc tính nội dung xác định một nonce mật mã ("số được sử dụng một lần") có thể được Chính sách bảo mật nội dung sử dụng để xác định xem một lần tìm nạp nhất định có được phép tiến hành cho một phần tử nhất định hay không
Làm cách nào để tạo tên ngẫu nhiên trong JavaScript?Mảng. áp dụng (null, Mảng (N)). bản đồ (hàm () { return s. charAt(Toán. tầng (Toán. ngẫu nhiên() * s. chiều dài)); . tham gia(''); . Toán học. ngẫu nhiên(). toString(36). lát(-5); . ngẫu nhiên() trả về 0. 0?. @ x-ray, bạn sẽ nhận được "0";). Chính xác. ;) Làm cách nào để lấy chuỗi ngẫu nhiên từ mảng trong JavaScript?Ví dụ. Lấy mục ngẫu nhiên từ một mảng . Một số ngẫu nhiên từ 0 đến mảng. chiều dài được tạo bằng Math. phương pháp ngẫu nhiên () Toán học. floor() trả về giá trị số nguyên gần nhất được tạo bởi Math. ngẫu nhiên() Chỉ mục ngẫu nhiên này sau đó được sử dụng để truy cập một phần tử mảng ngẫu nhiên |