Bài viết này sẽ giúp người đọc hiểu được Cross-site scriptingattacks [XSS] là gì, XSS hoạt động như thế nào và XSS phá hoại website như thế nào. Chúng tôi cũng sẽ giới thiệu cách ngăn chặn lỗ hổng này trong Node. nền tảng js. Bảo mật máy tính đóng một vai trò quan trọng trong việc duy trì và bảo vệ thông tin được lưu trữ trong các ứng dụng web
Các ứng dụng web hiện được ưa thích hơn khi cấp quyền truy cập vào các dịch vụ và thông tin trên mạng toàn cầu [WWW]. Các ứng dụng web cung cấp nhiều dịch vụ trên internet, chẳng hạn như kinh doanh điện tử và ngân hàng trực tuyến
Bất chấp những nỗ lực bảo vệ các ứng dụng web, chúng vẫn bị xâm phạm và tấn công nghiêm trọng. Các cuộc tấn công này đe dọa tính bảo mật của các ứng dụng web. Một cuộc tấn công như vậy được gọi là tấn công cross-site scripting [XSS]
Các cuộc tấn công kịch bản chéo trang là các vấn đề bảo mật phổ biến trong bảo mật web hiện đại. Các cuộc tấn công XSS được thực hiện bởi những kẻ tấn công sử dụng các ứng dụng web dễ bị tổn thương để tiêm mã độc
Mã độc thực thi trong trình duyệt, kẻ tấn công đánh cắp cookie từ người dùng tài khoản và lấy thông tin nhạy cảm và bí mật trong ứng dụng web
Khi mã độc được đưa vào, điều đó có thể đặt trang web dưới sự kiểm soát của kẻ tấn công. Có các giải pháp cho các cuộc tấn công này ở cả phía máy khách và máy chủ
Mục lục
điều kiện tiên quyết
Hiểu biết về Node. js và JavaScript được yêu cầu để dễ dàng theo dõi
Tập lệnh chéo trang [XSS] là gì
Cross-site scripting [XSS] là một cuộc tấn công chèn mã vào các ứng dụng web. Những kẻ tấn công sử dụng các trang web dễ bị tổn thương để tiêm mã độc hoặc tập lệnh. XSS cho phép kẻ tấn công tiêm mã độc bằng các ngôn ngữ tập lệnh như JavaScript
Mã độc được thực thi trên trình duyệt của người dùng. Kẻ tấn công sau đó có thể truy cập cookie, mật khẩu và thông tin bí mật khác được lưu bởi trình duyệt
Ứng dụng web dễ bị tấn công XSS nếu đầu vào của người dùng không được mã hóa phù hợp. Khi đầu vào của người dùng được mã hóa không chính xác, tập lệnh độc hại sẽ được gửi đến người dùng và được thực thi
Xác thực đầu vào không đúng cách và vệ sinh dữ liệu do người dùng ứng dụng web cung cấp là nguyên nhân hàng đầu của các cuộc tấn công XSS
XSS hoạt động như thế nào
XSS hoạt động bằng cách khai thác một ứng dụng web dễ bị tấn công. Kẻ tấn công gửi mã độc cho người dùng và bị thực thi. Khi tập lệnh độc hại thực thi, kẻ tấn công có thể tương tác với ứng dụng
Để ngăn XSS, nhà phát triển phải biết XSS hoạt động như thế nào. Hãy xem qua tình huống này để hiểu cách XSS hoạt động
XYZ là một trang Thương mại điện tử bán các mặt hàng cho khách hàng. Dữ liệu của mặt hàng được gửi đến máy chủ và được lưu trữ trong cơ sở dữ liệu. Nếu một người cần mua một mặt hàng, bạn phải tạo một tài khoản và được xác minh là người dùng hợp pháp của trang web. Người dùng đăng nhập vào trang web. Hệ thống phải xác thực xem người đang cố đăng nhập có phải là người dùng hợp pháp của trang web hay không trước khi có quyền truy cập
Mặt khác, kẻ tấn công tạo một siêu liên kết và nhập mã JavaScript. Mã sẽ đọc cookie của người dùng truy cập trang web. Tập lệnh được gửi, xử lý và lưu trữ trong cơ sở dữ liệu
Người dùng web [nạn nhân] thực thi mã trên trình duyệt của họ bằng cách nhấp vào liên kết. Mã độc đọc cookie của anh ta và gửi nó đến máy chủ web của kẻ tấn công
Những kẻ tấn công sử dụng các ứng dụng web dễ bị tấn công để lây lan các cuộc tấn công tới người dùng web. Kẻ tấn công cũng có thể sửa đổi trang web bị ảnh hưởng và đánh cắp tên người dùng và mật khẩu từ tài khoản người dùng. Vì cookie lưu trữ phiên của người dùng nên kẻ tấn công sẽ nhận được danh tính kỹ thuật số của người dùng. Kẻ tấn công tải cookie của người dùng vào trình duyệt của mình, mạo danh người dùng vào ứng dụng web
Kẻ tấn công có thể xem và thực hiện mọi thứ mà người dùng có quyền xem và thực hiện với phiên làm việc của người dùng. Cookie của người dùng được truyền trên máy chủ và được xác thực. Cho rằng cookie chứa phiên hiện tại của người dùng, máy chủ tin rằng yêu cầu là từ người dùng hợp pháp
Tất cả thời gian này, người dùng không biết rằng một cuộc tấn công đang xảy ra. Đó là cách các cuộc tấn công XSS hoạt động
Lỗ hổng cross-site scripting là
- Dễ nhận ra
- dễ sử dụng
- Có tác động lớn đến bảo mật doanh nghiệp của bạn
Các loại tấn công XSS
Dưới đây là các loại tấn công XSS khác nhau
Tập lệnh chéo trang được phản ánh
Reflected XSS [XSS không liên tục] là một cuộc tấn công xảy ra khi một tập lệnh độc hại được chuyển hướng đến một ứng dụng thông qua HTTP. Trong XSS không liên tục, mã độc được thực thi ngay lập tức trong trình duyệt của nạn nhân
Nếu máy chủ không mã hóa chính xác đầu vào của người dùng, kẻ tấn công có thể tìm kiếm một chuỗi như vậy
//example-webapp.com/report =\/*Not+Safe…?+*/
5. Mã JavaScript này phản ánh trên trình duyệt như một phần của mã. Đoạn mã sau đó được thực thi để hiển thị cảnh báo xác nhận lỗ hổng XSS. Dưới đây là một ví dụ về một cuộc tấn công XSS được phản ánhLiên kết HTTP trước khi mã độc được đưa vào
//example-webapp.com/report =Safe
Cuộc tấn công được thực hiện như thế nào,
//example-webapp.com/report =\/*Not+Safe…?+*/
Khi người dùng truy cập vào URL do kẻ tấn công gửi, đoạn mã độc hại sẽ thực thi ngay trên trình duyệt
Tập lệnh chéo trang được lưu trữ
XSS được lưu trữ [XSS liên tục] xảy ra khi một tập lệnh độc hại được lưu trong cơ sở dữ liệu của trang web. Tập lệnh độc hại thực thi khi người dùng truy cập ứng dụng web. Bất cứ lúc nào nạn nhân mở trình duyệt, tập lệnh độc hại sẽ chạy
Tập lệnh chéo trang dựa trên DOM
Đây là một cuộc tấn công trong DOM [Mô hình đối tượng tài liệu]. Nó phát sinh khi một tập lệnh độc hại thực thi do sửa đổi DOM trong trình duyệt của người dùng. Hầu hết các nhà phát triển không hiểu XSS dựa trên DOM hoạt động như thế nào
Cách ngăn chặn XSS
XSS là cuộc tấn công hàng đầu cho các ứng dụng web. Bây giờ chúng ta đã hiểu rõ hơn về XSS và cách nó gây hại cho các ứng dụng. Chúng ta sẽ đi qua phần sau, đó là các kỹ thuật được sử dụng để ngăn chặn lỗ hổng XSS trong Node. js
mã hóa đầu ra
Mã hóa đầu ra dịch đầu vào không đáng tin cậy thành một mô hình an toàn. Nó diễn ra bằng cách chạy mã hóa thực thể JavaScript trong Nút. js trước khi gửi dữ liệu không đáng tin cậy vào trình duyệt
Tránh chèn dữ liệu không đáng tin cậy
Các nhà phát triển phải từ chối chèn dữ liệu không đáng tin cậy để ngăn chặn XSS. Thoát JavaScript nên được sử dụng khi dữ liệu không đáng tin cậy được chèn vào mã JavaScript. Tránh chuyển dữ liệu không đáng tin cậy vào các hàm JavaScript có thể thực thi, chẳng hạn như
//example-webapp.com/report =\/*Not+Safe…?+*/
6. Hàm //example-webapp.com/report =\/*Not+Safe…?+*/
6 đánh giá hoặc thực thi một đối sốnút. chức năng js
//example-webapp.com/report =\/*Not+Safe…?+*/
6 cho phép tiêm mã. Chèn mã là một lỗ hổng bảo mật do xử lý dữ liệu không hợp lệ. Kẻ tấn công giới thiệu một mã độc hại được thực thi trong một ứng dụngHàm
//example-webapp.com/report =\/*Not+Safe…?+*/
6 lấy một đối số chuỗi và diễn giải nó dưới dạng mã JavaScript cho phép kẻ tấn công thực thi nó. Dưới đây là một ví dụ về việc chuyển dữ liệu không đáng tin cậy tới hàm //example-webapp.com/report =\/*Not+Safe…?+*/
6 thực thi tập lệnhVí dụ đơn giản này thực thi mã khi bạn nhập mã như
//example-webapp.com/report =\/*Not+Safe…?+*/
2 vào một trong các thao tácfunction compute[] {
var opr1 = $['#operation1'].val[];
var opr2 = $['#operation2'].val[];
var answer = eval[opr1 + ' + ' + opr2];
$['#answer'].text[answer];
}
Cách an toàn duy nhất để chèn dữ liệu không đáng tin cậy vào mã JavaScript là bên trong giá trị dữ liệu được trích dẫn ["]
Ví dụ,
Alert [“…encode untrusted data before being executed…”]
Đưa dữ liệu không đáng tin cậy vào bên trong tập lệnh rất nguy hiểm vì kẻ tấn công rất dễ chuyển sang ngữ cảnh thực thi với các ký tự như [;, =, +, &, < và >], v.v.
Xác thực đầu vào của người dùng
Để ngăn XSS, nhà phát triển phải xác thực đầu vào của người dùng và mã hóa đầu ra. Xác thực đầu vào của người dùng là một kỹ thuật phòng thủ được sử dụng ở phía máy chủ để ngăn chặn các cuộc tấn công XSS. Điều này có nghĩa là các biện pháp giảm thiểu XSS được áp dụng trên một Nút. nền tảng js
Xác thực đầu vào được thực hiện để đảm bảo chỉ dữ liệu an toàn mới được đưa vào hệ thống thông tin. Việc xác thực đầu vào của người dùng sẽ diễn ra ngay khi nhận được dữ liệu từ bên kia
Sử dụng tập lệnh sau để ngăn XSS bằng cách xác thực đầu vào
var validator = require['validator'];
var escaped_string = validator.escape[string];
Xác thực đầu vào trước khi xử lý yêu cầu của kẻ tấn công là rất quan trọng vì nó ngăn chặn sớm các cuộc tấn công XSS. Xác thực đầu vào phát hiện đầu vào của người dùng trái phép trước khi ứng dụng thực thi nó. Các ký tự đặc biệt như [. và \ ] nên được lọc để ngăn chúng bị sử dụng với mục đích xấu
Điều cần thiết là thực hiện xác thực đầu vào phía máy chủ khi ngăn chặn các cuộc tấn công XSS. Phía máy chủ chủ yếu được ưa thích để xác thực đầu vào vì nó có thể dễ dàng bị bỏ qua khi thực hiện thông qua phía máy khách
Trong khi xác thực đầu vào của người dùng bằng JavaScript phía máy chủ [Node. js], hãy thử mô-đun npm
//example-webapp.com/report =\/*Not+Safe…?+*/
3Nó làm như sau
- Vệ sinh dữ liệu
- Loại bỏ các thẻ script
- Xóa các thuộc tính có chứa mã JavaScript, i. e. ,
4 và//example-webapp.com/report =\/*Not+Safe…?+*/
5//example-webapp.com/report =\/*Not+Safe…?+*/
- Xóa thuộc tính “href” bằng mã JavaScript
Vệ sinh đầu vào
Làm sạch đầu vào là một phương pháp ngăn chặn XSS giúp lọc và làm sạch dữ liệu đầu vào cho người dùng ứng dụng. Vệ sinh đầu vào loại bỏ mọi giá trị bất hợp pháp khỏi dữ liệu
Đầu vào được làm sạch đúng cách đảm bảo rằng người dùng chỉ có thể gửi dữ liệu đáng tin cậy. Nó đảm bảo rằng chỉ dữ liệu dự kiến được nhập vào, tôi. e. [chỉ cho phép các trường đầu vào chấp nhận dấu ngoặc đơn, số và dấu gạch nối]. Vệ sinh dữ liệu trong yêu cầu HTTP trước khi thực thi đảm bảo dữ liệu được xác thực, thoát và lọc trước khi xuất cho người dùng
httpOnly. Ngăn chặn cookie chống lại XSS
Một cách khác để ngăn chặn XSS là ngăn chặn truy cập cookie bằng tập lệnh JS của trình duyệt. Trộm cắp cookie là một trong những cuộc tấn công XSS phổ biến nhất. Nó đạt được bằng cách đặt giá trị cookie
//example-webapp.com/report =\/*Not+Safe…?+*/
6 thành //example-webapp.com/report =\/*Not+Safe…?+*/
7 trong mã bên dưới//example-webapp.com/report =\/*Not+Safe…?+*/
1Đặt giá trị cookie
//example-webapp.com/report =\/*Not+Safe…?+*/
6 thành //example-webapp.com/report =\/*Not+Safe…?+*/
7 giúp ngăn tập lệnh phía máy khách truy cập cookie được bảo vệ. function compute[] {
var opr1 = $['#operation1'].val[];
var opr2 = $['#operation2'].val[];
var answer = eval[opr1 + ' + ' + opr2];
$['#answer'].text[answer];
}
0 yêu cầu trình duyệt không hiển thị cookie cho tập lệnhPhần kết luận
Tập lệnh chéo trang là vấn đề bảo mật hàng đầu mà các ứng dụng web gặp phải. Trong bài viết này, chúng ta đã biết XSS là gì và mức độ nguy hiểm của nó. Chúng tôi cũng đã học cách ngăn chặn nó trong nền tảng phía máy chủ [Node. js]