Hola,
He estado trabajando con WordPress durante varios años, pero para asegurarme de seguir las mejores prácticas actuales, estoy realizando el curso para desarrolladores principiantes de WordPress en Learn.Wordpress.org.
Llegué a la página Desarrollo seguro de complementos y temas (https://learn.wordpress.org/lesson/securely-developing-plugins-and-themes/).
Instalé el complemento de muestra y lo hice funcionar, pero estoy atascado en el Insumos sanitizantes sección:
$name = $_POST['name'];
$email = $_POST['email'];
global $wpdb;
$table_name = $wpdb->prefix . 'form_submissions';$sql = "INSERT INTO $table_name (name, email) VALUES ('$name', '$email')";
$result = $wpdb->query($sql);
Como puede ver, los datos se guardan directamente en la base de datos, sin ningún tipo de desinfección.
Esto significa que si un usuario enviara un nombre de
John'; DROP TABLE form_submissions;--Se ejecutaría la consulta SQL INSERT, seguida de la consulta DROP, ¡y la tabla se eliminaría de la base de datos!
Con fines puramente de aprendizaje en mi sitio de desarrollo, intenté ingresar un nombre de John’; DROP TABLE form_submissions;– en el campo de nombre del formulario (colocado en una página usando el código abreviado del complemento) y parece que realmente se está realizando algún tipo de desinfección.
Los datos se guardan normalmente a pesar del código de inyección SQL. ¿Ha cambiado algo para mejorar la seguridad?
También intenté agregar el prefijo de la tabla (estoy usando el valor predeterminado ‘wp’):
John'; DROP TABLE wp_form_submissions;--Pero esto tampoco funcionó.
¿Alguien tiene una respuesta a esto? Obviamente, no necesito estrictamente poder romper mi propio sitio (risas), pero sería satisfactorio saber cuál es el problema aquí para ayudarme a aprender qué debo evitar.
Cuando ejecuto SQL en la herramienta de administración de bases de datos AdminNeo, la consulta hace lo que se espera, por lo que es muy extraño.
Estoy ejecutando WordPress 7.0 en un entorno de desarrollo local (LocalWP) usando nginx y MySQL 8.0.35 si eso es útil. ¡Gracias de antemano por su apoyo!
La página con la que necesito ayuda: [log in to see the link]