Jakie są typowe wady bezpieczeństwa, których muszę szukać? [Zamknięte]

16

Jako deweloper wtyczek WP, jakie są główne wady / dziury w zabezpieczeniach, których powinienem szukać?

Zaraz utworzę nową wtyczkę z panelem konfiguracji (tj. Pola wejściowe i takie tam). O co powinienem się martwić?

Na przykład, czy dezynfekcja danych to tak wielka sprawa, ponieważ znajduje się w obszarze / wp-admin /? Czy ktoś złośliwy może bezpośrednio trafić na moją stronę wtyczki i wysłać żądania POST lub coś w tym rodzaju?

Dziękuję Ci!

MrBatman
źródło

Odpowiedzi:

16

Oto zmodyfikowana lista kontrolna, oparta na moich bieżących (w toku) ustawieniach / liście kontrolnej bezpieczeństwa danych używanych do przeglądania Motywów (zasady nie powinny różnić się od Wtyczek niż dla Motywów):

  1. Wtyczki powinny poprzedzać wszystkie opcje, funkcje niestandardowe, zmienne niestandardowe i stałe niestandardowe wtyczką.

  2. Wtyczki powinny celowo implementować opcje wtyczek i ustawienia wtyczek, zamiast polegać na kopiowaniu i wklejaniu skryptów z samouczków witryny, takich jak te poniżej, które są nieaktualne i nie zawierają odpowiedniego bezpieczeństwa danych:

  3. Wtyczki powinny używać tej add_options_page()funkcji, aby dodać stronę ustawień wtyczek do Settingsmenu, zamiast add_menu_page()dodawać menu najwyższego poziomu.

  4. Wtyczki powinny korzystać z odpowiedniej możliwości (np. manage_options), Aby móc dodać stronę ustawień.

  5. Wtyczki powinny zapisywać opcje w jednej tablicy, zamiast tworzyć wiele opcji dla strony ustawień. Użycie interfejsu API ustawień (patrz poniżej) poradziłoby sobie z tym.

  6. Wtyczki należy użyć interfejsu API ustawień (patrz poniżej), aby uzyskać i zapisać dane wejściowe forma zamiast polegać na $_POSTi $_REQUESTdane bezpośrednio.

  7. Do wyboru i wybierz Opcje, należy użyć wtyczki checked()i selected()funkcje do wyprowadzania checked="checked"i selected="selected"odpowiednio.

  8. Wtyczki powinny sprawdzać poprawność i dezynfekcję wszystkich niezaufanych danych przed wprowadzeniem danych do bazy danych i powinny uciec od wszystkich niezaufanych danych przed wyjściem w polach formularza Ustawienia i przed wyjściem w plikach szablonów motywu:

  9. Wtyczki powinny być używane esc_attr()do wprowadzania tekstu i esc_html()(lub esc_textarea()w WP 3.1) dla obszarów tekstowych .

  10. Wtyczki powinny jawnie zapewniać sprawdzanie wartości jednorazowej na stronie ustawień, jeśli nie używa interfejsu API ustawień:

  11. Zdecydowanie zaleca się również, aby wtyczki korzystały z interfejsu API ustawień, który jest łatwiejszy w użyciu, bezpieczniejszy i zajmuje dużo pracy na stronach ustawień:

Dobry samouczek korzystania z interfejsu API ustawień można znaleźć w:

Jeśli chcesz sprawdzić motyw z bezpieczną i solidnie zakodowaną stroną ustawień motywu, sprawdź ten motyw:
http://wordpress.org/extend/themes/coraline

Chip Bennett
źródło
I powinienem dodać: jeśli ktoś zauważy, że czegoś brakuje na liście, proszę o komentarz , abym mógł dodać to do listy kontrolnej, aby poprawić ocenę bezpieczeństwa dla Motywów!
Chip Bennett
Wow, świetna lista, dzięki. Zastanawiam się, czy warto zamienić to pytanie w wiki społeczności i nadać każdemu z tych punktów własną odpowiedź, aby lepiej umożliwić dyskusję i opracowanie?
goldenapples
Byłbym w tym w porządku, ale nie chcę przejmować pytania oryginalnego plakatu (chyba że tak się dzieje na StackExchange? Nadal jestem tu nowy ...).
Chip Bennett
Nie wiem też ... zostawię to moderatorowi, jak sądzę. Wydaje się, że byłoby to świetne pytanie na wiki, ponieważ jego tak ważne i najlepsze praktyki wciąż się rozwijają. @Rarst?
goldenapples 30.03.11
W razie potrzeby mogę utworzyć nowe pytanie?
Chip Bennett
11

Istnieją dwa aspekty:

  1. Podstawowe zasady.

    • Cokolwiek zapisano w bazie danych, należy sprawdzić, czy nie ma wstrzyknięć SQL.
    • Cokolwiek jest drukowane na ekranie, należy sprawdzić, czy nie drukuje szkodliwych skryptów JavaScript.
    • Ilekroć ktoś coś robi, należy sprawdzić, czy jego intencją było, i czy ma odpowiednie możliwości.
    • Jest o wiele więcej rzeczy, o których ty lub ja nigdy nie pomyślicie, żeby to sprawdzić.
  2. Specyfika

    • Nowoczesne WordPress traktuje bezpieczeństwo poważnie i ma na celu ułatwienie programistom.
    • Tak więc w przypadku większości rzeczy, które chcesz zrobić, najprawdopodobniej jest to możliwe dzięki interfejsom API WP.
    • Tak więc, cokolwiek robisz, pierwszym krokiem byłoby dopracowanie i zbadanie odpowiedniego API.
    • Im dalej od wspólnej i prostej funkcjonalności, tym bardziej złożone rzeczy trzeba będzie studiować i wdrażać.
Rarst
źródło
1
  1. Dodaj defined('ABSPATH') or die('Access denied');do każdego skryptu wtyczki używanego bezpośrednio przez wordpress
  2. Dodaj pusty plik index.php w każdym katalogu
  3. Dodaj plik .htaccess w katalogu wtyczek z niezbędnymi instrukcjami, aby zapobiec bezpośredniemu dostępowi do niektórych plików wtyczki.
egor
źródło