Como se sugiere en esta pregunta , estoy agregando este tema como una nueva pregunta, para la discusión / votación de la comunidad con respecto a las mejores prácticas para la seguridad de Complementos / Temas.
Aquí está la lista de verificación inicial, basada en mi configuración actual (trabajo en progreso) / lista de verificación de seguridad de datos utilizada para revisar Temas (los principios no deberían ser diferentes para Plugins de lo que son para Temas).
Si desea consultar un tema con una página de configuración de tema segura y sólidamente codificada, consulte este tema:
http://wordpress.org/extend/themes/coraline
Respuestas:
Use Nonces (cuando no use la API de configuración)
Los complementos y temas deben proporcionar explícitamente la comprobación de nonce de la página de configuración, si no se utiliza la API de configuración:
fuente
Desinfecte, valide y escape datos
¡Desinfecte todo lo que pueda entrar y salir de la base de datos (!) Tanto en el front-end como en el back-end!
Los complementos y temas deben realizar una validación de datos adecuada:
Escape de todos los datos que no sean de confianza antes de salir en los archivos de plantilla del tema
Los complementos y temas deben usarse
esc_attr()
para entradas de texto y /esc_html()
oesc_textarea()
para áreas de texto.También disponible en la API de WordPress es
esc_url()
,esc_url_raw()
,esc_js()
ywp_filter_kses()
.Mal ejemplo:
Buen ejemplo:
Aquí hay un gran video de Mark Jaquith explicando el uso de las funciones de escape:
fuente
Solo use $ _GET / $ _POST / $ _REQUEST con cuidado y cuando no haya mejores API disponibles
Plugins y temas deben utilizar las API de configuración para obtener y guardar los datos del formulario de entrada en lugar de confiar en
$_POST
y$_REQUEST
datos directamente.fuente
Utilizar
$wpdb->prepare
Al crear consultas personalizadas a través del
$wpdb
objeto, use siempre$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 lasmysql_*
funciones de la familia han enseñado erróneamente a todos.fuente
$wpdb->prepare
no es lo mismo que las declaraciones preparadas.Tenga cuidado con las funciones de PHP que pueden usarse para ejecutar código malicioso
Una buena lectura para cualquiera que escriba PHP: Funciones PHP explotables en StackOverflow.
Usar API de modificación de tema
Los temas deben usar
set_theme_mod()
y funciones relacionadas, no un esquema de nombre inventado por uno mismo.La API theme_mod es una capa especializada para la API de configuración; garantiza nombres únicos, inserta 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.
Evitar habilitado
register_globals
No confíe en
register_globals = on
. Un Pro Theme que compró mi último cliente hace exactamente esto. Podría hackear cualquier sitio usando este tema en 5 minutos ...ThimbThumb también hizo esto (¿y todavía lo hace?).
No cree archivos con permisos de acceso amplio innecesarios
No cree archivos con permisos de acceso demasiado liberados.
Use SSL donde esté disponible
Apunte sus enlaces Compartir en Twitter / Facebook / Cualquier cosa al URI HTTPS si está disponible. La seguridad de su lector también es importante.
fuente
set_theme_mod()
, especialmente, cómo combinarlo correctamente con el uso de la API de configuración?Guardar datos en una sola matriz
Los complementos y 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.
fuente
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 agregar la página de configuración.Los temas deben usarse
edit_theme_options
como la capacidad adecuada para agregar la página de configuración.fuente
edit_theme_options
embargo, no se puede usar con la API de configuración, el envío de opciones está codificado para requerir elmanage_options
envío de actualizaciones. Puede encontrar el boleto de Trac relacionado aquí .edit_theme_options
límite a un rol personalizado o un rol regular , pensé que podría ser útil señalar que la API de configuración en su estado actual solo es utilizable por roles con lamanage_options
capacidad.Use tutoriales e información actualizados
Los complementos y temas deben implementar las páginas de opciones y configuraciones de manera deliberada y no depender de 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 qué no hacer :
Cómo crear una página de opciones para su tema de WordPress (1stwebdesigner.com)
Cree una página de opciones de tema impresionante de WordPress parte 1 (wpshout.com)
fuente
Usar 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 encarga del trabajo arduo de las páginas de configuración:
Para obtener buenos tutoriales sobre el uso de la API de configuración, consulte:
fuente
Para las casillas de verificación y las opciones de selección, los complementos y temas deben usar las funciones
checked()
yselected()
para la salidachecked="checked"
yselected="selected"
, respectivamente.fuente
checked( $theme_options['whatever_option'] )
ochecked( 'some_value' == $theme_options['whatever_option'] )
. No sé cómo se vuelve más sucinto que eso?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 anteponer todas las opciones, funciones personalizadas, variables personalizadas y constantes personalizadas con theme-slug.
fuente
Use wp_safe_redirect () en lugar de llamar a la función de encabezado () de php directamente al dirigirse a una página en el mismo dominio.
fuente
Agregue páginas de configuración a las secciones apropiadas del menú de administración
Los complementos deben usar la
add_options_page()
función para agregar la página de configuración de complementos alSettings
menú, en lugar de usaradd_menu_page()
para agregar un menú de nivel superior.Los temas deben usar la
add_theme_page()
función para agregar la página de configuración del tema alAppearance
menú, en lugar de usaradd_menu_page()
para agregar un menú de nivel superior.fuente