Cách ngăn XSS phía máy khách trong JavaScript

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 ánh

Liê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ụng

Hà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ệnh

Ví 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ác

function 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…?+*/
3

Nó 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. ,
    //example-webapp.com/report =\/*Not+Safe…?+*/
    
    4 và
    //example-webapp.com/report =\/*Not+Safe…?+*/
    
    5
  • 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ệnh

Phầ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]

Làm cách nào để ngăn chặn các cuộc tấn công XSS?

Để ngăn chặn các cuộc tấn công XSS, ứng dụng của bạn phải xác thực tất cả dữ liệu đầu vào, đảm bảo rằng chỉ dữ liệu có trong danh sách cho phép mới được phép và đảm bảo rằng tất cả đầu ra biến trong một trang đều được mã hóa trước . .

XSS có phải là khách hàng không

XSS là lỗ hổng phía máy khách nhắm vào những người dùng ứng dụng khác, trong khi SQL injection là lỗ hổng phía máy chủ nhắm vào cơ sở dữ liệu của ứng dụng.

Việc tắt JavaScript có ngăn được XSS không?

Tuy nhiên, đối với các môi trường nhạy cảm về bảo mật, tắt JavaScript là một biện pháp phòng ngừa an toàn để bảo vệ chống lại các cuộc tấn công độc hại như tập lệnh chéo trang .

Phương pháp tốt nhất để ngăn chặn chéo là gì

Để ngăn chặn các cuộc tấn công tập lệnh chéo trang, nhà phát triển phần mềm phải xác thực đầu vào của người dùng và mã hóa đầu ra. Xem lại các ký tự để lọc ra, cũng như các nguồn và phần chìm để tránh

Chủ Đề