¿Cuáles son las mejores prácticas de seguridad para los complementos y temas de WordPress? [cerrado]

21

Como se sugiere en esta pregunta , estoy agregando este tema como una nueva pregunta, para discusión / votación en la comunidad. con respecto a las mejores prácticas para la seguridad de Plugin / Tema.

Aquí está la lista de verificación inicial, basada en la configuración actual (trabajo en curso) / la lista de verificación de seguridad de datos utilizada para revisar Temas (los principios no deberían ser diferentes para los Plugins que para los Temas).

Si desea revisar un tema con una página de configuración de tema segura y codificada sólidamente, consulte este tema:
enlace

    
pregunta Chip Bennett 13.04.2017 - 14:37

13 respuestas

13

Use Nonces (cuando no use la API de configuración)

Los complementos y los temas deben proporcionar explícitamente la comprobación de nonce de la página de configuración, si no se usa la API de configuración:

respondido por el Rarst 01.04.2011 - 14:45
12

Sanear, validar y escapar datos

¡Desinfecte todo lo que pueda entrar y salir de (!) la base de datos, tanto la parte frontal como la posterior!

Los complementos y los temas deben realizar una validación de datos adecuada:

  1. Validar y desinfectar todos los datos que no sean de confianza antes de ingresar datos en la base de datos
  2. Escape todos los datos que no sean de confianza antes de que se muestren en el formulario de configuración campos
  3. Escape todos los datos que no sean de confianza antes de que se muestren en la plantilla de tema archivos

Los complementos y temas deben usar esc_attr() para las entradas de texto y esc_html() o esc_textarea() para las áreas de texto.

También está disponible en la API de WordPress esc_url() , esc_url_raw() , esc_js() y wp_filter_kses() .

Mal ejemplo:

<?php $url = 'javascript:pwnd()'; ?>
<a href="<?php echo $url; ?>">anchor</a>

Buen ejemplo:

<a href="<?php echo esc_url($url); ?>">anchor</a>

Aquí hay un gran video de Mark Jaquith que explica el uso de las funciones de escape:

respondido por el Chris_O 31.03.2011 - 21:12
9

Utilice solo $ _GET / $ _POST / $ _REQUEST con cuidado y cuando no haya mejores API disponibles

Los complementos y temas deben usar la API de configuración para obtener y guardar los datos de entrada del formulario en lugar de confiar directamente en los datos $_POST y $_REQUEST .

    
respondido por el Rarst 31.03.2011 - 20:43
9

Usa $wpdb->prepare

Al crear consultas personalizadas a través del objeto $wpdb , siempre use $wpdb->prepare para llenar marcadores de posición con valores en lugar de escribir las consultas con datos mezclados con código SQL, ya que las funciones de la familia mysql_* han enseñado erróneamente a todos.

    
respondido por el Matteo Riva 17.08.2011 - 14:01
8

Tenga cuidado con las funciones de PHP que podrían usarse para ejecutar código malicioso

Una buena lectura para cualquiera que escriba PHP: Funciones de PHP aprovechables en StackOverflow.

Utilice API de modificación de tema

Los temas deben usar set_theme_mod() y las funciones relacionadas no un esquema de nombre auto inventado.
La API theme_mod es una capa especializada para la API de configuración; garantiza nombres únicos, empuja todas las opciones en una matriz y es, desde mi experiencia, mucho más fácil de manejar. Además, ofrece filtros estandarizados para complementos, lo que es bueno para la interoperabilidad.

Evite habilitar register_globals

No confíe en register_globals = on . Un Pro Theme que mi último cliente compró hace exactamente esto. Podría hackear cualquier sitio usando este tema en 5 minutos ...
ThimbThumb hizo esto también (y todavía lo hace?).

No cree archivos con permisos de acceso amplio innecesarios

No cree archivos con permisos de acceso demasiado liberales.

Use SSL donde esté disponible

Apunte sus Compartir en Twitter / Facebook / Cualquier cosa a la URI de HTTPS, si está disponible. La seguridad de su lector también es importante.

    
respondido por el fuxia 31.03.2011 - 00:03
7

Guardar datos en una sola matriz

Los complementos y los temas deben guardar las opciones en una sola matriz, en lugar de crear múltiples opciones para la página de configuración. El uso de la API de configuración manejaría esto.

    
respondido por el Chip Bennett 31.03.2011 - 22:26
6

Verifique la capacidad adecuada al agregar y generar páginas de configuración

Los complementos deben usar una capacidad adecuada (por ejemplo, manage_options ) para la capacidad de agregar la página de configuración.

Los temas deben usar edit_theme_options como la capacidad adecuada para agregar la página de configuración.

respondido por el Rarst 31.03.2011 - 20:56
5

Use tutoriales e información actualizados

Complementos & Los temas deben implementar las páginas Opciones y Configuración de forma deliberada y no confiar en los tutoriales de sitios web de copiar y pegar que están desactualizados y no incluyen la seguridad de datos adecuada, como los que se enumeran a continuación.

Ejemplos de lo que no debe hacer :

respondido por el t31os 31.03.2011 - 22:23
4

Usar la API de configuración

Los complementos y temas deben usar la API de configuración, que es más fácil de usar, más segura y se ocupa de gran parte del arduo trabajo de las páginas de configuración:

Para obtener buenos tutoriales sobre el uso de la API de configuración, consulte:

respondido por el Chip Bennett 31.03.2011 - 20:54
1

Para las casillas de verificación y las opciones de selección, los complementos y los temas deben usar las funciones checked() y selected() para generar checked="checked" y selected="selected" , respectivamente.

    
respondido por el Chip Bennett 30.03.2011 - 23:09
1

Función de prefijo y nombres de variables

Los complementos deben prefijar todas las opciones, funciones personalizadas, variables personalizadas y constantes personalizadas con plugin-slug.

Los temas deben prefijar todas las opciones, funciones personalizadas, variables personalizadas y constantes personalizadas con tema-slug.

    
respondido por el Chip Bennett 31.03.2011 - 22:29
1

Use wp_safe_redirect () en lugar de llamar a la función de cabecera () de php directamente al dirigir una página en el mismo dominio.

    
respondido por el mfields 18.04.2011 - 21:41
0

Agregar páginas de configuración a las secciones correspondientes del menú de administración

Los complementos deben usar la función add_options_page() para agregar la página de configuración de complementos al menú Settings , en lugar de usar add_menu_page() para agregar un menú de nivel superior.

Los temas deben usar la función add_theme_page() para agregar la página de configuración del tema al menú Appearance , en lugar de usar add_menu_page() para agregar un menú de nivel superior.

    
respondido por el Chip Bennett 31.03.2011 - 22:27

Lea otras preguntas en las etiquetas