Captura de la home de DISQUS

Al hilo de una pregunta del señor Sotoca de Criterion voy a repasar este tema de la Implementación de DISQUS en WordPress, pues creo que hace ya un par de años que implemente DISQUS como sistema de gestión de comentarios en aurea.es, por aquel entonces ningún problema. Pero no siempre es así, en otras implementaciones me ha dado errores a la hora de importar los datos, principalmente en aquellos WordPress que tengan antigüedad. Los errores son causados generalmente por el sistema de codificación de caracteres donde se dan divergencias.

Primero de todo un backup general (base de datos y ficheros), más vale que sobre que no falte.

Del lado de DISQUS

  1. Añadimos nuestro sitio desde disqus.com, y en el admin de disqus > “add new site”.
  2. Configuramos las preferencias del “new site” en disqus, https://site.disqus.com/admin/settings/
  3. Incluimos los moderadores, https://site.disqus.com/admin/settings/moderation/
  4. Añadimos filters por seguridad, https://site.disqus.com/admin/settings/access/#!/?l=blacklist

    Ejemplo de filter:

    .*fuck.*, .*whore.*, 5h1t, 5hit,
    , a55, alert, anal, anus, ar5e, arrse, arse, ass, asses, assfukka, asshole.*, b!tch, b00bs, b17ch, b1tch, ballsack, bastard, beastial.*, bestial.*, bi+ch, biatch, bitch.*, blow job, blowjob, blowjobs, body, bollock, bollok, boner, buceta, bukkake, butthole, buttmunch, buttplug, c0ck, c0cksucker, carpet muncher, chink, cl1t, clit, cock, cock-sucker, cockface, cockhead, cockmunch.*, cocks, cocksuck.*, cocksuka, cocksukka, cok, cokmuncher, coksucka, coon, cox, cum, cummer, cumming, cums, cumshot, cunilingus, cunillingus, cunnilingus, cunt, cuntlick.*, cunts, cyalis, cyberfuc, d1ck, dick, dickhead, dirsa, dlck, donkeypunch.*, doosh, duche, dyke, ejaculat.*, ejakulate, f u c k, f u c k e r, f_u_c_k, fag, fagging, faggitt, faggot, faggs, fagot, fagots, fags, fatass, fcuker, fcuking, feck, fecker, felch.*, fellate, fellatio, flange, fleshflute, fook, fooker, fudge packer, fudgepacker, fuk, fuker, fukker, fukkin, fuks, fukwhit, fukwit, fux, fux0r, gangbang.*, gaylord, gaysex, goatse, hardcoresex, hell, heshe, hoar, hoare, homo, horniest, horny, hotsex, jack-off, jackoff, jap, java, javascript, jerk-off, jizz, kike, knob, knobead, knobed, knobend, knobhead, knobjocky, kondum, kondums, kum, kummer, kumming, kums, kunilingus, m0f0, m0fo, m45terbate, ma5terb8, ma5terbate, masochist, master-bate, masterb8, masterbat.*, mo-fo, mof0, mofo, muff, mutha, muthafecker, nazi, nigga, niggah, niggas, niggaz, nigger, niggers, nob, nob jokey, nobhead, nobjocky, nobjokey, numbnuts, nutsack, orgasim, orgasims, orgasm, orgasms, p0rn, phonesex, phuck, phuk, phuked, phuking, phukked, phukking, phuks, phuq, pimpis, poop, porn, porno, pornography, pornos, prick, pricks, pube, pusse, pussi, pussies, pussy, pussys, rectum, retard, rimjaw, rimming, s_h_i_t, sadist, schlong, screwing, script, scroat, scrote, scrotum, semen, sex, sh!+, sh!t, sh1t, shemale, shi+, shit, shitdick, shite, shithead, shiting, shitings, shits, shitted, shitter.*, shitting.*, shitty, skank.*, slut, sluts, smegma, smut, snatch, son-of-a-bitch, spic, spunk, t1tt1e5, t1tties, tit, tits, titt, tittie5, titties, tittywank, titwank, tosser, tw4t, twat, twathead, twatty, twunt.*, v14gra, viagra, wank.*, whoar, willies, xrated, xss, xxx
    
  5. En opciones avanzadas también podemos ir al link de API donde crear una app para las opciones especiale que podamos integrar, https://disqus.com/api/docs/categories/

Del Lado de WordPress

  1. Instalamos (desde wp-admin > añadir plugin), el plugin oficial de disqus.

  2. Desde wp-admin > comentarios > plugin settings. Establecemos la configuración básica.

  3. Para migrar los comentarios hay dos formas, a mi la que menos errores me da y más rápida me parece es:

    1. Exportar de WordPress los comentarios (fichero WXR): wp-admin >tools > export.
    2. Importar en disqus subiendo el fichero WXR resultante de la exportación.

Conflictos

Como decía, a veces se producen errores relacionados con el sistema de caracteres. DISQUS nos dirá el error y con nuestro gestor de código preferido podemos buscar ese patrón erróneo y remplazarlo por el bueno en el fichero XML. Cuando estén solucionados todos los errores volvemos a importar. Si se dan muchos errores sería más rápido atajarlos con querys a la base de datos o cambiando la codificación de caracteres de ese campo o tabla en la base de datos.

seguridad-en-wordpress

1. Tu equipo y tu conexión segura antes que la seguridad en WordPress

  • Parece obvio, pero no lo es tanto. Esto es lo primero antes de meternos con la seguridad en WordPress.
  • Usa sFTP.
  • Accede al panel de administración de tu WordPress, únicamente desde tu conexión y equipo habitual (entendiendo que ambos son completamente seguros).

2. Backups

Realizar copias periódicas de seguridad tanto de los ficheros como de la base de datos de nuestro WordPress.

3. WordPress

  • Descargar WordPress de su web oficial: http://wordpress.org
  • Siempre actualizar WordPress tras la salida de una nueva versión.

4. Plugins

  • Ser conscientes de que los plugins son códigos realizados por terceros programadores.
  • Usar los plugins estrictamente necesarios y de total confianza para nuestro proyecto.
  • Solo descargar del sitio oficial: http://wordpress.org/plugins/.
  • Tener las últimas versiones de los plugins almacenado en nuestro WordPress (esten activos o no).
  • Quitar del servidor todos los plugins que no usemos.
  • Saber que cuanto más plugins, más vulnerabilidad y menor escalabilidad tendremos.

Hay solo un plugin que si consideraría implementar para la seguridad en WordPress:

  • Better WordPress Security: Asegura tu WordPress en pocos minutos. Chequea, recomienda y facilita la configuración más segura.

5. Themes

  • Usar un buen theme, bien programado y de confianza.
  • Tener las últimas versiones de los themes almacenado en nuestro WordPress (esten activos o no).
  • Solo usamos un theme, quitar del servidor el resto.

6. Ficheros y permisos

7. Base de datos

  • Cambiar el prefijo por defecto de WordPress para las tablas «wp_» por uno más complejo.

8. Editar htaccess, wp-config.php y functions.php

.htaccess

A continuación he reunido algunos códigos para evitar posibles puntos flojos de seguridad y protegernos más del spam.
Sustituir *yourdomain.com.* por nuestro dominio en el código del apartado «# For AntiSpam Deny Access to No Referrer Requests».
Estos códigos deben incorporarse al fichero .htaccess del directorio raíz de nuestra instalación de WordPress.

# BEGIN SECURE
# Block Sensitive Files from Browser 
Options All -Indexes
<files .htaccess>
Order allow,deny
Deny from all
</files>
<files wp-config.php>
Order allow,deny
Deny from all
</files>
<files error_log>
Order allow,deny
Deny from all
</files>
# Block the include-only files.
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]
# Disable the Server Signature 
ServerSignature Off
# For AntiSpam Deny Access to No Referrer Requests 
RewriteEngine On
RewriteCond %{REQUEST_METHOD} POST
RewriteCond %{REQUEST_URI} .wp-comments-post\.php*
RewriteCond %{HTTP_REFERER} !.*yourdomain.com.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^$
RewriteRule (.*) http://%{REMOTE_ADDR}/$ [R=301,L]
# END SECURE

wp-config.php

Usar claves secretas y únicas de autenticación:

  1. Puedes generar las claves de forma aleatoria a través de la API de WordPress.
  2. Una vez generadas ponlas en tu fichero wp-config.php.
  3. Puedes cambiar las claves en cualquier momento para invalidar todas las cookies existentes. Esto forzará a todos los usuarios a volver a hacer login.

Desactivar la opción de editar ficheros desde wp-admin:

define('DISALLOW_FILE_EDIT', true);

Forzando el login seguro con SSL:

define('FORCE_SSL_ADMIN', true);

functions.php

Eliminar la versión de WordPress:

function wpsecure_remove_version() { return ''; }
add_filter('the_generator', 'wpsecure_remove_version');

9. Usuarios registrados

Super admin y administradores

  • Cambiar el usuario por defecto de WordPress admin por otro username más complejo.
  • Un solo administrador es más que suficiente.
  • El admin en especial debe tener una contraseña compleja. Por ejemplo 20 caracteres que incorpore números, letras y signos.

Resto de usuarios

  • Revisar los roles de usuarios en WordPress.
  • No todos tienen que ser «editores», probablemente puedan ser «autores».
  • El product manager o coordinador si podría tener el rol de «editor».
  • ¿Realmente necesitas usuarios anónimos «suscriptores» de tu WordPress?. Si no es así fuera con ellos, quien quiera suscribirse lo hará por feed con programas a tal efecto como feedly.
  • Ojo con activar la opción para permitir el registro de usuarios anónimos que se encuentra en wp-admin > ajustes > general.

10. Comentarios y Spam

La mayoría de opciones a tratar en: wp-admin > ajustes > comentarios

  • Obligatorio activar la opción de rellenar nombre y email para comentar.
  • Obligatorio usar un plugin antispam como akismet.
  • Obligatorio incluir en la blacklist palabras típicas de spam.
  • Preferible marcar la opción para que un administrador apruebe el comentario antes de ser publicado.
  • También podemos usar un sistema de comentarios externo como DISQUS, más seguro y dinamizador.

Referencias para la seguridad en WordPress

disablevisualeditor

Si queremos que los editores del blog usen únicamente el editor de texto (html) y no el visual, podemos ir a wp-admin > usuarios > perfil y activar o desactivar la opción de enriquecer el editor.

Pero si lo que queremos es desactivar el editor visual solo para determinados casos y de forma dinámica, la cosa se complica un poquito más, no obstante WordPress tiene un core y funciones para hacer todo lo que se te ocurra 😛

Vamos con un ejemplo, supongamos que la idea es desactivar el editorial visual solamente para las entradas de tipo (páginas) y solamente las que fueron creadas por el usuario administrador (que es el que tiene ID = 1).

En functions.php:

add_action('init', 'remove_editor_init');
function remove_editor_init() {
    $post_id = $_GET['post'] ? $_GET['post'] : $_POST['post_ID'];
    $post = get_post($post_id); 
    $type = $post->post_type;
    if ($type == "page" && get_post_field(post_author, $post_id) == 1) {
        add_filter('user_can_richedit' , '__return_false', 50 );
    }
}

Cuando insertamos una galería de imágenes en WordPress se incrusta por defecto una serie de estilos CSS:

#{$selector} {
margin: auto;
}
#{$selector} .gallery-item {
float: {$float};
margin-top: 10px;
text-align: center;
    	width: {$itemwidth}%;
    }
    #{$selector} img {
    	border: 2px solid #cfcfcf;
    }
    #{$selector} .gallery-caption {
    	margin-left: 0;
    }

Este fragmento de código se encuentra en:
wp-includes/media.php (Line 833)

El problema es que se incrusta estilo en pleno documento, donde se ha insertado la galería. Lo cual no resulta muy limpio si atendemos a la abstracción de las 3 capas: diseño, función y contenido.

Si volvemos a media.php veremos entorno a la línea 831:

if ( apply_filters( 'use_default_gallery_style', true ) )

Por tanto una opción elegante podría ser:

add_filter('use_default_gallery_style', FALSE);

Colocando este filtro en el fichero functions.php del theme usado, indicamos a WordPress que no debe usar por el estilo CSS por defecto para las galerías, y relegamos el CSS necesario al fichero style.css donde tengamos centralizado todo el estilo del blog.

Usando filtros se puede cambiar altamente el comportamiento por defecto de WordPress.

Es seguro que en algún momento todos los que trabajamos con CSS echamos en falta las conocidas variables, elementos esenciales en cualquier lenguaje de programación. Para solventarlo se me ocurren varias formas:

  • Evitar las redundancias.
  • Usar mejor la descendencia en los selectores.
  • Definir las variables como meros comentarios.
  • Usar variables de PHP u otro lenguaje dinámico de servidor.
  • Decantarnos por CSS 3.

Es probable que existan más formas ¿conoces alguna?, bueno… de momento voy a intentar explicar las mencionadas.

Continue reading «Variables en CSS; Implementaciones»

En un momento dado podemos detectar varias mejora consecutivas en nuestro CSS. Las editamos y las subimos, luego refrescamos el navegador con la página y ya esta todo correcto.

Pero puede pasar que el usuario tenga su navegador configurado de una forma determinada, no realice ese refresco de página, y tenga el CSS almacenado en la memoria cache, por tanto seguirá viendo la página exactamente igual.

Continue reading «Actualizar CSS evitando cache del usuario»

Cartel de fundamentos web 2008Recientemente he asistido al congreso fundamentos web 2008, en Gijón (Asturias).

Se trata de un evento organizado por la Fundación CTIC, la oficina española del consorcio W3C, y subvencionado por el Gobierno del Principado de Asturias.

Este evento ha conseguido tras varias ediciones una enorme relevancia internacional, incorporando en sus actos a ponentes de primera fila.

A continuación voy a destacar lo que me ha parecido más interesante.

Continue reading «Fundamentos web 2008»