CategoríaTips

Validar correctamente la subida de un archivo con php

Cuando nos enfrentamos a esta situación se nos viene a la cabeza distintas formas de querer validar un fichero, según sea la necesidad; por tamaño, extension, etc.
Lo que voy a explicar es como realizar la una validación correcta y eficiente del tipo de archivo que se está subiendo y aprovecho de explicar tambien la importancia de realizar bien esta validación.

Antes que todo, hay que tener en claro como funciona esto de la subida de archivos y tener en mente que la validación se puede y debe hacerse a nivel de cliente y a nivel de servidor. Muchas veces me he enfrentado a situaciones donde el desarrollador solo hace la validación a nivel de cliente, en javascript. Por ejemplo, así:

  1. <script>
  2. function validar(archivo){
  3.    var b = archivo.split(‘.’);
  4.    if(b[b.length-1] == ‘txt’)
  5.       return true;
  6.    else{
  7.       alert(‘Error: El archivo debe ser .txt’);
  8.       return false;
  9.    }
  10. }</script>

Si llamamos a esa función pasando como parámetro archivo.txt no mostrara ningún error, de lo contrario, si pasamos otro argumento como pelicula.avi devolverá error y no nos dejará continuar.
Este tipo de validación es el menos eficiente, ya que realizar una petición por POST sin pasar por el formulario es algo muy simple, basta con tener las herramientas necesarias como por ejemplo curl.
Hay que dejar en claro que el hecho de validar un formulario unicamente en javascript es una gran irresponsabilidad, ya sea la validación de unos simples datos como los típicos nombres, apellidos, email hasta la subida de archivos. El realizar una validación por javascript nos entrega una capa más de seguridad, pero no la única.

Seguir leyendo

Balancear la carga manualmente (definir mas de un gateway)

La idea de balancear la carga manualmente es poder definir más de un gateway para distintos destinos, especificados por nosotros mismos. De esta manera, podremos tener dos o más salidas a internet y definir salidas hacia distintos rangos de direcciones ip.

multi gateway

Esto sirve de gran utilidad cuando nos conectamos a una red wifi que –por casualidad– llega hasta nuestro lugar de trabajo o nuestras casas e inocentemente queremos usarla. Por ejemplo, si tenemos un lugar de descargas, podemos dejar una máquina con una ruta estática que haga que cuando conecte a una IP x.x.x.x su salida a internet sea por el gateway predefinido por nosotros.
Para esto vamos a usar el comando route.

Seguir leyendo

Tunear MySQL o cómo aumentar el rendimiento de tu servidor

Buscando como mejorar el rendimiento de un servidor mysql encontre un script en perl que realiza una serie de pruebas en nuestras bases de datos y finalmente nos muestra un resultado de esos test de memoria, consulta, “velocidad”, rendimiento, etc. Y nos da algunos tips para poder mejorar la configuracion del mysql y llegar a un rendimiento mas optimo.

Caracteristicas del mysqltuner:

* Memory Usage: Calculates MySQL memory usage at max load and makes recommendations for increasing or decreasing the MySQL memory footprint. Per-thread and server-wide buffer data is calculated
separately for an accurate snapshot of the server?s configuration.
* Slow Queries: Reviews the amount of slow queries relative to the total queries. Slow query time limits are also analyzed and recommendations are made.
* Connections: Current and historical connection counts are reviewed.
* Key Buffer: Takes configuration data and compares it to the actual indexes found in MyISAM tables. Key cache hit rates are calculated and variable adjustments are suggested.
* Query Cache: Query cache hit rates and usage percentages are used to make recommendations for the query cache configuration variables.
* Sorting & Joins: Per-thread buffers that affect sorts and joins are reviewed along with the statistics from the queries run against the server.
* Temporary Tables: Variable recommendations are made to reduce temporary tables that are written to the disk.
* Table Cache: Compares total tables opened to the currently open tables. Calculates the table cache hit rate in order to make suggestions.
* Open Files: Determines if the server will approach or run into the open file limit set by the operating system or the MySQL server itself.
* Table Locks: Finds table locking that forces queries to wait and makes suggestions for reducing locks that require a wait.
* Thread Cache: Calculates how many times MySQL must create a new thread to respond to a query.
* Aborted Connections: Finds applications that are not closing connections to MySQL properly.
* Read/Write Ratios: Calculates the percentage of read and write operations on your MySQL installation.

Seguir leyendo

Filtros simples en ettercap

Les motraré cómo crear filtros simples para usar con ettercap, para que podamos modificar parte del tráfico como tags html, conversaciones de chat, etc.
Para esto necesitamos obviamente instalar el suit ettercap-ng, lo podemos descargar desde Sitio oficial ettercap

Haremos las pruebas con el sitio https://www.google.cl, modificaremos el título, el contenido, la imágen, etc.

Seguir leyendo

Configurar tecla Function (Fn) de los laptop en fluxbox

Tengo un notebook Compaq Presario C708LA con las tipicas teclas con segundas funciones que se activan mediante la tecla [Fn] y se me ocurrio un dia configurarlas, en fluxbox.
En este caso ayudare a configurar las teclas para subir y bajar el volumen, play, stop, ff, rewind y bloquear la pantalla.

Lo haremos definiendo hotkeys. Primero debemos reconocer el numero (KeyCode) de la tecla que queremos definir o configurar, esto lo hacemos ejecutando xev, nos abrira una ventana rara donde solamente debemos presionar la tecla, podemos darnos cuenta que si presionamos la tecla que tiene el icono para subir o bajar el volumen sin presionar Fn nos marcara un codigo y si la presionamos con Fn marcara otro codigo, entendemos entonces que son distintas teclas o distintos KeyCodes. xev nos mostrara una salida asi:

KeyPress event, serial 34, synthetic NO, window 0x2200001,
root 0x69, subw 0x0, time 22118506, (485,592), root:(666,646),
state 0x0, keycode 9 (keysym 0xff1b, Escape), same_screen YES,
XLookupString gives 1 bytes: (1b) ”
XmbLookupString gives 1 bytes: (1b) ”
XFilterEvent returns: False

A nosotros solamente nos interesa lo que esta en negritas. Lo primero es el numero de tecla y lo segundo marcado es el nombre (o alias) de la tecla, si no nos aparece lo segundo nos guiamos por lo primero resaltado.
Por ejemplo, a continuacion les mostrare lo que muestra xev cuando presiono la tecla para bajar el volumen con y sin Fn:

Con Fn

KeyRelease event, serial 34, synthetic NO, window 0x2200001,
root 0x69, subw 0x0, time 22273462, (550,501), root:(749,573),
state 0x0, keycode 174 (keysym 0x0, NoSymbol), same_screen YES,
XLookupString gives 0 bytes:
XFilterEvent returns: False

Sin Fn

KeyPress event, serial 34, synthetic NO, window 0x2200001,
root 0x69, subw 0x0, time 22269330, (550,501), root:(749,573),
state 0x0, keycode 105 (keysym 0xff56, Next), same_screen YES,
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False

El KeyCode cambia de 174 a 105.

Seguir leyendo