La seguridad es un tema muy importante. Para asegurar WordPress, debe tener usuarios responsables que usen una instancia de WordPress que solo ejecute código seguro (puede ser ayudado por un “refuerzo) adicional en un servidor seguro. Pero un compromiso de cualquier parte puede invalidar todo su trabajo de cualquier otra parte. No hay una solución única para tener un sitio seguro de WordPress. En lo que nos centraremos en este artículo es en lo que debe pensar, como desarrollador, cuando escribe PHP para WordPress, si desea evitar errores obvios y regalos de seguridad. No hablaremos sobre la seguridad del servidor (para el 90% de los sitios de WordPress, el host se ocupa de esto) o sobre el uso de WordPress de manera segura. (Brevemente: use buenas contraseñas, esté actualizado).
Esta tampoco es una exploración exhaustiva de estos temas. Si ya reconoce las tres primeras amenazas: inyección SQL, XSS, CSRF, es posible que no obtenga demasiado de este artículo. Pero si no los reconoce, le daremos una explicación detallada para todos, lo que significa, lo que son y cómo prevenirlos, y algunos errores más frecuentes. ¡Vamos a eso!
¿Entiende las amenazas que hablan de seguridad sin discutir el modelo de amenaza, sobre quién y qué nos preocupa? – Es una especie de estupidez. En este artículo, suponemos que escribe un complemento o tema de WordPress y desea asegurarse de que sea seguro. Para hacer esto, debe tener una buena idea sobre dónde vendrán sus amenazas a hablar sobre seguridad sin discutir el modelo de amenaza: ¿a quién y qué nos preocupa? – Es una especie de estupidez.
Entonces, ¿por qué nos preocupamos? Como desarrollador, nuestro enemigo es generalmente un usuario malicioso. Un usuario puede ser malicioso por varias razones. Entonces, como desarrolladores de WordPress, en su mayoría nos preocupan las personas que buscan comprometer un sitio que no son los principales administradores del sitio. Es decir, realmente no nos protegemos contra una persona con una cuenta de “administrador” en su sitio web de WordPress, que se extingue al eliminar todos los temas y complementos. Proteger contra él en el código que desarrolla es muy difícil y bastante inútil. Esta es una batalla perdida. En cambio, nuestro énfasis debería ser escribir un código que no haga cosas que la gente no espere cuando alguien intenta engañarlos para que hagan cosas que no quieren hacer. Y también debemos evitar que hagan cosas malas que no tienen la intención de hacer al usar nuestros bordes de software que no creíamos que se usarían de esta manera. La inyección de SQL, la mejor exploit de base de datos en la mayoría de las aplicaciones web y WordPress no es una excepción, la base de datos es el corazón donde se almacenan los datos y, por lo tanto, el corazón de lo que necesita proteger. También es el lugar donde los nuevos desarrolladores cometen algunos de los errores más dañinos y comunes. Es muy probable que un desarrollador apresurado o no esté familiarizado con los riesgos de los ataques de inyección de SQL comete algunos errores costosos al escribir el código de la base de datos.
Para los desconocidos, SQL significa “lenguaje de consulta estructurado”. Cada relación de datos relacionales: WordPress usa uno llamado MySQL – habla una variante de SQL. Y debido a este lenguaje común, es bastante fácil para una persona “inyectar” el código SQL malo en la operación de una base de datos si el autor de un software que habla con la base de datos no es cuidadoso. Comprender un ataque de inyección SQL muy simple se ilustra en los famosos cómics “Bobby Tablas”. La premisa básica es que, si usted, como desarrollador, ha hecho posible que un campo de formulario o una URL arbitraria se ingrese en la base de datos sin medidas de protección adecuadas, está en un mal período. La broma es que la madre que cree en la calidad del software ha probado todas las bases de datos de la escuela de su hijo llamándolo para que simplemente presente su nombre en el sistema eliminaría toda su lista de estudiantes. Ella usó un vector de inyección SQL para eliminar (eliminar, si no habla SQL) una mesa completa de las grabaciones escolares.
Un ataque tan simplista como el presentado en XKCD no es tan fácil de hacer en WordPress. Pero otras formas de comprometer su base de datos son. Como una prueba de concepto de tan fácil como puede escribir un código de base de datos vulnerable en WordPress, vine con esto: add_shortcode (‘hack_my_db’, ‘hack_my_db’); function hack_my_db () {$ id = $ _get [‘id’]; Global $ WPDB; $ post_title = $ wpdb-> get_var (‘seleccione post_title de wp_posts donde id =’. $ id); devolver $ post_title; } ¿Qué hace este código, que solo debe ejecutar en un servidor de prueba local? Se necesita una cadena de consulta arbitraria (como la parte después del signo de interrogación en una URL como http://wordpress.org?id=123) y hace una base de datos con ella. Esto sería similar a la página de control, creada por un código corto, en un complemento de comercio electrónico. El código específico que escribí no requiere $ WPDB, pero un código comparable podría. Usar este método es una de las cosas fáciles que habría hecho este código seguro. Porque este código no prepara la puerta abierta de alguien para lanzar un ataque de inyección SQL. De hecho, grabé un video adicional sobre el funcionamiento de esta vulnerabilidad de inyección SQL utilizando una herramienta gratuita y fácil. El ataque “Bobby Tablas” no funcionó para mí, pero logré explotar este código para encontrar el nombre de usuario y las contraseñas de todos los usuarios en el sitio. Necesitamos su dirección de correo electrónico para enviarle esto:

Cómo ser protegido por un ataque de inyección SQL Lo simple es usar Preparar y decirle a la estructura de la base de datos de su consulta y que reemplazará una parte de ella con un entero. Lo simple que debe hacer es usar la preparación y decirle a la estructura de la base de datos de su consulta y que reemplazará una parte de ella con un entero. Si lo hiciste, soltar la tabla ___ nunca correría, no más un ataque complejo que el que usé. En respuesta a los cómics, alguien realmente creó Bobby-Tablas.com y explica la preparación de declaraciones (incluida una WordPress más detallada). La capa adicional de protección contra exactamente este tipo de problema. Debido a que los datos específicos de la base de datos que recibí podrían obtenerse de esta manera, serían más fáciles y sabios. Pero no se puede dirigir ningún uso de $ WPDB. Por lo tanto, es importante saber sobre la preparación, indiferente. También puede protegerse contra un ataque de inyección SQL en este caso con una desinfección bastante simple. Podemos asegurarnos de que el valor sea del tipo que esperamos, en este caso un entero, obligándolo a ser. En este caso, sabemos que queremos que el valor de $ ID sea un entero. Por lo tanto, podríamos simplemente usar la función PHP Intval para asegurarnos de que lo sea. Esto evitaría un ataque de inyección SQL, como pude hacer en el video para robar las credenciales de un sitio de WordPress.
Con parámetros más complicados para los interrogatorios de la base de datos, se puede requerir una higiene más compleja. No puede convertir una dirección de correo electrónico en un número antes de ingresarla en una base de datos. Allí llegará a algunas de las funciones incorporadas en WordPress para la desinfección, como Sanitize_Mail. La validación se puede hacer con algo como IS_EMAIL. Vale la pena decirlo, los usuarios deben y preferir la validación: dígales que su entrada es incorrecta, no solo cambiarla antes de actuar con ella. Pero cualquiera de ellos puede trabajar para proteger su base de datos con una secuencia de comandos SQL.Cross Site (XSS) Cross Scripting es una clase de ataques con mayor frecuencia al dejar que un campo de entrada vulnerable utilizado para escribir JavaScript que no espera ejecutar en su sitio y ser ejecutado allí. Aunque potencial podría tener PHP ejecutable para ejecutar de esta manera si no tuviera cuidado. Es la secuencia de comandos entre los sitios lo que hace necesario escapar de todos los resultados, esto es especialmente problemático porque JavaScript ha servido desde el mismo campo que es probable que el servidor tenga más privilegios que el del otro. Es la secuencia de comandos entre los sitios lo que hace necesario escapar de todos los resultados que no sabe que está lejos de JavaScript escrito mal o malicioso.
No es imposible, o incluso tan difícil para usted fallar sin pensamientos para desinfectar los datos en un área de textura en una forma que cree y luego no puede escapar cuando los muestra en un sitio. Esta es la forma más común en que permite que las personas lo ataquen desencadenando a JavaScript inesperado que roba o simplemente molesta a sus () visitantes de alerta no deseados. Cómo estar a salvo de XSS como sugerí anteriormente, hay dos líneas de defensa contra un ataque de secuencias de comandos entre sitios. El primero es validar y/o desinfectar todos los datos que obtiene de los usuarios antes de mostrarlos o guardarlos. Este es, nuevamente, un lugar donde podría desear usar la función IS_EMAIL. Pero los campos de texto muy largos y complejos le pedirán que use, por ejemplo, la función Strip_Tags del PHP. Si espera que un usuario le brinde una gran cantidad de texto simple, puede ejecutarlo a través de Strip_Tags y las etiquetas de script, y se eliminará la marca HTML. Por otro lado, puede evitar un ataque XSS escapando de la salida. Si un usuario ha enviado HTML y debe mostrar que HTML solo puede asegurarse de no permitir la ejecución de las etiquetas de script escapar de HTML. Hay muchas funciones de escape diferentes en WordPress. Algunos de los más utilizados e importantes son: Eschtml es la función de WordPress para asegurarse de que el texto que envíe no contenga HTML. Cambiará todos los soportes angulares, etc. En las entidades HTML correctas.
WP_KSES (_post) es una función menos utilizada que detiene el uso de ciertos elementos HTML.Explique lo que aceptará, y la función elimina otros tipos de marcado html.esc_attr es para cosas que alcanzarán las etiquetas de atributos HTML.Esencialmente, asegura que evite que las cosas salgan de comillas en las que las ha introducido por casualidad o maldad.
Ataque para falsificar la demanda en varios sitios La defensa más común contra esto es el uso de lo que se llama “Nonce”, un número utilizado una vez que una falsificación de solicitud de sitio cruzado (CSRF) es el más esotérico de esas tres vulnerabilidades principales. Se basa en la idea de que un usuario autorizado enviado a una determinada página o URL puede hacer cosas que no se dan cuenta. Cuando está asociado con un ataque XSS, un ejemplo sería una acción de “eliminación” realizada por un usuario que simplemente pensó que presionó, por ejemplo, un botón de “búsqueda”. La defensa más común contra esto es el uso de lo que se llama “Nonce”, un número utilizado una vez, para garantizar que la página “Eliminar” no acepte accidentalmente una solicitud de “búsqueda” para ello. Cada formulario enviará un NonCe que identifica que proviene de una determinada forma, y el código operativo no puede saber no, por el formulario de destino. Entonces, cuando verifica “Nonce” para el usuario que le envía el formulario, lo protege accidentalmente de lo que pensaba. Los detalles del uso de un no de WordPress no exceden el alcance de este artículo. Y nos faltan el contenido para explicar en WPShout. Este elemento CSS-Tretrks puede ocurrir hasta que tengamos uno para usted. La versión corta es que agregará un nonce a sus formularios de WordPress con una llamada a la función wp_nonce_field () y luego verificará el mismo nonce antes de realizar el formulario con una llamada a wp_verify_nonce. Saltar sobre cualquiera de estos pasos hace que todo funcione, como puedes adivinar.
Hay otras formas de no hacer Cess y se vuelven un poco más complicados con las solicitudes de AJAX, pero esta es la idea básica de ellas: no permita que alguien tome medidas a menos que sepa que quería hacer la acción específicamente. Otros problemas de seguridad para recordar los tres temas de lo anterior son las vulnerabilidades más comunes y peligrosas que un desarrollador involuntario puede proporcionar, pero no son las únicas cosas que podrían salir mal. Algunos otros que querrá tener en cuenta que son los problemas de capacidad en su código, los errores en el código del código y las redirecciones que pueden explotarse. Comprobaciones de capacidad Esto no es un error en el sentido de los primeros tres, porque no requiere “atacante”. Uno de los problemas más comunes en el código de WordPress que parece simple es olvidar que el usuario que está en una página que envía un formulario tiene el privilegio necesario para realizar esta acción. Este no es un error en el sentido de los primeros tres, porque no requiere “atacante”. Incluso un usuario ingenuo que actúa solo podría desencadenar este problema. Pero sigue siendo una fuente muy común de vulnerabilidades de seguridad. Si solo desea eliminar ciertos datos del sitio, asegúrese de verificar si el usuario que envía el formulario de eliminación de datos en su sitio es “Administrador”. Esto no es conceptualmente difícil, pero es muy fácil olvidar cuando tiene prisa. Current_user_can es a menudo la mejor manera de implementar esto, ya que verifica la “capacidad” del usuario, en lugar de los roles.
No salga de las cláusulas de guardia cuando le gusten las capacidades enumeradas anteriormente, no se asegure de que todo se detenga en su código cuando lo desee, puede causar problemas de seguridad muy fáciles, pero en realidad no es un ataque. Es simplemente asegurarme de que siempre te devuelva o morir en los lugares que quieres hacer. Este tipo de problema es un poco más difícil de detectar, porque podría pensar que su cláusula de seguridad ha salido, pero no lo hizo. Los errores lógicos son pequeños, pero pueden conducir a importantes problemas de seguridad. El error de Apple #GotoFail es el ejemplo por excelencia. Redirecciones explotables El último problema a considerar es que puede permitir que una cadena de consulta controle qué página se redirige el usuario después de una acción. Si hace esto, asegúrese de que sea una URL con la que esté satisfecho. Exactamente por esta razón, WordPress tiene una función llamada wp_safe_redirect. Puede parecer exagerado, pero una conexión inteligente con una URL que redirige de una manera que un usuario o desarrollador no espera en su sitio de WordPress podría ser un poderoso vector de ataque en manos de un atacante inteligente. Una dosis optimista de la realidad La realidad es que la mayor parte del código que escribí en mi carrera como WordPress independiente se ha ejecutado en un solo sitio. Y aunque trabajo para ser un desarrollador de WordPress durante mejores años, estoy seguro de que un código que escribí y ejecutando en algún lugar ha tenido una vulnerabilidad de inyección SQL, secuencias de comandos entre sitios o problemas similares.

Incluso complementos importantes, con millones de instalaciones y una fuerte necesidad de mantenerse seguros, cometer errores. Pero, hasta donde yo sé, mis errores se han hecho cargo de nadie. Puedo tentar al destino diciendo esto, pero cuando el código se implementa en un sitio (a corto plazo), está algo protegido de una pequeña escala. La seguridad es importante y todos los desarrolladores de WordPress deben tenerlo en cuenta, pero no es el caso que deba estar aterrorizado si ha cometido estos errores en el pasado. Incluso complementos importantes, con millones de instalaciones y una fuerte necesidad de mantenerse seguros, cometer errores. Y a menudo se descubren antes de que sean fuertemente explotados. (Esta es la razón, como administrador de WordPress, debe actualizar los complementos regularmente). Así como puede, la forma obvia es dejar de cometer estos errores. Y eso requiere aprendizaje. Espero que este artículo le haya aclarado cómo piensas sobre la seguridad de WordPress, pero no creo que sea la respuesta final a estas preguntas, se necesitará más aprendizaje. Pero el código seguro todavía importa. Mucho. Aunque su primer código inigualable implementado no será malo para usted o sus usuarios, solo requiere un solo error, explotado adecuadamente, para que esté en un mundo con dudas y arrepentimiento. Sé con certeza que no me gustaría saber que rompí una tienda de WooCommerce y los perdí (si no años) datos, dejando a un atacante no autorizado para llevar el sitio a través de una vulnerabilidad SQL o un ataque CSRF. Es por eso que siempre debe tener cuidado y cuidado cuando escribe código. La seguridad como idea posterior es común y problemática. Tu codigo
Los principios del código seguro de WordPress
Tags Los principios del código seguro de WordPress
homefinance blog