Làm cách nào để bảo mật mã JavaScript?

cho thấy hơn 67% nhà phát triển chuyên nghiệp sử dụng JavaScript. Ngoài ra, nó được sử dụng bởi hơn 95% trang web trên web.  

 

Từ góc độ bảo mật, JavaScript đứng thứ tư trong danh sách các ngôn ngữ dễ bị tấn công nhất – chỉ sau Java, PHP và C. Vì lý do này, các nhà phát triển phải luôn chủ động và phòng thủ trong việc bảo mật các ứng dụng JavaScript của họ để giữ an toàn cho web

 

Bài đăng này đi sâu vào các lỗ hổng JavaScript phổ biến, những rủi ro mà chúng gây ra và cách các nhà phát triển có thể giải quyết các lỗ hổng này để giữ an toàn cho các ứng dụng web của họ.  

 

Tập lệnh chéo trang

 

Theo OWASP, tập lệnh chéo trang [XSS] là một trong những rủi ro bảo mật phổ biến nhất trong các ứng dụng web. Nó xảy ra khi kẻ tấn công đưa mã độc vào phía máy khách của ứng dụng. Điều này thường xảy ra khi một ứng dụng chấp nhận dữ liệu không đáng tin cậy [hoặc do người dùng cung cấp] trên trang web mà không thoát hoặc xác thực dữ liệu đó đúng cách.

 

Một cuộc tấn công XSS thành công xảy ra khi trình duyệt thực thi các tập lệnh độc hại theo cách được xác định bởi tác nhân đe dọa. Nói chung, các cuộc tấn công XSS sẽ yêu cầu một số hình thức tương tác từ nạn nhân, thông qua kỹ thuật xã hội hoặc yêu cầu truy cập một trang cụ thể.  

 

Nếu kẻ tấn công khai thác lỗ hổng XSS, chúng có thể thực hiện các hành động độc hại như giả mạo tài khoản, đánh cắp dữ liệu, điều khiển từ xa hoặc thậm chí là phát tán phần mềm độc hại

 

Để ngăn chặn các cuộc tấn công XSS, nhà phát triển nên tách dữ liệu không đáng tin cậy hoặc dữ liệu nhập của người dùng khỏi nội dung trình duyệt đang hoạt động. Trong JavaScript, bạn có thể đạt được điều này bằng cách

 

  • Xác thực và làm sạch đầu vào từ người dùng để đảm bảo nó chỉ chứa các ký tự được chấp nhận mà không thể được sử dụng để khởi chạy các cuộc tấn công XSS

 

  • Sử dụng các phương thức an toàn như InternalText để thao tác DOM. Không giống như InternalHTML, phương pháp này thoát khỏi nội dung nguy hiểm, do đó ngăn XSS dựa trên DOM

 

  • Sử dụng các khung tự động thoát lỗ hổng XSS theo thiết kế. Chẳng hạn, Node JS có các hàm toàn cục encodeURI và encodeURIComponent giúp ngăn chặn các cuộc tấn công XSS. Bạn cũng nên cân nhắc sử dụng các gói nâng cao như xss-filters

 

Đoạn mã sau cho biết cách sử dụng bộ lọc XSS từ gói npm trong các ứng dụng cấp tốc

 


 

tiêm SQL

 

Cơ sở dữ liệu SQL dễ bị tấn công bằng cách tiêm trong đó các tham số truy vấn được khai thác để thực thi các lệnh tùy ý.  

 

Dưới đây là một bộ định tuyến khung tốc hành dễ bị tấn công SQL injection

 


 

Trong ví dụ trên, ứng dụng lấy ID người dùng từ URL và truy xuất địa chỉ email tương ứng bằng cách truy vấn cơ sở dữ liệu. Hai điều sai trong đoạn mã

 

Đầu tiên, truy vấn cơ sở dữ liệu được xây dựng bằng cách sử dụng nối chuỗi. Vấn đề thứ hai là đầu vào của người dùng được nối với truy vấn thay vì được xử lý dưới dạng dữ liệu không đáng tin cậy

 

Kẻ tấn công có thể tạo một tham số id chuỗi truy vấn theo cách nó truy xuất tất cả các bảng hoặc ghi vào cơ sở dữ liệu. Chẳng hạn, khi kẻ tấn công cung cấp các tham số chuỗi này

 


 

Điều này sẽ dẫn đến một truy vấn như thế này

 


 

Khi truy vấn này được thực hiện thành công, nó sẽ lấy danh sách tất cả các bảng trong cơ sở dữ liệu. Kẻ tấn công sau đó có thể lấy bất kỳ thông tin nào họ muốn

 

Để giảm thiểu việc tiêm SQL, các nhà phát triển phải luôn thực hiện xác thực đầu vào phù hợp. Khi đầu vào từ người dùng không kiểm tra xác thực, truy vấn SQL không được thực thi

 

Một cách khác để ngăn chặn việc tiêm SQL là sử dụng các truy vấn được tham số hóa hoặc các câu lệnh đã chuẩn bị sẵn thay vì nối. Các truy vấn được tham số hóa được sử dụng để trừu tượng hóa cú pháp SQL từ các tham số đầu vào

 

Trong ví dụ dưới đây, một câu lệnh đã chuẩn bị sẵn, đó là cách triển khai các truy vấn được tham số hóa của Java, được sử dụng để ngăn chặn các cuộc tấn công SQL injection tiềm ẩn

 


 

Hiển thị cookie nhạy cảm

 

Tập lệnh phía máy khách trên mọi trình duyệt có thể truy cập tất cả nội dung được ứng dụng trả về máy chủ. Điều này bao gồm các cookie thường chứa dữ liệu nhạy cảm như ID phiên.  

 

Để lộ số nhận dạng phiên, cho dù trong URL, thông báo lỗi hay nhật ký là một cách làm không tốt khiến ứng dụng gặp phải các sự cố bảo mật như giả mạo yêu cầu trên nhiều trang web [CSRF], chiếm quyền điều khiển phiên và sửa lỗi phiên

 

Để ngăn chặn điều này, nhà phát triển phải sử dụng HTTPS một cách nhất quán và triển khai cookie Chỉ HTTP. Thuộc tính HTTP-Only trong cookie yêu cầu trình duyệt ngăn chặn truy cập cookie thông qua DOM. Bằng cách này, các cuộc tấn công tập lệnh phía máy khách sẽ bị ngăn truy cập vào dữ liệu nhạy cảm được lưu trữ trong cookie

 

Một cách khác để bảo mật phiên người dùng là chọn theo yêu cầu thay vì sử dụng số nhận dạng theo phiên. Bất cứ khi nào khách hàng yêu cầu quyền truy cập đặc quyền, hãy chấm dứt phiên và xác thực lại chúng trước khi cấp quyền truy cập

 

Đây là một cookie ví dụ sử dụng Express – Node. js và lưu trữ dữ liệu phiên trên cơ sở dữ liệu SQLite bằng cách sử dụng connect-sqlite3 . Lưu ý cách chúng tôi chỉ sử dụng cookie bảo mật HTTP. . Notice how we use HTTP only secure cookies.

 


 

Các thành phần có lỗ hổng đã biết

 

Có rất nhiều rủi ro bảo mật liên quan đến việc sử dụng các thành phần ứng dụng dễ bị tổn thương. Chẳng hạn, các lỗ hổng trong một số thư viện hoặc các yếu tố khác như mã plugin của trình duyệt là lỗ hổng bảo mật trong ứng dụng của bạn.  

 

Để đảm bảo các thành phần bạn đang sử dụng không ảnh hưởng đến tính bảo mật của ứng dụng, hãy luôn cập nhật các phiên bản hiện tại của tất cả. Không dựa vào các thành phần chưa được vá để xây dựng hoặc tích hợp vào ứng dụng web của bạn

 

Một vấn đề bảo mật khác là sử dụng lại mã JavaScript từ các thư mục mã nguồn mở như GitHub. Khi bạn sao chép mã từ một người dùng ngẫu nhiên và sử dụng lại mã đó trong ứng dụng của mình mà không kiểm tra mã đó, bạn có thể gây ra sự cố bảo mật trong ứng dụng của mình

 

Thay vào đó, hãy thận trọng và kiểm tra mọi thành phần trong ứng dụng của bạn. Bạn không muốn sử dụng bất kỳ mã hỏng nào theo cách của mình, hoặc thậm chí tệ hơn là mã có tập lệnh độc hại có chủ ý

 

Để tất cả chúng cùng nhau

 

Việc áp dụng các phương pháp mã hóa tốt có thể bảo vệ các ứng dụng khỏi các lỗ hổng JavaScript phổ biến ở cả phía máy khách và phía máy chủ. Khi sử dụng JavaScript, hãy luôn tuân theo các nguyên tắc chính sau đây để tăng cường bảo mật

 

  • Không bao giờ tin tưởng đầu vào của người dùng
  • Sử dụng mã hóa/thoát thích hợp
  • Vệ sinh đầu vào của người dùng
  • Xác định chính sách bảo mật nội dung
  • Đặt cookie an toàn
  • Khóa API an toàn ở phía máy khách
  • Mã hóa dữ liệu được truyền giữa máy khách và máy chủ
  • Sử dụng các thành phần và API an toàn để phát triển
  • Sử dụng các thư viện và khung được cập nhật
  • Tiến hành quét thường xuyên trên cơ sở mã của bạn

 

Thực hiện theo các phương pháp mã hóa tốt nhất này thường là bước đầu tiên để bảo mật các ứng dụng web của bạn

Michael Hollander / Về tác giả

Michael là Giám đốc sản phẩm cấp cao và Giám đốc bảo vệ dữ liệu tại WhiteSource. Trước khi gia nhập WhiteSource, Michael là Giám đốc sản phẩm tại GE Digital và trước đó anh ấy đã đảm nhiệm một số vị trí phát triển phần mềm trong hơn 10 năm. Michael hiện đang lãnh đạo WhiteSource for Developers, một bộ tích hợp dành cho nhà phát triển bản địa trao quyền cho các nhà phát triển bảo mật sản phẩm nhanh hơn mà không làm chậm quá trình phát triển. LinkedIn. Twitter

JavaScript có thể được mã hóa không?

Trong Javascript, mã hóa và giải mã thường được triển khai bằng một trong số các thuật toán phổ biến, chẳng hạn như Tiêu chuẩn mã hóa nâng cao [AES] hoặc thuật toán RSA. The specific algorithm used depends on the needs of the application and the security requirements of the data being encrypted.

Bảo mật được cung cấp như thế nào trong JavaScript?

Có nhiều công cụ bảo mật được sử dụng để hỗ trợ bảo mật JavaScript. .
Tường lửa ứng dụng web [WAF]
Chính sách bảo mật nội dung [CSP]
Kiểm tra thâm nhập và đánh giá
Quét lỗ hổng
Mã Scrambler và Obfuscator
Giám sát bề mặt tấn công phía máy khách
Công nghệ cấp phép bảo mật JavaScript

Cách bảo vệ khách hàng

Không thể bảo mật Javascript phía máy khách - chưa bao giờ . Nếu trình duyệt có thể chạy nó, điều đó có nghĩa là các hướng dẫn Javascript có sẵn 100% cho bất kỳ ai muốn chúng. Bạn có thể nén và ẩn Javascript. Đó chỉ đơn thuần là một trở ngại mà bất kỳ nhà phát triển tài năng nào cũng có thể vượt qua nếu đầu tư thêm thời gian.

Làm cách nào để bảo vệ mã nguồn của nút js?

Gói mã của bạn ở định dạng mã hóa và biên dịch mã dưới dạng tài nguyên tệp utf-8 . Sử dụng ứng dụng cpp hoặc java của bạn để tải toàn bộ tệp lên máy tính linux hoặc máy tính cánh tay, đảm bảo bạn có mật khẩu mạnh hoặc đóng cổng ssh hoặc tắt cổng video và chỉ duyệt máy tính linux bằng web.

Chủ Đề