{"id":75,"date":"2014-12-15T10:00:07","date_gmt":"2014-12-15T09:00:07","guid":{"rendered":"http:\/\/tecnologiasweb.jsenso.es\/?p=75"},"modified":"2014-12-15T10:00:07","modified_gmt":"2014-12-15T09:00:07","slug":"seguridad-en-wordpress","status":"publish","type":"post","link":"https:\/\/blogs.ugr.es\/tecweb\/seguridad-en-wordpress\/","title":{"rendered":"Seguridad en WordPress"},"content":{"rendered":"<p>Cuando se habla de este potente CMS para la gesti\u00f3n de blogs no se suele dedicar el tiempo que requiere a cuestiones relacionadas con la seguridad. En la mayor\u00eda de los sitios te cuentan que borres un par de ficheros y que instales un par de plugins, y ya est\u00e1.<\/p>\n<figure id=\"attachment_173\" aria-describedby=\"caption-attachment-173\" style=\"width: 349px\" class=\"wp-caption alignright\"><a href=\"https:\/\/blogs.ugr.es\/tecweb\/wp-content\/uploads\/sites\/55\/2018\/10\/wpmarket.png\"><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-173\" src=\"https:\/\/blogs.ugr.es\/tecweb\/wp-content\/uploads\/sites\/55\/2018\/10\/wpmarket.png\" alt=\"El mercado de los CMS en 2014. Fuente: http:\/\/www.opensourcecms.com\/general\/cms-marketshare.php\" width=\"349\" height=\"237\" \/><\/a><figcaption id=\"caption-attachment-173\" class=\"wp-caption-text\">El mercado de los CMS en 2014. Fuente: http:\/\/www.opensourcecms.com\/general\/cms-marketshare.php<\/figcaption><\/figure>\n<p>WorPress es el CMS m\u00e1s empleado en el mundo. El gr\u00e1fico que acompa\u00f1a esta entrada es de <a href=\"http:\/\/www.opensourcecms.com\" target=\"_blank\">OpenSourceCMS.com<\/a>, pero da lo mismo de d\u00f3nde lo saques. Aunque var\u00ede el porcentaje, el efecto sigue siendo el mismo (por ejemplo, <a href=\"https:\/\/wappalyzer.com\/categories\/cms\" target=\"_blank\">Wappalizer<\/a>, <a href=\"http:\/\/trends.builtwith.com\/cms\" target=\"_blank\">Built With<\/a> o <a href=\"http:\/\/w3techs.com\/technologies\/overview\/content_management\/all\" target=\"_blank\">W3 Techs<\/a>). Y acaparar tantas miradas suele traer problemas: ser el objetivo de gente a la que le gusta destrozar el trabajo de los dem\u00e1s.<\/p>\n<p>En todas las instalaciones que se realicen, ya sea en modo local (para pruebas y betas) o en modo remoto (hosting), siempre es muy recomendable tomar una serie de medidas de seguridad. Las que no aconsejo son:<\/p>\n<ul>\n<li><strong>Cambiar el prefijo de las tablas<\/strong>. Siempre que se crea una base de datos en MySQL es posible definir el prefijo que tendr\u00e1n las tablas que se incluir\u00e1n en dicha base de datos. Por defecto, WordPress emplear\u00e1 el prefijo wp_<a href=\"https:\/\/blogs.ugr.es\/tecweb\/wp-content\/uploads\/sites\/55\/2018\/10\/wpinstall.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter  wp-image-175\" src=\"https:\/\/blogs.ugr.es\/tecweb\/wp-content\/uploads\/sites\/55\/2018\/10\/wpinstall.png\" alt=\"instalaci\u00f3n de wordpress\" width=\"574\" height=\"410\" \/><\/a>y si t\u00fa y yo sabemos esto, significa que lo sabe todo el mundo. Proporcionar tanta informaci\u00f3n vuelve a nuestros sistemas d\u00e9biles. Si est\u00e1s instalando WorPress desde el principio, en la pantalla de instalaci\u00f3n cambia el prefijo. Si ya tienes instalado el programa podr\u00e1s emplear cualquier plugin para ello. Te recomiendo <a href=\"http:\/\/www.seoegghead.com\/software\/wordpress-table-rename.seo\" target=\"_blank\">WordPress Table Prefix Rename Plugin<\/a>. Por cierto si este es tu caso, antes de iniciar el proceso haz una copia de seguridad de la base de datos. Por si las moscas.<\/li>\n<li><strong>Cambia el nombre de la base de datos<\/strong>. Lo que suele hacer todo el mundo es crear una base de datos con nombre \u00abwordpress\u00bb. Vale, pues lo has hecho mal. Cambia ese nombre a otra cosa que no sea tan evidente. De hecho, lo mejor es poner combinaciones de letras y n\u00fameros.<\/li>\n<li><strong>Elimina los ficheros readme.html e install.php<\/strong>. Una vez hayas finalizado la instalaci\u00f3n esos dos ficheros no te valen de nada. Borralos. No es muy dif\u00edcil saber qu\u00e9 <a href=\"https:\/\/wordpress.org\/news\/category\/security\/\" target=\"_blank\">errores de seguridad tiene cada versi\u00f3n<\/a> de WordPress. Cualquiera que lea el fichero readme.html sabr\u00e1 la versi\u00f3n instalada y&#8230; Adem\u00e1s, es posible que el tema que hayas escogido tambi\u00e9n informe sobre la versi\u00f3n con la que trabajas. Siendo coherentes:<\/li>\n<li><strong>Elimina la informaci\u00f3n sobre la versi\u00f3n en el tema<\/strong>. Para ello s\u00f3lo tienes que ir al fichero de funciones del sistema (funcions.php) del tema e introducir unas cuantas l\u00edneas al final del fichero. Esas l\u00edneas eliminan informaci\u00f3n\u00a0que se\u00a0rellena autom\u00e1ticamente en la etiqueta &lt;head&gt;\u00a0y que no nos beneficia para nada\u00a0:\n<div class=\"crayon-pre\">\n<address id=\"crayon-54872156aa00f427121432-1\" class=\"crayon-line\"><span class=\"crayon-ta\">remove_action(&#8216;wp_head&#8217;, &#8216;wp_generator&#8217;);<br \/>\nremove_action(&#8216;wp_head&#8217;, &#8216;rsd_link&#8217;);<br \/>\nremove_action(&#8216;wp_head&#8217;, &#8216;wlwmanifest_link&#8217;);<br \/>\nremove_action(&#8216;wp_head&#8217;, &#8216;index_rel_link&#8217;);<br \/>\nremove_action(&#8216;wp_head&#8217;, &#8216;parent_post_rel_link&#8217;, 10, 0);<br \/>\nremove_action(&#8216;wp_head&#8217;, &#8216;start_post_rel_link&#8217;, 10, 0);<br \/>\nremove_action(&#8216;wp_head&#8217;, &#8216;adjacent_posts_rel_link&#8217;, 10, 0);<\/span><\/address>\n<\/div>\n<\/li>\n<li><strong>Ten todo actualizado<\/strong>. Continuamente salen nuevas versiones que corrigen errores, tapan puertas, aumentan la seguridad&#8230; debes tener siempre actualizado el sistema. Y esto se refiere tanto a WordPress, como a los plugins y al tema.<\/li>\n<li><strong>Crea copias de seguridad de la base de datos<\/strong>. Existen varios plugins que se encargan de automatizar este proceso, as\u00ed que ya no tienes excusa. Mi consejo es que aproveches aquellos que guardan la copia de seguridad creada en alg\u00fan servicio en la nube, tipo <a href=\"http:\/\/drive.google.com\" target=\"_blank\">Google Drive<\/a> o <a href=\"http:\/\/dropbox.com\" target=\"_blank\">Dropbox<\/a>. Yo uso <a href=\"https:\/\/wordpress.org\/plugins\/backwpup\/\" target=\"_blank\">BackWPup<\/a> y funciona realmente bien. Si tienes el blog hospedado en un hosting, como medida extra, deber\u00edas<strong> crear copias de seguridad del dominio<\/strong> y de la base de datos.<\/li>\n<li><strong>Crea contrase\u00f1as fuertes<\/strong>. Generalmente, por vagancia mental, solemos usar las contrase\u00f1as t\u00edpicas a pesar de que sabemos que con eso no se va a ning\u00fan lado. Haz un esfuerzo y pon contrase\u00f1as complejas, con letras en may\u00fascula, min\u00fascula, n\u00fameros, s\u00edmbolos&#8230; Es m\u00e1s, si junto a una buena contrase\u00f1a instalas un sistema de autentificaci\u00f3n, tipo <a href=\"https:\/\/wordpress.org\/plugins\/google-authenticator\/\" target=\"_blank\">Google Authenticator<\/a>, la cosa ya se vuelve mucho m\u00e1s robusta.<\/li>\n<li><strong>Cambia la URL de acceso y administraci\u00f3n<\/strong>. Lo habitual suele ser que para acceder a la zona de usuario los datos se introduzcan en la direcci\u00f3n http:\/\/www.ejemplo.com\/wp-admin Lo ideal es cambiar la carpeta en la que se almacena esa informaci\u00f3n. El plugin <a href=\"https:\/\/wordpress.org\/plugins\/better-wp-security\/\" target=\"_blank\">iThemes Security<\/a> te permite hacerlo de forma f\u00e1cil.<\/li>\n<li><strong>Borra lo que no uses<\/strong>. Es muy frecuente que se acumulen plugins y temas\u00a0instalados\u00a0pero no\u00a0activados. Pueden suponer un riesgo de seguridad (adem\u00e1s de ocupar espacio innecesariamente). Elimina todo eso.<\/li>\n<li><strong>Edita los permisos de los roles<\/strong>. En WordPress hay muy pocos roles. Y los que hay vienen con una serie de permisos por defecto. Lo mejor es ajustarlos, con el fin de lograr adaptar mejor cada rol a lo que realmente queremos que haga en el blog. El mejor plugin para eso es <a href=\"https:\/\/wordpress.org\/plugins\/user-role-editor\/\" target=\"_blank\">User Rol Editor<\/a>.<\/li>\n<li><strong>Desactiva el c\u00f3digo HTML en los comentarios<\/strong>. En HTML se pueden escribir muchas cosas, y no todas buenas. Lo mejor es evitar que los comentarios se escriban sobre HTML.\u00a0Para eso debes ir al fichero de funciones del sistema (funcions.php) del tema e introducir esta l\u00ednea\u00a0al final del fichero:<\/li>\n<\/ul>\n<address style=\"padding-left: 90px\">add_filter(&#8216;pre_comment_content&#8217;, &#8216;wp_specialchars&#8217;);<\/address>\n<p style=\"padding-left: 60px\">\u00a0 Y recuerda: lo ideal es moderar siempre los comentarios.<\/p>\n<ul>\n<li><strong>Elimina la cuenta admin<\/strong>. El usuario admin es el que se crea por defecto en cualquier instalaci\u00f3n de WordPress. La forma habitual realizar un ataque de fuerza bruta:<\/li>\n<\/ul>\n<p><a href=\"http:\/\/youtu.be\/PpjgKw3x9Ig\">http:\/\/youtu.be\/PpjgKw3x9Ig<\/a><\/p>\n<p style=\"padding-left: 60px\">Eliminarlo es muy f\u00e1cil. Lo primero que tienes que hacer es crear un usuario nuevo con los permisos de administrador. Luego entras en el sistema con ese nuevo usuario y eliminas <em>admin<\/em>.<\/p>\n<ul>\n<li><strong>Protege tu fichero XML-RPC<\/strong>. El <a href=\"http:\/\/www.xatakaon.com\/seguridad-en-redes\/que-es-un-ddos-o-un-ataque-distribuido-de-denegacion-de-servicio\" target=\"_blank\">ataque de denegaci\u00f3n de servicio distribuido <\/a>(DDOS) es uno de los m\u00e1s habituales. Y en WordPress se suele utilizar el protocolo <a href=\"http:\/\/es.wikipedia.org\/wiki\/XML-RPC\" target=\"_blank\">XML-RPC<\/a> para ello, ya que se matan varios p\u00e1jaros de un tiro. Para evitar esto, el m\u00e9todo m\u00e1s sencillo es renombrar el fichero <span style=\"font-family: Courier New\">xmlrpc.php<\/span> que cuelga de ra\u00edz. Eso s\u00ed, recuerda volver a hacerlo despu\u00e9s de cada actualizaci\u00f3n de WordPress, ya que volver\u00e1 a instalarlo.<\/li>\n<li><strong>Crea un archivo vac\u00edo con el nombre index.html<\/strong>. Y lo copias en todos los directorios de tu instalaci\u00f3n. De esa manera lograr\u00e1s que no se pueda generar un listado con el contenido\u00a0del directorio.<\/li>\n<li><strong>Define las claves de seguridad de wp-config.php<\/strong>. Se trata de claves de seguridad que mejoran la encriptaci\u00f3n de la informaci\u00f3n almacenada en las cookies de usuario. Si te conectas a <a href=\"http:\/\/api.wordpress.org\/secret-key\/1.1\/\" target=\"_blank\">WordPress<\/a> ser\u00e1 posible cambiarlas autom\u00e1ticamente.<\/li>\n<\/ul>\n<p><a href=\"https:\/\/blogs.ugr.es\/tecweb\/wp-content\/uploads\/sites\/55\/2018\/10\/apiwp.gif\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-187 alignright\" src=\"https:\/\/blogs.ugr.es\/tecweb\/wp-content\/uploads\/sites\/55\/2018\/10\/apiwp.gif\" alt=\"claves de seguridad de WP\" width=\"759\" height=\"68\" \/><\/a><\/p>\n<ul>\n<li><strong>Crea un buen fichero robots.txt<\/strong>. De esa manera te aseguras de que no se indiza contenido que no tiene que ser visible.<\/li>\n<li><strong>Protege el archivo wp-config.php<\/strong>. En ese fichero se almacena toda la informaci\u00f3n sensible de tu instalaci\u00f3n, as\u00ed que lo mejor es poner dif\u00edcil el acceso. Lo ideal es mover el fichero de sitio (a una carpeta anterior de wp-admin) para evitar problemas. Pero si tienes instalado WordPress en ra\u00edz, la soluci\u00f3n pasa por modificar el fichero .htaccess para impedir el acceso. Esta orden es perfecta:<\/li>\n<\/ul>\n<address style=\"padding-left: 60px\">&lt;Files wp-config.php&gt;<\/address>\n<address style=\"padding-left: 90px\">Order Allow, Deny<\/address>\n<address style=\"padding-left: 90px\">Deny from all<\/address>\n<address style=\"padding-left: 60px\">&lt;\/Files&gt;<\/address>\n<ul>\n<li>Instala un firewall. Evitar\u00e1s que infecten tus ficheros php, que suele ser la forma m\u00e1s sencilla de atacar un sitio web. Me gusta mucho <a href=\"https:\/\/wordpress.org\/plugins\/wp-simple-firewall\/\" target=\"_blank\">WP simple Firewall<\/a>.<\/li>\n<li><strong>Y lo evidente, para el final: instala buenos plugins de seguridad<\/strong>. Los que m\u00e1s me gustan son <a href=\"https:\/\/wordpress.org\/plugins\/better-wp-security\/\" target=\"_blank\">iThemes Security<\/a> y <a href=\"https:\/\/wordpress.org\/plugins\/wordfence\/\" target=\"_blank\">Wordfence<\/a>.<\/li>\n<\/ul>\n<p>Si te va la marcha, nunca viene mal verificar la seguridad de su sitio. Para eso puedes usar cualquiera de los servicios que existen para eso. Basta con introducir la URL de tu blog y ellos se encargar\u00e1n de notificarte de los errores graves detectados. Entre ellos:<\/p>\n<ul>\n<li><a href=\"http:\/\/sitecheck.sucuri.net\" target=\"_blank\">Sucuri<\/a><\/li>\n<li><a href=\"http:\/\/www.urlvoid.com\" target=\"_blank\">URLVoid<\/a><\/li>\n<li><a href=\"http:\/\/www.unmaskparasites.com\/\" target=\"_blank\">Unmask Parasites<\/a><\/li>\n<li><a href=\"http:\/\/www.quttera.com\" target=\"_blank\">Quttera<\/a><\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Cuando se habla de este potente CMS para la gesti\u00f3n de blogs no se suele dedicar el tiempo que requiere a cuestiones relacionadas con la seguridad. En la mayor\u00eda de los sitios te cuentan que borres un par de ficheros y que instales un par de plugins, y ya est\u00e1. WorPress es el CMS m\u00e1s [&hellip;]<\/p>\n","protected":false},"author":65,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_genesis_hide_title":false,"_genesis_hide_breadcrumbs":false,"_genesis_hide_singular_image":false,"_genesis_hide_footer_widgets":false,"_genesis_custom_body_class":"","_genesis_custom_post_class":"","_genesis_layout":"","footnotes":""},"categories":[44,45],"tags":[46,47],"class_list":{"0":"post-75","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-blogs","7":"category-content-management-systems","8":"tag-seguridad","9":"tag-wordpress","10":"entry"},"_links":{"self":[{"href":"https:\/\/blogs.ugr.es\/tecweb\/wp-json\/wp\/v2\/posts\/75","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.ugr.es\/tecweb\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.ugr.es\/tecweb\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.ugr.es\/tecweb\/wp-json\/wp\/v2\/users\/65"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.ugr.es\/tecweb\/wp-json\/wp\/v2\/comments?post=75"}],"version-history":[{"count":0,"href":"https:\/\/blogs.ugr.es\/tecweb\/wp-json\/wp\/v2\/posts\/75\/revisions"}],"wp:attachment":[{"href":"https:\/\/blogs.ugr.es\/tecweb\/wp-json\/wp\/v2\/media?parent=75"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.ugr.es\/tecweb\/wp-json\/wp\/v2\/categories?post=75"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.ugr.es\/tecweb\/wp-json\/wp\/v2\/tags?post=75"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}