Hola muy buenos días muy buenas tardes o muy buenas noches 😉 Te doy la bienvenida a Meetup Majadahonda WordPress sin plugins.
Este fue mi primer meetup como ponente en Meetup Majadahonda WordPress sin plugins, el primero en Majadahonda y el primero de todos también. Me gustó muchísimo esta experiencia y estoy deseando repetirla.
Aquí abajo encontrarás tanto el vídeo que Antonio Postigo de HoyStreaming.com nos grabó, como la presentación que utilicé para dar la charla en este evento.
Antes de nada dar también las gracias a Julian de CowUp y a Pedro Santos de Host-Fusion.com y a toda la comunidad de Meetup WordPress Majadahonda.
Lo que te vas a encontrar aquí
Meetup Majadahonda WordPress sin plugins – Presentación

En esta presentación vemos cómo llevar a la práctica, de forma manual, algunos de los puntos mas importantes de la seguridad de WordPress.
El objetivo de esta charla fue doble:
- Acercarnos un poquito a la parte de ficheros de configuración y cambios manuales en WordPress.
- Cubrir, con estos cambios manuales, algunos de los puntos más importantes de la seguridad en WordPress.
- Y como punto extra, hacer una comparación de os puntos que habíamos cubierto de forma manual con los punto que ns permite cubrir Sucuri Security con un solo clic.
Aquí te dejo la presentación que utilicé para esta charla :
Aquí está el vídeo que Antonio grabó y difundió en streaming :
Meetup Majadahonda WordPress sin plugins – Esquema de la charla
Cambios en el archivo wp-config
- Salts
- db_name
- db_user_admin
- db_user_admin_password
- prefijo
- Modo debug
- Rutas del contenido
- Forzar SSL en el Login y panel de administrador
- URLs de wordpress
- Limitar la edición de código desde el panel de administrador
- Limitar revisiones
<?php /** * The base configuration for WordPress * * The wp-config.php creation script uses this file during the * installation. You don't have to use the web site, you can * copy this file to "wp-config.php" and fill in the values. * * This file contains the following configurations: * * * MySQL settings * * Secret keys * * Database table prefix * * ABSPATH * * @link https://codex.wordpress.org/Editing_wp-config.php * * @package WordPress */ // ** MySQL settings ** // /** The name of the database for WordPress */ define( 'DB_NAME', 'local' ); /** MySQL database username */ define( 'DB_USER', 'root' ); /** MySQL database password */ define( 'DB_PASSWORD', 'root' ); /** MySQL hostname */ define( 'DB_HOST', 'localhost' ); /** Database Charset to use in creating database tables. */ define( 'DB_CHARSET', 'utf8' ); /** The Database Collate type. Don't change this if in doubt. */ define( 'DB_COLLATE', '' ); /** * Authentication Unique Keys and Salts. * * Change these to different unique phrases! * You can generate these using the {@link https://api.wordpress.org/secret-key/1.1/salt/ WordPress.org secret-key service} * You can change these at any point in time to invalidate all existing cookies. This will force all users to have to log in again. * * @since 2.6.0 */ define('AUTH_KEY', 'UuS6dgxBxGWTOFB30Xcm+6tltgRvm3p8j5TgUOn+zXIlkJe4f6dv0S8yjQJ0eh9H9M3lskKLrQXYn5eG3ucDIg=='); define('SECURE_AUTH_KEY', 'UBjdjCVMfyG2qf0sdV2euNpZXYbIOyWINNccjjoL6aXHYIyPjUW48c6iuIckVc4Qns9LWuXEVwhLFfaR8mYZ0g=='); define('LOGGED_IN_KEY', 'jymKGpHNfZONBkws2lLbh1BMDKqqe6E5dl4Cq/+yoFEnfPnxMmMi32ifCRFjmVNszrKplhVaftEt7FBO8NKKmA=='); define('NONCE_KEY', 'VN92uyY/YQRBWzist178SH1HHN3grmq9Y3icbAKjglHG9MYjPRkMN2l32QT3niZQ3zlWu8BxhdPlI08NtB3mag=='); define('AUTH_SALT', '3szYezAj4UUkdebpGQObqPbZC30OjGJL4Q760X+kFoWPChYdTODSY4xVMzYCyStk5Qo7zTS3Qp0a6YcABBIV5w=='); define('SECURE_AUTH_SALT', 'zI6gjXG7wQyMdn7hFSPGx1kNBLnvouc1B3r9lSH3n5AubJbWJ4/Gj/Heaf8laPYB5lCSdzyuPmk+qwsaiAYXiA=='); define('LOGGED_IN_SALT', '4jI391jFjXBukaJ4i0h4riK9ARH7I4NL19LcgJW4bTLdxwCS7UZmDaX8o/QEz7OK6QyPNZC+WwH2xNKWnaPGGw=='); define('NONCE_SALT', 'i8cOSLze1VM0c5y2PoAwXuq8Z+c765DnwbT8cz8tE7V9JmT00NdKjZsODw+zopUEJpaZ8yQgeKJqgRP/dBsV5w=='); /** * WordPress Database Table prefix. * * You can have multiple installations in one database if you give each * a unique prefix. Only numbers, letters, and underscores please! */ $table_prefix = 'wp_'; /*No permitir la edicion de Themes y Plugins*/ define( 'DISALLOW_FILE_EDIT', true ); /*Modificar rutas de contenidos*/ define( 'WP_CONTENT_DIR', dirname(__FILE__) . '/blog/wp-content' ); define( 'WP_CONTENT_URL', 'http://wordpress.dev/blog/wp-content' ); define( 'WP_PLUGIN_DIR', dirname(__FILE__) . '/blog/wp-content/plugins' ); define( 'WP_PLUGIN_URL', 'http://wordpress.dev/blog/wp-content/plugins' ); $theme_root = WP_CONTENT_DIR . '/themes'; define( 'UPLOADS', 'wp-content/media' ); /* Inserted by Local by Flywheel. See: http://codex.wordpress.org/Administration_Over_SSL#Using_a_Reverse_Proxy */ if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') { $_SERVER['HTTPS'] = 'on'; } /* That's all, stop editing! Happy blogging. */ /** Absolute path to the WordPress directory. */ if ( ! defined( 'ABSPATH' ) ) define( 'ABSPATH', dirname( __FILE__ ) . '/' ); /** Sets up WordPress vars and included files. */ require_once ABSPATH . 'wp-settings.php';
Cambios en el archivo .htaccess
- Bloquear acceso al directorio wp-includes.
- Bloquear acceso a WP-CONFIG.
- Sólo permitir nuestra IP en el login.
- Proteger acceso al archivo HTACCESS.
- Cerramos acceso a directorios de themes y plugins.
- Forzar redirección a HTTPS.
# BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # END WordPress #SSL RewriteEngine On RewriteCond %{HTTPS} off RewriteCond %{REQUEST_URI} !^/[0-9]+\..+\.cpaneldcv$ RewriteCond %{REQUEST_URI} !^/[A-F0-9]{32}\.txt(?:\ Comodo\ DCV)?$ RewriteCond %{REQUEST_URI} !^/\.well-known/acme-challenge/[0-9a-zA-Z_-]+$ RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] # Bloqueamos acceso al directorio includes <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^wp-admin/includes/ - [F,L] RewriteRule !^wp-includes/ - [S=3] RewriteRule ^wp-includes/[^/]+\.php$ - [F,L] RewriteRule ^wp-includes/js/tinymce/langs/.+\.php - [F,L] RewriteRule ^wp-includes/theme-compat/ - [F,L] </IfModule> # Bloqueamos acceso a WP-CONFIG <Files wp-config.php> Order Allow,Deny Deny from all </Files> # Sólo nuestra IP en el login <Files wp-login.php> Order Allow,Deny Deny from all Allow from 127.0.0.1 </Files> # Protegemos nuestros HTACCESS <Files ~ “^.*\.([Hh][Tt][Aa])”> Order allow,deny Deny from all Satisfy all </Files> # Cerramos acceso a directorios de themes y plugins RewriteCond %{REQUEST_URI} !^/wp-content/plugins/file/to/exclude\.php RewriteCond %{REQUEST_URI} !^/wp-content/plugins/directory/to/exclude/ RewriteRule wp-content/plugins/(.*\.php)$ - [R=404,L] RewriteCond %{REQUEST_URI} !^/wp-content/themes/file/to/exclude\.php RewriteCond %{REQUEST_URI} !^/wp-content/themes/directory/to/exclude/ RewriteRule wp-content/themes/(.*\.php)$ - [R=404,L] # No permitir ver los directorios Options -Indexes
Cambios en el function.php
- Eliminar la meta etiqueta generator
- Eliminar acceso por XMLRPC
- Eliminar acceso por API REST
//Eliminar la meta etiqueta Generator remove_action('wp_head','wp_generator'); //Deshabilitar la REST-API add_filter('rest_enabled','__return_false'); add_filter('rest_jsonp_enabled','__return_false'); //Deshabilitar XML-RPC add_filter('xmlrpc_enabled', '__return_false');
Meetup Majadahonda WordPress sin plugins – Conclusión
Como te contaba este fue mi primer meetup como ponente y me encantó la experiencia. Me sentí muy bien recibido y muy cómodo. Recibí preguntas tanto de la gente que allí estaba como de la gente que estaba viéndolo online y tanto yo como los compañeros contestamos y resolvimos las dudas.
Alguna duda también quedó para después porque no lo teníamos del todo claro. Pero después de echar un vistazo en Google quedó todo resuelto 🙂
Meetup Majadahonda WordPress sin plugins – El NetWorking
Como no podía ser de otro modo al terminar la charla nos fuimos la gran mayoría a tomar unas cervezas y a seguir compartiendo 🙂
Desde aquí quiero dar un especial saludo a los compañeros de Collado Villalba, que hasta allí se acercaron y también a Jesús, organizador de la meetup de Rivas que también hizo el esfuerzo de acercarse.
Y por supuesto no puedo olvidarme de Elena (Fundadora de Cotton Sweet), que desde el primer que nos conocimos me está apoyando.
Gracias a todos.
Muy bueno gracias Dani
De nada Pablo 🙂
Celebro que te haya gustado.
Cualquier duda o sugerencia será bienvenida.