Jak zasugerowałem w tym pytaniu , dodaję ten temat jako nowe pytanie do dyskusji społeczności / głosowania na temat najlepszych praktyk w zakresie bezpieczeństwa wtyczek / motywów.
Oto początkowa 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 się różnić dla Wtyczek niż dla Motywów).
Jeśli chcesz sprawdzić motyw z bezpieczną i solidnie zakodowaną stroną ustawień motywu, sprawdź ten motyw:
http://wordpress.org/extend/themes/coraline
Odpowiedzi:
Użyj Nonces (gdy nie używasz API ustawień)
Wtyczki i motywy powinny jawnie zapewniać sprawdzanie wartości nonce na stronie ustawień, jeśli nie używa interfejsu API ustawień:
źródło
Oczyść, zweryfikuj i usuń dane
Wyczyść wszystko, co mogłoby dostać się do bazy danych (!) I wyjść z niej zarówno!
Wtyczki i motywy powinny poprawnie sprawdzać poprawność danych:
Usuń wszystkie niezaufane dane, zanim zostaną wydrukowane w plikach szablonów kompozycji
Wtyczki i motywy powinny być używane
esc_attr()
do wprowadzania tekstu i /esc_html()
lubesc_textarea()
do obszarów tekstowych.Dostępny również z API WordPress jest
esc_url()
,esc_url_raw()
,esc_js()
iwp_filter_kses()
.Zły przykład:
Dobry przykład:
Oto świetne wideo Marka Jaquitha wyjaśniające użycie funkcji zmiany znaczenia:
źródło
Używaj tylko $ _GET / $ _POST / $ _REQUEST ostrożnie, gdy lepsze interfejsy API są niedostępne
Wtyczki i motywy powinny używać ustawień API, aby uzyskać i zapisać dane wejściowe forma zamiast polegać na
$_POST
i$_REQUEST
dane bezpośrednio.źródło
Posługiwać się
$wpdb->prepare
Podczas budowania niestandardowych zapytań za pomocą
$wpdb
obiektu zawsze używaj$wpdb->prepare
do wypełniania symboli zastępczych wartościami zamiast zapisywania zapytań danymi pomieszanymi z kodem SQL, ponieważmysql_*
funkcje rodziny źle nauczyły wszystkich.źródło
$wpdb->prepare
to nie to samo, co przygotowane oświadczenia.Uważaj na funkcje PHP, które mogą być użyte do uruchamiania złośliwego kodu
Miłej lektury dla każdego, kto pisze PHP: Funkcje PHP do wykorzystania na StackOverflow.
Użyj interfejsu API modyfikacji motywów
Motywy powinny używać
set_theme_mod()
i powiązanych funkcji, a nie wymyślonego przez siebie schematu nazw.Theme_mod API to specjalna warstwa dla interfejsu API ustawień; gwarantuje unikalne nazwy, umieszcza wszystkie opcje w jednej tablicy i - z mojego doświadczenia - jest o wiele łatwiejszy w obsłudze. Ponadto oferuje znormalizowane filtry dla wtyczek - co jest dobre dla interoperacyjności.
Unikaj włączone
register_globals
Nie polegaj na
register_globals = on
. Pro Theme który kupił mój ostatni klient robi dokładnie to. Mogęzhakować dowolną witrynę przy użyciu tego motywu w 5 minut… ThimbThumb też to zrobił (i nadal tak robi?).
Nie twórz plików z niepotrzebnymi szerokimi uprawnieniami dostępu
Nie twórz plików ze zbyt swobodnymi uprawnieniami dostępu.
Użyj protokołu SSL, jeśli jest dostępny
Skieruj swój udział na Twitterze / Facebooku / Cokolwiek linki do URI HTTPS, jeśli są dostępne. Ważne jest także bezpieczeństwo czytelnika.
źródło
set_theme_mod()
, w szczególności, jak prawidłowo połączyć to z użyciem interfejsu API ustawień?Zapisz dane w jednej tablicy
Wtyczki i motywy powinny zapisywać opcje w jednej tablicy, zamiast tworzyć wiele opcji dla strony ustawień. Skorzystałby z tego interfejs API ustawień.
źródło
Sprawdź odpowiednie możliwości podczas dodawania i wysyłania stron ustawień
Wtyczki powinny korzystać z odpowiednich możliwości (np.
manage_options
), Aby móc dodać stronę ustawień.Motywy powinny być używane
edit_theme_options
jako odpowiednia możliwość dodania strony ustawień.źródło
edit_theme_options
z interfejsem API ustawień, przesyłanie opcji jest zakodowane na sztywno, aby wymagaćmanage_options
aktualizacji. Powiązany bilet Trac można znaleźć tutaj .edit_theme_options
, pomyślałem, że przydałoby się zauważyć, że interfejs API ustawień w jego obecnym stanie jest użyteczny tylko przez role zmanage_options
funkcją.Korzystaj z aktualnych samouczków i informacji
Wtyczki i motywy powinny celowo wdrażać strony opcji i ustawień, a nie polegać na nieaktualnych samouczkach kopiowania i wklejania stron internetowych, które nie obejmują odpowiedniego bezpieczeństwa danych, takich jak te wymienione poniżej.
Przykłady tego, czego nie należy robić :
Jak utworzyć stronę opcji dla motywu Wordpress (1stwebdesigner.com)
Utwórz niesamowitą stronę z opcjami motywu WordPress, część 1 (wpshout.com)
źródło
Użyj interfejsu API ustawień
Wtyczki i motywy powinny korzystać z interfejsu API ustawień, który jest łatwiejszy w użyciu, bezpieczniejszy i zajmuje dużo pracy na stronach ustawień:
Dobre samouczki na temat używania interfejsu API ustawień można znaleźć w:
źródło
Do wyboru i wybierz Opcje, wtyczki i motywy powinny używać
checked()
iselected()
funkcje do wyprowadzaniachecked="checked"
iselected="selected"
odpowiednio.źródło
checked( $theme_options['whatever_option'] )
lubchecked( 'some_value' == $theme_options['whatever_option'] )
. Nie wiem, jak to jest bardziej zwięzłe?Prefiks nazwy funkcji i zmiennych
Wtyczki powinny poprzedzać wszystkie opcje, funkcje niestandardowe, zmienne niestandardowe i stałe niestandardowe wtyczką.
Motywy powinny poprzedzać wszystkie opcje, funkcje niestandardowe, zmienne niestandardowe i stałe niestandardowe hasłem motywu.
źródło
Użyj polecenia wp_safe_redirect () zamiast wywoływać funkcję PHP (header) bezpośrednio podczas przekierowywania na stronę w tej samej domenie.
źródło
Dodaj strony ustawień do odpowiednich sekcji menu administratora
Wtyczki powinny korzystać z tej
add_options_page()
funkcji, aby dodać stronę ustawień wtyczek doSettings
menu, zamiastadd_menu_page()
dodawać menu najwyższego poziomu.Motywy powinny używać tej
add_theme_page()
funkcji, aby dodać stronę ustawień motywu doAppearance
menu, zamiastadd_menu_page()
dodawać menu najwyższego poziomu.źródło