No solo un blog misceláneo más… es un blog de weas frikis

Archives Posts

Subir archivos a servidor y evitar reescritura en PHP. I

October 14th, 2008 by scyfox

Logo PHP

Hoy, luego de un condorazo en la pega, tuve que hacer una aplicación que permitiera subir archivos a una carpeta del servidor, y que verificara que al momento de subir no existieran archivos similares o que al momento de subirlos les pusiera otro nombre, que evitara sobreescribir archivos ya cargados.

Además de esto, necesitaba poder administrar los archivos cargados. En vez de meter los archivos a la base de datos, usé la misma para manejar y administrar la dirección en donde se guardan los archivos cargados, de forma tal que pueda evitar cargas innecesarias al motor de base de datos y también poder controlar que se sube, quien lo sube, que sección es la que sube más cosas, etc.

Requisitos:

  1. Servidor local para pruebas
  2. Base de datos MySQL
  3. PHP 5 (o superior)
  4. Acceso a FTP o carpeta para uploads.
  5. Phpmyadmin o similar.

Antes de todo hay que tener permisos de escritura sobre la carpeta a utilizar. Generalmente se se coloca “uploads”, pero pueden ponerle lo que deseen.

Para quienes tengan acceso a el FTP de su hosting o un servidor local, basta con darle permisos de lectura, escritura y ejecución a dicha carpeta o mejor dicho un chmod 777.

Para evitar que malos malosos accedan a la carpeta, bastará con crear un archivo llamado “index.html” y que no contenga nada o con algún mensajito como… “Clickea para otro lado.. pillin!” jaja.
El proceso comienza generando un formulario estandar en HTML pero con un par de campos especiales.

<form name=”uploads” method=”post” enctype=”multipart/form-data”>
<table width=”350px” border=”0″ cellpadding=”1″ cellspacing=”1″ class=”caja”>
<tr width=”300″>
<td>
<input type=”hidden” name=”MAX_FILE_SIZE” value =”2000000″ />
<input name=”archivo” type=”file” id=”archivo” />
</td>
<td>
<input type=”submit” name=”upload” value=”upload”>
</td>
</tr>
</table>
</form>

Ahora es el momento de la página que se encargará de procesar todo esto. Si, PHP.

<?php
//En esta parte va la conexion a la DB. Todavia no definimos la BD y sus tablas, pero es mejor tener esto listo y ordenadito.
include(”conexion.php”);
$carpeta_destino = “uploads/”;

if(isset($_POST["upload"]))
{
$nombre_archivo = $_FILES['archivo']['name'];
$tipo = $_FILES['archivo']['type];
$peso = $_FILES['archivo']['size'];
$temporal = $_FILES['archivo']['tmp_name'];
/* Nótese que se usan comillas simples. Primero va encerrado el nombre de la variable cuyo valor trae el archivo del formulario y despues el campo que requerimos de la funcion de archivos o _FILES*/
}
/*Ahora lo entretenido. Joder un rato con las funciones de PHP para poder separar la extension
del archivo de su nombre, para poder renombrarlo de forma segura, sin perder la extensión, a pesar de que sepamos de que tipo es. lo bueno de esto es que les permite controlar el tipo de archivo que suben por extension o tipo, sin importar que suban. Hace que el uploader sea estandar hasta el momento en que hacen las validaciones de tipo, para filtrar aquellas que desean o no permitir en el servidor*/

Puta tenia la media explicacion con lujo de detalles y la MIERDA DE SERVER - DREAMHOST.COM SE CAYÓ!!! y perdí el post.

Mañana seguimos con el tutorial… tengo que terminar unas cosas para la pega….

Share/Save/Bookmark

Categoria(s) Code, Weas Frikis having No Comments »

Tags: , , , , , ,

Archives Posts

Tutorial PHP Maker

September 29th, 2008 by scyfox

Saludos.

Mucho tiempo sin novedades. Empecé un nuevo trabajo en la capital de Chile, Santiago, lo que me ha obligado a buscar residencia temporal y ubicarme en tiempo/espacio. Soy de la V región, asi que ha sido bastante jodido acostumbrarme a los tiempos del puto transantiago.

Pero mejor es pensar positivo y hacer las cosas de forma correcta.
Uno de los cachos heredados del ex-desarrollador a cargo, es usar phpmaker para administrar ciertos sitios. Personalmente encuentro que la  herramienta es potente, pero que sirve sólo si te manejas bastante en ella, dejando de paso, un inmenso agujero en caso de ceder el puesto a otra persona. No existen manuales o tutoriales en linea, y el foro de la empresa que lo desarrolla es horrible de malo y desordenado.

Desde mañana empezaré a compartir mis experiencias con este “puto” programa para poder ayudar a quien tenga un problema similar al mio y desee compartir sugerencias y/o experiencias.

Por ahora, requerimientos:

Conocimientos básicos en php y mysql
Servidor local para pruebas. Recomiendo XAMPP
Nos vemos mañana!

Silla!

Share/Save/Bookmark

Categoria(s) Code having No Comments »

Tags: , , , ,

Archives Posts

Referer Spam: PodBean

August 28th, 2008 by scyfox

Hace días estoy siendo spameado por un servicio de podcasting gratuito llamado PodBean.com

Block Referer Spam: PodBean.com 1

Como pueden ver en esta captura de PopStats, todos los subdominios de este sitio no llegan a nada, y lo peor es que le estoy dando PR a un sitio que en mi vida había visitado o escuchado nombrar.

Block Referer Spam: PodBean.com 2

Así que vamos a ver como modificar el .htaccess para eliminar estos referers malignos y bloquearlos permanentemente.

Ésta es mi primera prueba con .htaccess asi que espero no cagarla xD.
Primero, tengo que entender que mierda dice el .htaccess que viene por omisión en Wordpress

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /wp/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /wp/index.php [L]
</IfModule>
# END WordPress

Como en todos los lenguajes, hay un par de lineas de comentario para especificar y dejar documentado que estamos haciendo. Luego, utiliza una función IfModule mod_rewrite.c para evitar que se caiga el blog en caso de que mod_rewrite no esté habilitado en el server. Después, RewriteEngine On inicializa el motor de reescritura. RewriteBase, le indica explicitamente al server que el directorio base del blog está en la carpeta /wp y evita accesos hacia atrás.

No instalé el blog en la raíz porque tenía otros proyectos en mente para el root, pero que están en el limbo actualmente jejeje.

Las siguientes condiciones son:

RewriteCond %{REQUEST_FILENAME} !-f = Ésta verifica que lo que buscamos no sea un archivo.
RewriteCond %{REQUEST_FILENAME} !-d = Ésta verifica que lo que buscamos no sea un directorio

La explicación de esto, no la tengo… jaja. Ni idea porque pero así está y funciona. xD

Y finalmente, RewriteRule . /wp/index.php [L] le indica al navegador, que la página principal es index.php y que termine de buscar ( o finalice el Loop)

Sabiendo esto, es hora de experimentar con nuevas condiciones y comandos para ver si el bloqueo funciona. Luego de revisar varios tutoriales online, que pondré al final de este artículo, llegué a esta conclusión.

RewriteCond %(HTTP_REFERER) (podbean) [NC,OR]
RewriteCond %(HTTP_REFERER) (xanax) [NC,OR]
RewriteCond %(HTTP_REFERER) (pills) [NC,OR]
RewriteCond %(HTTP_REFERER) (mindnmagick) [NC]
RewriteRule .* - [F]

La primera condición, verifica que el referer sea podbean, NC indicaque sea insensible a mayúsculas o minúsculas, OR permite que en caso de no venir de ese referer siga preguntando por el siguiente hasta que se terminen las condiciones.

Finalmente RewriteRule indica que cualquier carácter (.), ya sea cero o más veces (*), reciba la cabecera de Forbidden (403).

Ahora, me asalta la duda si debo hacer un bloque nuevo o añadirlo a lo que viene por wordpress. Voy a hacer un bloque separado. De todas formas, mañana veremos si funciona esto, y al dia siguiente veremos si se puede poner en un solo bloque.

Espero que no me bloquee visitas reales, pero creo que estoy siendo lo suficientemente cuidadoso con las reglas y condiciones como para que se caiga el sitio.

Hasta mañana con los resultados.

SIlla!

PD: A medida que reciba más referer spam, voy a hacer un txt para que lo descarguen y lo agreguen a su propio .htaccess.

Fuentes:
Apache Docs
Foros del Web
Ask Apache
Helicon Tech
Added Bytes - Block Referal Spam
Added Bytes - Mod_Rewrite for Beginners

Share/Save/Bookmark

Categoria(s) Wordpress having No Comments »

Tags: , , , , , , , ,