13 cách làm cho ứng dụng an toàn trong NodeJS

Cập nhật ngày: 29/09/2021 - Đã có 2945 lượt xem bài viết này!
13 cách làm cho ứng dụng an toàn trong NodeJS
Cộng đồng Node.JS đang nỗ lực khắc phục các vấn đề bảo mật khi chúng phát sinh. Tuy nhiên, kết quả cuối cùng phụ thuộc vào cộng đồng nhà phát triển theo các nguyên tắc bảo mật. Trong bài viết này, tôi sẽ thảo luận các phương pháp hay nhất mà bạn nên làm để đảm bảo an toàn cho ứng dụng:

13 cách làm cho ứng dụng an toàn trong NodeJS

1. Xóa bỏ ‘X-powered-by’
Bảo mật yêu cầu xác thực mã của bạn. Không cần phải đề cập đến nền tảng bạn đang sử dụng. Gửi các bit dữ liệu đến máy khách để đáp ứng với bất kỳ yêu cầu web nào là một sai lầm phổ biến để cung cấp kiến thức cơ bản cho tấn công mức nhập cảnh.
Để tiết kiệm băng thông trong ứng dụng Express của bạn, có hai cách để vô hiệu hóa hoặc ẩn loại thông tin này.
-    Just to ask Express to not add it like:
var app=express();
app.disable(‘X-powered-by’);
-    Make middleware like:
app.use(function(req, res, next){
res.removeHeader(‘X-powered-by’);
next();
});

2. Không sử dụng Phiên bản Express / Node không được chấp nhận
Bạn nên sử dụng phiên bản Node hoặc Express mới nhất. Nhiều vấn đề bảo mật được đề cập trong bản phát hành mới cùng với thời gian. Chẳng hạn như, phiên bản Express 2.x và 3.x không được dùng nữa, không còn được dùng nữa nghĩa là các chức năng có sẵn trong phiên bản này không còn duy trì trong các bản phát hành tiếp theo. Vì vậy, hãy sử dụng phiên bản Node mới nhất và nếu bạn đang sử dụng phiên bản trước đó, hãy chuyển sang phiên bản mới nhất.

3. Nâng cấp SSL lên TLS
Nếu bạn đang sử dụng SSL (Lớp cổng bảo mật) ban đầu, hãy thử nâng cấp nó lên TLS (Bảo mật lớp truyền tải). Về cơ bản, đó là bước tiếp theo để các biện pháp bảo mật SSL. TLS đảm bảo bạn truyền dữ liệu nhạy cảm, được mã hóa ở cả hai đầu. Bằng cách này, dữ liệu được mã hóa trước khi gửi nó qua máy thu. Có nhiều công cụ hữu ích có sẵn để nhận chứng chỉ TLS của bạn như mã hóa của chúng ta là một công cụ mã nguồn mở và miễn phí bên dưới Tổ chức phát hành chứng chỉ (CA).

4. Không sử dụng thành phần có lỗ hổng đã biết
Theo dõi lỗ hổng bảo mật bằng cách không sử dụng thành phần có lỗ hổng đã biết. Trong khi áp dụng các tùy chọn này, hãy đảm bảo rằng các phụ thuộc của bạn được bảo mật.
- Một công cụ tốt hơn để xử lý nó là Retire.js. Khi nó quét, nó cho phép bạn biết nơi bạn có một sự phụ thuộc có một lỗ hổng đã biết.
$ npm i -g retire
$ retire project
Nó sẽ làm nổi bật tất cả các thành phần dễ bị lỗi đã biết trong ứng dụng web của bạn. Nó đề cập không chỉ các mô đun nút mà còn bất kỳ thư viện front-end nào nữa.
- Một cách khác là kiểm tra kỹ lưỡng bằng Node Security Project cung cấp cho bạn giám sát bảo mật liên tục
$ npm install –global nsp
$ cd your-fantastic-app
$ nsp check
- Cách thứ ba để bảo mật ứng dụng của bạn là ‘sử dụng Helmet’ giúp bảo vệ ứng dụng của bạn khỏi một số lỗ hổng web nổi tiếng bằng cách đặt tiêu đề HTTP liên quan đến bảo mật một cách thích hợp.
$ npm install –save helmet
Sau đó, sử dụng dòng mã này vào tệp app.js của bạn
var helmet = require(‘helmet’);
app.use(helmet());
Helmet sẽ giúp bạn tiết kiệm từ bất kỳ vấn đề nào như xác thực dữ liệu, phun sql, XSS và tiêm lệnh.

5. Quản lý Session
Tầm quan trọng của việc tạo ra các cookie an toàn là một phần quan trọng trong quản lý phiên. Đặc biệt là khi chúng tôi đang phát triển một ứng dụng web động. Điều này sẽ hữu ích trong việc duy trì trạng thái trong giao thức không trạng thái như HTTP. Có hai mô-đun chính của cookie được tích hợp vào phiên bản Express 3.x, các modules
- Express-session (lưu id phiên không phải là dữ liệu phiên trên máy chủ)
- Cookie-sesion (thay vì khóa phiên, nó nối tiếp toàn bộ dữ liệu trong cookie)
Sự khác biệt chính giữa hai cách này là cách họ lưu dữ liệu trên máy chủ.

6. Sử dụng Cookie an toàn

7. Đừng gây ô nhiễm không gian toàn cầu
Có các hàm như eval () mở mã của bạn để tấn công tiêm và làm cho ứng dụng Node của bạn không an toàn. Chỉ cần đảm bảo không sử dụng eval () hoặc bạn bè của nó như phương thức setTimeOut (mã, 2) hoặc setInterval (mã, 2) sử dụng eval () ở chế độ nền.

8. Sử dụng chế độ nghiêm ngặt
Chế độ nghiêm ngặt là một cách để chọn tham gia vào biến thể JavaScript bị hạn chế. Nó có ý nghĩa khác với mã bình thường. Nó loại bỏ một số lỗi JavaScript và cũng sửa lỗi được báo cáo bằng công cụ JavaScript. Nó sẽ ném tất cả các lỗi và khai báo biến đúng cách.

9. Phân tích code Analysis
Làm phân tích code analysis trong ứng dụng của bạn, vì nó là điều quan trọng nhất bạn nên làm cho bạn bảo mật ứng dụng. Nó sẽ bắt gặp nhiều vấn đề ở giai đoạn đầu. 
- Commit hooks in (D)VCSes.
- Sử dụng JSHint, JSLint hoặc ESLint.
- Tạo policy cho code analysis
- Cập nhật và kiểm tra lại policy thường xuyên.

10. Đính kèm Trình để xử lý lỗi
Luôn xử lý đối tượng lỗi trong call back. Đính kèm listerners vào các lỗi, sự kiện và các ngoại lệ không được hoan nghênh. Ví dụ:
Var http = require(“http”);
http.get(“https://nodejs.org/”,function(res){
res.on(“data”, function(chunk){
do _something_with_chunk;
});
res.on(“error”, function(err){
});

11. Không đăng nhập thông tin nhạy cảm
Khi bạn định triển khai ứng dụng giao diện người dùng, không bao giờ hiển thị thông tin đăng nhập API hoặc bất kỳ thông tin nhạy cảm nào trong mã nguồn của bạn. Bởi vì thông tin đó có thể đọc được cho bất kỳ ai.
Để giảm thiểu loại vấn đề này và để đảm bảo rằng dữ liệu sẽ không vô tình xuất hiện.
- Sử dụng yêu cầu kéo.
- Kiểm tra hoặc xem xét mã thường xuyên.

12. Không chạy Node dưới dạng gốc
Để chạy ứng dụng nút trên cổng 80 hoặc 443, mọi người thường chạy ứng dụng Node với quyền superuser. Vì sử dụng sudo node app.js, hệ thống của bạn sẽ hoàn toàn có hiệu lực. Vì vậy, bạn nên thiết lập máy chủ / proxy HTTP để chuyển tiếp yêu cầu. Yêu cầu này có thể từ bất kỳ máy chủ Web nào như Nginx và Apache.

13. Sử dụng Module CSRF
Yêu cầu Cross-site Forgery là một cuộc tấn công buộc người dùng thực thi các hành động không mong muốn trên ứng dụng Web của mình. Để giảm thiểu loại tấn công này, hãy thêm Module CSRF vào mã của bạn.

Xem khóa đào tạo nhân sự theo danh mục!

Xem các khóa đào tạo nhân sự