Làm thế nào để phát triển phần mở rộng Joomla an toàn?


7

Trước khi tôi viết phần mở rộng đầu tiên của mình, tôi muốn hiểu làm thế nào để thiết kế nó một cách bất khả xâm phạm nhất có thể.

Có một bộ quy tắc để viết phần mở rộng Joomla an toàn không?

Tôi chỉ có thể tưởng tượng việc tiêm SQL là mối đe dọa có thể xảy ra vì vậy tôi biết rằng đầu vào biểu mẫu không bao giờ có thể được chèn trực tiếp vào lệnh SQL 'như hiện tại'.

Các vectơ tấn công khác tôi nên biết khi viết mô-đun hoặc plugin tùy chỉnh là gì?

Câu trả lời:


8

Một điều chính mà bạn đã chỉ ra là SQL Injection. Đây là một điều mà một vài người mà tôi thấy dường như hoàn toàn bỏ lỡ và bắt đầu phát triển bằng cách sử dụng các tiêu chuẩn mã hóa Joomla và bắt đầu viết các hàng đợi SQL bằng mysql_*các lệnh.

Điều thứ hai mà tôi đã đề cập ở điểm đầu tiên, vốn luôn tuân theo các tiêu chuẩn mã hóa Joomla. Lần duy nhất bạn không nên là khi Joomla không cung cấp giải pháp thay thế.

Thứ ba, nếu tiện ích mở rộng của bạn tạo thư mục hoặc tệp, thì hãy đảm bảo bạn cấp cho họ quyền chính xác và không bắt đầu tạo thư mục chmod 777. Đây là lý do chính xác tại sao K2, một trong những tiện ích mở rộng phổ biến nhất được coi là dễ bị tấn công và tạm thời bị xóa khỏi JED.

Luôn sử dụng mã thông báo với các hình thức. Điều này sẽ đảm bảo rằng không có cuộc tấn công trái phép nào từ các trang web khác có thể được thực thi. Để biết thêm thông tin về điều này, hãy xem những điều sau đây:

http://docs.j Joomla.org/How_to_add_CSRF_anti-spoofing_to_forms

Nếu bạn không chắc chắn về điều gì đó đã chạy một số thử nghiệm, hãy thử xuất hiện cùng với Đánh giá mã Stackexchange vì có thể có ai đó sẵn sàng kiểm tra mã của bạn cho bạn.

Một điều bạn có thể làm là xem Danh sách tiện ích mở rộng dễ bị tổn thương để xem các tiện ích mở rộng tạm thời (cho đến khi được sửa) bị xóa khỏi Thư mục tiện ích mở rộng Joomla do không an toàn.

Hy vọng điều này cung cấp cho bạn một cái nhìn sâu sắc và may mắn với phần mở rộng đầu tiên của bạn


đề nghị tốt về Đánh giá mã SX!
jackJoe

7

Theo tài liệu chính thức, đây là một số bước về chủ đề Hướng dẫn mã hóa an toàn :

  • Xác thực bất kỳ dữ liệu nào bạn nhận được từ yêu cầu (POST, GET, COOKIES, v.v.). Đừng tin tưởng người dùng và càng nghiêm khắc càng tốt. Nếu bạn mong đợi integer, đừng cho phép stringchấp nhận.

  • Tải lên tệp - tránh, bất cứ khi nào có thể, chấp nhận tệp trên các trang web công cộng. Nếu bạn cần xác thực thông tin meta tệp và thực hiện tất cả các kiểm tra có thể.

  • Xây dựng các truy vấn SQL - hiểu cách hoạt động của SQL tiêm mà còn cách bạn xử lý các lỗi cơ sở dữ liệu. Bạn càng hiển thị nhiều lỗi, bạn càng cung cấp nhiều thông tin về cấu trúc cơ sở dữ liệu của mình. Lý tưởng nhất là bạn đăng nhập lỗi nhưng không hiển thị chúng.

  • Bảo mật các hình thức bằng cách sử dụng mã thông báo


1
Tôi sẽ chỉ thêm vào cái này, nếu bạn có trình chỉnh sửa tải lên / xử lý hình ảnh, v.v., hãy đảm bảo chỉ những người dùng có cấp độ cụ thể mới có thể truy cập chúng hoặc kiểm tra cấp độ nhóm người dùng và thêm nó vào trong cài đặt cho những người đó.
Dan

4

Nó hầu như an toàn cho hầu hết các tiện ích mở rộng, Tuy nhiên, hãy thận trọng với bất kỳ thứ gì có thể cần lưu / chỉnh sửa tệp, lọc không đúng hoặc xác thực có thể tạo điểm nhập cảnh.

Miễn là bạn sử dụng API của JDatabase một cách chính xác, bạn cũng nên an toàn khỏi việc tiêm sql. Bạn có thể xem com_contenthoặc plg_system_loadpositoncài đặt Joomla để giúp tìm ra một số điểm tốt hơn của các API Joomla khác nhau (vì tài liệu hơi khó theo dõi).

Cũng sử dụng API nếu chúng thất bại và một số lỗ hổng được sử dụng, bản sửa lỗi có thể sẽ là bản cập nhật cốt lõi (nếu là JDatabase, tôi có thể tưởng tượng một bản phát hành Joomla trong vòng một giờ nếu phát hiện ra nó: D), thay vào đó là bản cập nhật để mở rộng của bạn.

Đây là một lỗ hổng lớn của nguồn mở là bất kỳ ai có ý định làm hại đều có tất cả thông tin cần thiết để làm như vậy. Nếu đó là một phần mở rộng khép kín (không có sẵn công khai) thì sẽ không bao giờ có vấn đề.

Cuối cùng, phần mở rộng càng đơn giản (càng ít mã) thì càng có nhiều khả năng nó sẽ là 'bất khả xâm phạm'. Khi một phần mở rộng phát triển, có nhiều nơi hơn một lỗi nhỏ có thể xảy ra để tạo một điểm vào.


Tôi cũng khuyên bạn nên sử dụng các lớp JModelAdmin, JModelForm lõi trong thành phần của bạn khi hiển thị và lưu dữ liệu biểu mẫu mà không cần viết bất kỳ truy vấn sql nào vì các lớp này xử lý tất cả. Xem một số mã trong thành phần mặc định của j Joomla cho việc này.
dev-m
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.