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

Cập nhật ngày: 28/03/2024 - Đã 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

Danh mục:

1. Xóa bỏ ‘X-powered-by’

2. Không sử dụng Phiên bản Express / Node không được chấp nhận 

3. Nâng cấp SSL lên TLS 4. Không sử dụng thành phần có lỗ hổng đã biết 

5. Quản lý Session 

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

7. Đừng gây ô nhiễm không gian toàn cầu 

8. Sử dụng chế độ nghiêm ngặt 

9. Phân tích code Analysis 

10. Đính kèm Trình để xử lý lỗi 

11. Không đăng nhập thông tin nhạy cảm 

12. Không chạy Node dưới dạng gốc 

13. Sử dụng Module CSRF

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.

Bạn đang muốn tìm kiếm 1 công việc với mức thu nhập cao.
✅ Hoặc là bạn đang muốn chuyển đổi công việc mà chưa biết theo học ngành nghề gì cho tốt.
✅ Giới thiệu với bạn Chương trình đào tạo nhân sự dài hạn trong 12 tháng với những điều đặc biệt mà chỉ có tại IMIC và đây cũng chính là sự lựa chọn phù hợp nhất dành cho bạn:
👉 Thứ nhất: Học viên được đào tạo bài bản kỹ năng, kiến thức chuyên môn lý thuyết, thực hành, thực chiến nhiều dự án và chia sẻ những kinh nghiệm thực tế từ Chuyên gia có nhiều năm kinh nghiệm dự án cũng như tâm huyết truyền nghề.
👉 Thứ hai: Được ký hợp đồng cam kết chất lượng đào tạo cũng như mức lương sau tốt nghiệp và đi làm tại các đối tác tuyển dụng của IMIC. Trả lại học phí nếu không đúng những gì đã ký kết.
👉 Thứ ba: Cam kết hỗ trợ giới thiệu công việc sang đối tác tuyển dụng trong vòng 10 năm liên tục.
👉 Thứ tư: Được hỗ trợ tài chính với mức lãi suất 0 đồng qua ngân hàng VIB Bank.
👉  Có 4 Chương trình đào tạo nhân sự dài hạn dành cho bạn lựa chọn theo học. Gồm có:
1)  Data Scientist full-stack
2)  Embedded System & IoT development full-stack
3)  Game development full-stack
4)  Web development full-stack 
✅ Cảm ơn bạn đã dành thời gian lắng nghe những chia sẻ của mình. Và tuyệt vời hơn nữa nếu IMIC được góp phần vào sự thành công của bạn. 
✅ Hãy liên hệ ngay với Phòng tư vấn tuyển sinh để được hỗ trợ về thủ tục nhập học.
✅ Chúc bạn luôn có nhiều sức khỏe và thành công!

Tham khảo các khóa đào tạo nhân sự qua danh mục