Các lỗi bảo mật phổ biến tôi cần tìm là gì? [đóng cửa]


16

Là một nhà phát triển plugin WP của Wannabe, các lỗ hổng / lỗ hổng bảo mật chính tôi nên tìm là gì?

Tôi sắp tạo một plugin mới với bảng cấu hình (tức là trường nhập liệu và nội dung). Tôi nên quan tâm điều gì?

Ví dụ: vệ sinh dữ liệu có phải là một vấn đề lớn vì nó nằm trong khu vực / wp-admin / không? Ai đó có thể độc hại tấn công trực tiếp vào trang plugin của tôi và gửi yêu cầu POST hoặc một cái gì đó tương tự không?

Cảm ơn bạn!

Câu trả lời:


16

Dưới đây là danh sách kiểm tra đã sửa đổi, dựa trên danh sách kiểm tra bảo mật dữ liệu / cài đặt hiện tại (đang thực hiện) của tôi được sử dụng để xem lại Chủ đề (các nguyên tắc không khác nhau đối với Plugin so với Chủ đề):

  1. Các plugin nên thêm tiền tố vào tất cả các tùy chọn, chức năng tùy chỉnh, biến tùy chỉnh và hằng số tùy chỉnh với plugin-slug.

  2. Các plugin nên triển khai các tùy chọn Plugin và các trang Cài đặt plugin một cách có chủ ý, thay vì dựa vào các tập lệnh sao chép và dán từ các hướng dẫn của trang web, chẳng hạn như các tập tin bên dưới, đã lỗi thời và không bao gồm bảo mật dữ liệu phù hợp:

  3. Các plugin nên sử dụng add_options_page()chức năng để thêm Trang Cài đặt Plugin vào Settingsmenu, thay vì sử dụng add_menu_page()để thêm menu cấp cao nhất.

  4. Các plugin nên sử dụng một khả năng thích hợp (ví dụ manage_options) cho khả năng thêm trang cài đặt.

  5. Các plugin nên lưu các tùy chọn trong một mảng, thay vì tạo nhiều tùy chọn cho trang cài đặt. Việc sử dụng API Cài đặt (xem bên dưới) sẽ xử lý việc này.

  6. Các plugin nên sử dụng API Cài đặt (xem bên dưới) để nhận và lưu dữ liệu đầu vào của biểu mẫu thay vì dựa vào $_POST$_REQUESTdữ liệu trực tiếp.

  7. Đối với các hộp kiểm và chọn tùy chọn, Plugin nên sử dụng checked()và các selected()chức năng để xuất ra checked="checked"selected="selected", tương ứng.

  8. Các plugin nên xác thực và vệ sinh tất cả dữ liệu không đáng tin cậy trước khi nhập dữ liệu vào cơ sở dữ liệu và phải thoát tất cả dữ liệu không đáng tin cậy trước khi được xuất trong các trường mẫu Cài đặt và trước khi xuất ra trong tệp mẫu Chủ đề:

  9. Các plugin nên sử dụng esc_attr()cho các kiểu nhập văn bản và esc_html()(hoặc esc_textarea()trong WP 3.1) cho các văn bản.

  10. Các plugin nên cung cấp rõ ràng việc kiểm tra nonce trang Cài đặt, nếu không sử dụng API Cài đặt:

  11. Chúng tôi cũng rất khuyến khích các Plugin sử dụng API Cài đặt, dễ sử dụng hơn, an toàn hơn và chăm sóc rất nhiều công việc khó khăn của các trang cài đặt:

Để có hướng dẫn tốt về cách sử dụng API Cài đặt, hãy xem:

Nếu bạn muốn kiểm tra một chủ đề với trang cài đặt chủ đề an toàn và được mã hóa vững chắc, hãy xem chủ đề này:
http://wordpress.org/extend/theme/coraline


Và tôi nên thêm: nếu bất cứ ai thấy thiếu gì trong danh sách, vui lòng bình luận , để tôi có thể thêm nó vào danh sách kiểm tra, để giúp cải thiện đánh giá bảo mật cho Chủ đề!
Chip Bennett

Wow, danh sách tuyệt vời, cảm ơn. Tôi tự hỏi liệu giá trị của nó làm cho câu hỏi này trở thành một wiki cộng đồng và làm cho mỗi điểm này trả lời riêng để cho phép thảo luận và xây dựng tốt hơn?
Goldenapples

Tôi sẽ ổn với điều đó, nhưng không muốn chiếm đoạt câu hỏi của người đăng ban đầu (trừ khi đó là cách mọi thứ được thực hiện trên StackExchange? Tôi vẫn còn mới ở đây ...).
Chip Bennett

Tôi cũng không biết ... để nó tùy ý người điều hành, tôi đoán vậy. Điều này có vẻ như sẽ làm cho một câu hỏi wiki tuyệt vời, vì các thực tiễn tốt nhất và quan trọng nhất của nó vẫn đang được thực hiện. @Rarst?
Goldenapples

Tôi có thể tạo một Câu hỏi mới, nếu cần?
Chip Bennett

11

Có hai khía cạnh này:

  1. Nguyên tắc cơ bản.

    • Bất cứ điều gì được ghi vào cơ sở dữ liệu nên được kiểm tra để tiêm SQL.
    • Bất cứ điều gì được in ra màn hình nên được kiểm tra rằng nó không in JavaScript có hại.
    • Bất cứ khi nào ai đó làm điều gì đó cần kiểm tra xem đó là ý định của anh ta để làm điều đó và anh ta có khả năng phù hợp.
    • Còn nhiều điều nữa mà bạn hoặc tôi sẽ không bao giờ nghĩ đến để kiểm tra.
  2. Cụ thể.

    • WordPress hiện đại rất coi trọng bảo mật và nhằm mục đích giúp các nhà phát triển dễ dàng.
    • Vì vậy, đối với hầu hết những điều bạn muốn làm, rất có thể là một cách để hoàn thành nó với API WP.
    • Vì vậy, bất cứ điều gì bạn đang làm bước đầu tiên của bạn sẽ là tốt và nghiên cứu API phù hợp.
    • Càng xa bạn từ chức năng phổ biến và đơn giản, những điều phức tạp hơn bạn sẽ cần nghiên cứu và thực hiện.

1
  1. Thêm defined('ABSPATH') or die('Access denied');vào mỗi tập lệnh của plugin được wordpress sử dụng trực tiếp
  2. Thêm tệp index.php trống vào mỗi thư mục
  3. Thêm .htaccess trong thư mục plugin với các hướng dẫn cần thiết để ngăn truy cập trực tiếp vào các tệp của plugin nhất định.
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.