Cách bảo mật các ứng dụng Node.js: 3 cách tiếp cận linh hoạt
Express.js cung cấp một giải pháp hiệu quả để xây dựng các ứng dụng web phụ trợ, nhưng giải pháp này lại thiếu tính bảo mật. Khi bạn đang xây dựng một ứng dụng web, bạn cần có các biện pháp bảo mật đầy đủ để bảo vệ dữ liệu của người dùng.
May mắn thay, bạn có thể thực hiện các phương pháp để tăng cường bảo mật cho các ứng dụng Express.js của mình. Tất cả các mẹo này sẽ giúp tăng cường bảo mật cho các ứng dụng của bạn bằng các phương pháp khác nhau.
Mục Lục
Thiết lập ứng dụng Express.js
Bắt đầu bằng cách thiết lập máy chủ web Express.js demo bằng cách sử dụng npm, Trình quản lý gói nút. Tạo một thư mục dự án cục bộ và thay đổi thư mục thành thư mục đó trên thiết bị đầu cuối của bạn.
mkdir express-project
cd express-project
Tiếp theo, tạo một gói.json tập tin trong thư mục gốc.
npm init -y
Hãy tiếp tục và cài đặt Express.js.
npm install express
Cuối cùng, tạo một máy chủ.js tệp trong thư mục gốc của thư mục dự án của bạn và thêm đoạn mã sau để thiết lập một máy chủ web cơ bản.
const express = require("express")
const app = express()
const PORT = process.env.PORT || 5000app.get("https://www.smartreviewaz.com/", (req, res) => {
res.json("Hello, World!")
})
app.listen(PORT, () => {
console.log(`Starting server on http://localhost:${PORT}`)
})
Khởi động máy chủ bằng lệnh này:
node server.js
Bây giờ bạn đã sẵn sàng khám phá một số biện pháp bạn có thể sử dụng để bảo mật ứng dụng Express.js của mình.
1. Bảo mật các ứng dụng Express.js bằng Mũ bảo hiểm
Mũ bảo hiểm là một phần mềm trung gian Node.js giúp bảo mật các ứng dụng phía máy chủ bằng cách đặt các tiêu đề bảo mật HTTP khác nhau. Các tiêu đề này cung cấp các cơ chế bảo vệ thiết yếu chống lại các lỗ hổng bảo mật phụ trợ phổ biến, chẳng hạn như cross-site scripting (XSS), cross-site request forgery (CSRF), v.v.
Express.js không định cấu hình các tiêu đề bảo mật HTTP theo mặc định, để lại một lỗ hổng bảo mật tiềm ẩn làm lộ các tiêu đề nhạy cảm tiềm ẩn. Sử dụng thông tin này, các tác nhân độc hại có thể có quyền truy cập trái phép hoặc làm gián đoạn ứng dụng của bạn.
Mũ bảo hiểm hoạt động như một lá chắn quan trọng, đảm bảo rằng các phản hồi HTTP của ứng dụng áp dụng các biện pháp bảo mật cần thiết, giảm đáng kể bề mặt tấn công tiềm ẩn.
Khám phá tính bảo mật của các ứng dụng Express.js mà không cần mũ bảo hiểm
Khi máy chủ đang chạy, hãy kiểm tra các tiêu đề của ứng dụng. Hãy tiếp tục và thực hiện các yêu cầu HTTP tới API bằng cách sử dụng Postman hoặc bất kỳ ứng dụng khách nào khác hiển thị tiêu đề phản hồi. Hầu hết các trình duyệt bao gồm một bộ công cụ dành cho nhà phát triển sẽ cho phép bạn làm như vậy.
Khi bạn gửi yêu cầu đến điểm cuối nhà, bạn sẽ thấy các kết quả tương tự trong tiêu đề phần phản hồi trong Postman.
chú ý X-Powered-By tiêu đề. Thông thường, các công nghệ phụ trợ sử dụng tiêu đề này để chỉ ra khung hoặc phần mềm khác cung cấp năng lượng cho ứng dụng web. Bạn thường nên loại bỏ X-Powered-By tiêu đề trong một môi trường sản xuất.
Bằng cách đó, bạn sẽ ngăn những kẻ tấn công tiềm năng lấy được thông tin có giá trị mà chúng có thể sử dụng để khai thác các lỗ hổng đã biết liên quan đến ngăn xếp công nghệ của bạn.
Kiểm tra cấu hình bảo mật của máy chủ Express.js
Để đánh giá trạng thái bảo mật của các ứng dụng của bạn, chúng tôi sẽ sử dụng công cụ trực tuyến Tiêu đề bảo mật. Ứng dụng này được thiết kế đặc biệt để đánh giá cấu hình bảo mật của các tiêu đề HTTP cho các ứng dụng phía máy khách cũng như phía máy chủ.
Trước tiên, bạn cần làm cho máy chủ Express.js cục bộ của mình có thể truy cập được qua Internet. Có hai cách tiếp cận khả thi để đạt được điều này: triển khai ứng dụng Express.js của bạn lên máy chủ đám mây hoặc sử dụng ngrok.
Để sử dụng nó, hãy tải xuống tệp ngrok zip, giải nén tệp thực thi và khởi chạy ứng dụng. Sau đó, chạy lệnh sau để lưu trữ máy chủ Express.js cục bộ của bạn bằng ngrok.
ngrok http 5000
ngrok sẽ xuất ra một số thông tin ngắn gọn như sau:
Sao chép được cung cấp chuyển tiếp URL và dán nó vào Tiêu đề bảo mật‘ hộp nhập và nhấp vào Quét cái nút.
Khi quá trình đánh giá bảo mật hoàn tất, bạn sẽ nhận được một báo cáo tương tự.
Dựa trên báo cáo, rõ ràng là máy chủ Express.js nhận được kết quả kém F cấp. Điểm thấp này là kết quả của việc không có các tiêu đề bảo mật HTTP thiết yếu trong cấu hình của máy chủ—việc không có các tiêu đề này khiến máy chủ dễ gặp rủi ro bảo mật tiềm ẩn.
Tích hợp Mũ bảo hiểm trong Ứng dụng Express.js
Bây giờ, hãy tiếp tục và tích hợp Mũ bảo hiểm vào ứng dụng Express.js của bạn. Chạy lệnh bên dưới để cài đặt phần phụ thuộc.
npm install helmet
Cập nhật tệp server.js của bạn và nhập Mũ bảo hiểm.
const helmet = require("helmet")
Bây giờ, hãy thêm Mũ bảo hiểm vào ứng dụng Express.js của bạn.
app.use(helmet())
Cuối cùng, quay máy chủ phát triển, sao chép liên kết chuyển tiếp từ ngrok thiết bị đầu cuối và dán nó vào Tiêu đề an ninh trường đầu vào để quét lại máy chủ cục bộ. Khi quá trình quét lại hoàn tất, bạn sẽ thấy các kết quả tương tự như sau:
Sau khi tích hợp Mũ bảo hiểm, Express.js bao gồm một số tiêu đề bảo mật thiết yếu trong phản hồi HTTP. Cải tiến đáng kể này đã khiến ứng dụng Express.js chuyển sang một MỘT cấp.
Mặc dù Mũ bảo hiểm không phải là một giải pháp hoàn hảo, nhưng nó tăng cường đáng kể tính bảo mật tổng thể cho ứng dụng Express.js của bạn.
2. Bảo mật các ứng dụng Express.js bằng Joi, Thư viện xác thực đầu vào
Joi là một thư viện xác thực đầu vào giúp bảo mật các ứng dụng Express.js bằng cách cung cấp một cách thuận tiện để xác thực và làm sạch đầu vào của người dùng. Bằng cách xác định các lược đồ xác thực bằng Joi, bạn có thể chỉ định cấu trúc dự kiến, loại dữ liệu và các ràng buộc đối với dữ liệu đến.
Joi xác thực đầu vào dựa trên lược đồ đã xác định, đảm bảo rằng nó đáp ứng các tiêu chí đã chỉ định. Điều này giúp ngăn chặn các lỗ hổng bảo mật phổ biến như chèn dữ liệu, kịch bản chéo trang (XSS) và các cuộc tấn công thao túng dữ liệu khác.
Làm theo các bước sau để tích hợp Joi vào ứng dụng của bạn.
- Cài đặt Joi.
npm install joi - Nhập Joi vào tệp server.js của bạn.
const Joi = require('joi'); - Tạo lược đồ xác thực dữ liệu Joi xác định cấu trúc dự kiến và mọi ràng buộc đối với dữ liệu đầu vào.
const schema = Joi.object({
email: Joi.string().email().required(),
password: Joi.string().min(5).max(16).required()
}); - Xác thực tất cả dữ liệu đến bằng lược đồ đã xác định.
const { error, value } = schema.validate(req.body);if (error) {
return res.status(400).json({ error: error.details[0].message });
}
Bằng cách triển khai các bước này, bạn có thể tận dụng các khả năng xác thực đầu vào của Joi để bảo mật các ứng dụng Express.js của mình. Điều này sẽ đảm bảo dữ liệu đến đáp ứng các ràng buộc đã xác định, ngăn chặn các mối đe dọa bảo mật thao tác dữ liệu tiềm ẩn.
3. Bảo mật các ứng dụng Express.js bằng Cơ chế CORS
Chia sẻ tài nguyên nguồn gốc chéo (CORS) là một cơ chế mà máy chủ web sử dụng để quản lý nguồn gốc nào—máy khách hoặc ứng dụng phía máy chủ khác—có thể truy cập tài nguyên được bảo vệ của họ. Cơ chế này giúp bảo vệ chống lại các yêu cầu gốc chéo trái phép, ngăn chặn các sự cố như tấn công kịch bản chéo trang (XSS).
Để bảo mật các ứng dụng Express.js bằng CORS, hãy làm theo các bước sau:
- Cài đặt gói CORS.
npm install cors - Yêu cầu và sử dụng phần mềm trung gian CORS trong tệp server.js.
const cors = require('cors');
app.use(cors());
Bằng cách tích hợp phần mềm trung gian CORS vào ứng dụng Express.js của bạn, bạn kích hoạt tính năng Chia sẻ tài nguyên trên nhiều nguồn gốc. Điều này đảm bảo rằng bạn giảm thiểu các rủi ro bảo mật tiềm ẩn liên quan đến các yêu cầu trên nhiều nguồn gốc.
Bảo mật các ứng dụng phía máy chủ một cách dễ dàng
Bạn có thể sử dụng một hoặc nhiều biện pháp thiết yếu này để tăng cường bảo mật cho các ứng dụng Express.js của mình.
Mặc dù có nhiều biện pháp và cách tiếp cận để bảo vệ các ứng dụng phía máy chủ của bạn, nhưng điều quan trọng cần lưu ý là bạn nên ưu tiên bảo mật trong toàn bộ vòng đời phát triển. Đây là một nhiệm vụ bắt đầu ở giai đoạn thiết kế và sẽ tiếp tục cho đến khi triển khai.