Created
September 7, 2012 17:30
-
-
Save danirod/3667962 to your computer and use it in GitHub Desktop.
Código fuente del sistema de bloqueo de componentes de terceros usado en mi web
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/* | |
* Sistema de bloqueo de componentes de terceros | |
* Copyright (C) 2012 Dani Rodríguez <[email protected]> | |
* | |
* Este código fuente proporciona de manera pública TAL CUAL, sin garantías de | |
* ningún tipo. Este código fuente queda en dominio público. Se permite el | |
* acceso, uso y reutilización de este código fuente en otros sistemas sin | |
* necesidad de permiso previo ni de notificación de uso. | |
*/ | |
/** | |
* Constante con el valor que tendrán los atributos HTTP que serán usados | |
* cuando se quieran desactivar las funciones que requieren cookies en el | |
* sitio web. | |
*/ | |
define('DEACTIVATE', 'deactivate'); | |
/** URL del Gist en el que se puede ver este código fuente. */ | |
define('GIST_URL', 'https://gist.github.com/3667962'); | |
/** | |
* Sanea una entrada de usuario. Es conveniente sanear las variables que | |
* procedan del exterior (por ejemplo, las que introduce el usuario por medio | |
* de un atributo GET o POST al cargar la página por el protocolo HTTP). No | |
* sanear una entrada puede ser peligroso si un usuario malintencionado | |
* consigue detectar y explotar vulnerabilidades que dependen de la entrada de | |
* usuario (ataques XSS). | |
* | |
* @param $val valor que | |
*/ | |
function sanitize_input($val) | |
{ | |
$val = htmlentities($val); | |
return $val; | |
} | |
/** | |
* Muestra el encabezado de la página web. Tanto el formulario de bloqueo como | |
* el resultado de ejecutar ese bloqueo se muestran en una página web. Esta | |
* función genera el código HTML que debe aparecer en el encabezado de la página | |
* y lo devuelve. Puede ser mostrado incluyéndolo en un echo o en un print. | |
* | |
* @return string contenido del encabezado de la web maquetado como HTML. | |
*/ | |
function display_head() | |
{ | |
$html = '<!DOCTYPE html><html><head>' . | |
'<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>'. | |
'<title>Sistema de bloqueo de componentes de terceros</title>' . | |
'</head><body><h1>Sistema de bloqueo de componentes de terceros</h1>'; | |
return $html; | |
} | |
function display_footer() | |
{ | |
$html = '<hr/><p><strong>Copyright © 2012 Dani Rodríguez - ' . | |
'Este script es de código abierto. Puedes ver su contenido en ' . | |
'<a href="' . GIST_URL . '">este enlace</a></p></body></html>'; | |
return $html; | |
} | |
/** | |
* Esta variable indica si el usuario desea que se realice una acción. Cuando | |
* esta variable sea verdadera, es que el usuario quiere que el script se | |
* ejecute (por ejemplo, que modifique su configuración de cookies). Si esta | |
* variable es falsa, es que sólo quiere que se le muestre la página web. | |
*/ | |
$accion = (isset($_POST['changeSettings']) && | |
sanitize_input($_POST['changeSettings']) == 'change'); | |
if($accion) | |
{ | |
/* | |
* Parseamos las decisiones del usuario. Las variables $desactivar_analytics | |
* y $desactivar_plugins contendrán estas decisiones. Para cualquiera de | |
* estas dos, si el valor es verdadero, es que el usuario desea bloquearlos. | |
* En caso de ser falsos, es que no quiere bloquearlos. | |
*/ | |
$desactivar_analytics = (isset($_POST['analytics']) | |
&& sanitize_input($_POST['analytics']) == DEACTIVATE); | |
$desactivar_plugins = (isset($_POST['plugins']) | |
&& sanitize_input($_POST['plugins']) == DEACTIVATE); | |
/* | |
* Si el usuario desea desactivar Google Analytics debemos eliminar las | |
* cookies que genera este servicio, __utma, __utmb, __utmc y __utmz, | |
* y generar una cookie que impida que vuelvan a generarse. | |
*/ | |
if($desactivar_analytics) | |
{ | |
// Eliminamos estas cookies. | |
setcookie('__utma', null, time() - 3600, '/'); | |
setcookie('__utmb', null, time() - 3600, '/'); | |
setcookie('__umtc', null, time() - 3600, '/'); | |
setcookie('__utmz', null, time() - 3600, '/'); | |
// Creamos la cookie de bloqueo. | |
setcookie('desactivar_analytics', DEACTIVATE, time() + 86400*365, '/'); | |
} | |
/* | |
* Si el usuario desea desactivar los plug-in sociales debemos generar una | |
* cookie que impide mostrar los complementos sociales. No podemos borrar | |
* las cookies que ha generado estos servicios porque son de terceras | |
* personas. | |
*/ | |
if($desactivar_plugins) | |
{ | |
// Creamos la cookie de bloqueo. | |
setcookie('desactivar_analytics', DEACTIVATE, time() + 86400*365, '/'); | |
} | |
echo display_head() . | |
'<p>Gracias, su configuración ha sido modificada.</p>' . | |
'<p><a href="/">Regresar a la página principal</a>.</p>' . | |
display_footer(); | |
} | |
else | |
{ | |
echo display_head(); | |
echo '<form action="?" method="POST">'; | |
echo '<input type="hidden" name="changeSettings" value="change" />'; | |
echo '<p><input type="checkbox" name="analytics" value="'.DEACTIVATE.'" />'. | |
' <strong>Desactivar Google Analytics</strong>. Esta acción borrará ' . | |
'todas las cookies que Google Analytics creó y creará una cookie ' . | |
'denominada bloquear_analytics que impedirá que se vuelva a cargar el' . | |
'componente.</p>'; | |
echo '<p><input type="checkbox" name="plugins" value="'.DEACTIVATE.'" />'. | |
' <strong>Desactivar los plug-in sociales de terceros</strong>. Esta ' . | |
'acción creará una cookie denominada bloquear_plugins que impedirá ' . | |
'que se vuelvan a mostrar estos componentes. Al ser componentes de ' . | |
'terceros no se borrarán sus cookies, que tendrán que ser eliminadas '. | |
'manualmente por el usuario.</p>'; | |
echo '<p><input type="submit" name="save" value="Guardar cambios" /></p>'; | |
echo '</form>'; | |
echo display_footer(); | |
} | |
?> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment