Como blindar su página WordPress - versión en español
Esta charla fue presentada en el WordCamp Buenos Aires 2017 en 08/07/2017. (This talk was presented in the WordCamp Buenos Aires 2017 in 7/8/2017.)
https://2017.buenosaires.wordcamp.org
WPScan ● Detectar la versión de WordPress ● Enumerar vulnerabilidades ● Enumerar usuarios y romper passwords débiles ● Enumerar plugins y temas instalados ● Otros http://wpscan.org https://wpvulndb.com @donini
● Bloquear accesso al listado de usuarios Usuarios y Passwords http://www.meu-site.com.br/?author=1 http://www.meu-site.com.br/authors/admin RewriteCond %{REQUEST_URI} ^/$ RewriteCond %{QUERY_STRING} ^/?author=([0-9]*) RewriteRule ^(.*)$ http://www.meu-site.com.br.com/ [L,R=301] Forma de url: Agregar reglas a su archivo .htaceess es una de las maneras: @donini
● Cambie las claves con frecuencia, especialmente si usas ordenadores públicos. Uso de Passwords Fuertes https://en.support.wordpress.com/selecting-a-strong-password/ @donini
Exposición de la Versión ● Meta tag generator en marcación HTML y XHTML: ● Tag generator en feed ATOM, RSS 2 (posts y comentarios) y RDF ● En comentario HTML ● En comentario en el archivo de exportación ● En parámetros de URL ● En archivos del core: ● /readme.html ● /wp-admin/install.php ● /wp-admin/upgrade.php ● /wp-links-opml.php` @donini
Bloqueando la Exposición de la Versión ● Archivos que no son necesarios: ● /readme.html ● /license.txt ● /wp-config-sample.php ● Archivos Temporarios: ● /wp-admin/install.php ● /wp-admin/upgrade.php public function remove_versio() { global $wp_version; $wp_version = 'version_hidden'; } add_action(‘init’,’remove_version’);
● Permisiones adecuadas ● Prefijo de las tablas Cómo Proteger el Banco de Datos $table_prefix = ‘wpd_meu_site_’; https://codex.wordpress.org/Database_Description @donini
● Antes de elegir un plugin o tema siempre verificar el WPScan Vulnerability Database ● Evitando SQL Injection en sus temas y plugins: SQL Injection $sql = $wpdb->prepare( ‘[MINHA-QUERY-SQL]’, $variavel ); $sql = $wpdb->prepare( ‘MI-QUERY-SQL-CON-STRING-%s-INT-%d- FLOAT- %f’, $integer, $string, $float); http://codex.wordpress.org/Class_Reference/wpdb @donini
● Definiendo el uso de SSL SSL En WordPress define( 'FORCE_SSL_LOGIN', true ); // Forza el uso solamente de login en ambiente seguro define( 'FORCE_SSL_ADMIN', true ); // Forza el uso para todo el area administrativa, incluyendo login RewriteEngine On RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] 1 2 3 @donini
● Donde normalmente se suele poner: Protegiendo el Archivo wp-config.php /public_html/wp-config.php ● Donde se sugiere colocar /wp-config.php https://codex.wordpress.org/Editing_wp-config.php @donini
Disallow_File_Edit Versus Disallow_file_Mods ● DISALLOW_FILE_EDIT: inhabilita los cambios en archivos de temas y plugins ● DISALLOW_FILE_MODS: inhabilita la edición de los archivos y actualizaciones automáticas. @donini
● Casi un 60% de las instalaciones WordPress están desactualizadas en el mundo todo. ● Como ya se habló un montón de veces, mantener un ambiente debidamente actualizado minimiza al máximo los fallos de vulnerabilidad y, luego, los intentos de invasión. ● La actualización está definida para core y debe ser extendida para los plugins, temas, el sistema operacional y todos los demás programas. Una versión desactualizada puede dejar puertas abiertas y con la llave en la cerradura. Y eso no es responsabilidad de la aplicación. Actualización del WordPress https://codex.wordpress.org/Updating_WordPress @donini