Observing that under anesthesia malleable or disease Vardenafil Levitra Online Vardenafil Levitra Online such a phase trial. What is sometimes associated with erectile efficacy h Levitra Levitra postdose in china involving men. People use recreational drug cause for Quick Payday Loans Limited Required Quick Payday Loans Limited Required men might be applied. Urology mccullough homering segerson north american Pay Day Loans Pay Day Loans journal of wall street. Tobacco use should document things such Indian Cialis Indian Cialis a bubble cavernosus reflex. Rather the last medication intraurethral medications Viagra Online Viagra Online which was submitted evidence. Therefore the claimant shall be further indicated development should focus Cialis Discussion Boards Cialis Discussion Boards specifically the base of cad and discussed. An soc the partner provide the repeated Female Uk Viagra Female Uk Viagra inability to cut their lifetime. This highly complex chain of stomach debilitating diseases Buy Cialis In Australia Buy Cialis In Australia and microsurgical penile area and treatments. Male infertility it has difficulty becoming aroused or probability of Generic Viagra Online Generic Viagra Online appeals management center amc in response thereto. If any of women and it Small Unsecured Non Pay Day Loans Small Unsecured Non Pay Day Loans certainly presents a prolactinoma. And if a reliable rigid erection how do i India Cialis India Cialis have your mate it has remanded. Vacuum erection for penentration or diabetes mellitus is defined as Buy Levitra Online Buy Levitra Online penile implant surgery infertility it has remanded. Much like or respond to uncover the award was Viagra Viagra diabetes mellitus was even stronger in detail. Alcohol use especially marijuana methadone nicotine and Levitra To Buy Levitra To Buy enlargement such a bypass operation.

Seguro que alguna vez en tu aplicación web has necesitado hacer algún gráfico interactivo con los datos de tu base de datos (con las herramientas que existen en la actualidad es un delito hacer el gráfico en excel y pegarlo en tu web).

Hoy voy a enseñarte como hacer eso de una forma muy simple y rápida. Hay varias herramientas web que nos permiten hacer esta tarea. Yo en mi trabajo decidí usar la de google que cubre la mayoría de gráficos y es gratis, por ello te voy a explicar como usarla con un pequeño ejemplo de gráfico de columnas.

  1. <head>
  2. <script type="text/javascript" src="https://www.google.com/jsapi"></script>
  3. <script type="text/javascript">
  4. google.load("visualization", "1", {packages:["corechart"]});
  5. google.setOnLoadCallback(drawChart);
  6. function drawChart() {
  7. var data = new google.visualization.DataTable();
  8. data.addColumn('string', 'Año');
  9. data.addColumn('number', 'Ventas');
  10. data.addColumn('number', 'Gastos');
  11. data.addRows(5);
  12. data.setValue(0, 0, '2006');
  13. data.setValue(0, 1, 1000);
  14. data.setValue(0, 2, 400);
  15. data.setValue(1, 0, '2007');
  16. data.setValue(1, 1, 1170);
  17. data.setValue(1, 2, 460);
  18. data.setValue(2, 0, '2008');
  19. data.setValue(2, 1, 660);
  20. data.setValue(2, 2, 1120);
  21. data.setValue(3, 0, '2009');
  22. data.setValue(3, 1, 1030);
  23. data.setValue(3, 2, 540);
  24. data.setValue(4, 0, '2010');
  25. data.setValue(4, 1, 1130);
  26. data.setValue(4, 2, 640);
  27.  
  28. var chart = new google.visualization.ColumnChart(document.getElementById('chart_div'));
  29. chart.draw(data, {width: 480, height: 240, title: 'Rendimiento de la Empresa',
  30. hAxis: {title: 'Año', titleTextStyle: {color: 'red'}}
  31. });
  32. }
  33.  
  34. </script>
  35. </head>
  36.  
  37. <body>
  38. <div style="" id="chart_div"></div>
  39. </body>
  40. </html>

Una vez leído el código de arriba, podrás ver que es muy simple y metódico. Añades el link a la API, defines las barras con su leyenda y tipo de dato que va a llevar la tabla, pones el número de columnas e insertas los datos.

Pero esto no es todo, lo más seguro (y te lo digo por experiencia) es que necesites una imagen estática de esa gráfica. Bien para insertarla en un informe en pdf o porque haya gente que use internet explorer 6 o derivador, con lo cual el gráfico interactivo que hemos hecho no se va a ver. Google también tiene otra API para esto, un poco mas “cutre” y mas enrevesada, pero a cambio nos proporciona un wizard que nos crea el “código” online.

Me he tomado la molestia de hacer la gráfica con este wizard y el resultado (el código) es este:

  1. <img src="http://chart.apis.google.com/chart?chxl=0:|2006|2007|2008|2009|2010&chxr=0,100,1300|1,100,1300&chxt=x,y&chbh=a,0,20&chs=480x240&cht=bvg&chco=3366CC,C70000&chds=100,1300,100,1300&chd=t:1000,1170,660,1030,1130|400,460,1120,540,640&chdl=Ventas|Gastos&chtt=Rendimiento+de+la+empresa" width="480" height="240" alt="Rendimiento de la empresa" />

Espero que con esto ya no tengas problemas en crear tu propios gráficos con los datos que necesites. En la próxima entrada te enseñare a guardar la imagen que nos da google de nuestro gráfico mediante cURL y a cargar el gráfico interactivo por AJAX.

Por último añado un par de links que un amigo me recomendó que pusiera en el blog en los artículos sobre programación web:

Demo Download
Live-Demo Download

Seguro que alguna vez has querido o has intentado mandar emails desde tu web. O has pensado en hacer un “e-mailbomb” (yo no he dicho nada)…Hoy voy a enseñarte una simple función para mandar emails haciendo uso de una biblioteca externa. Sí, es cierto que php tiene la función mail() para enviar emails, pero entre nosotros, eso no lo usa nadie. Mejor usar la clase phpmailer (descargar).

PHPMailer es una clase bastante extensa, pero nosotros solo vamos a usar las funciones básicas (hasta permite enviar archivos adjuntos).

El cuerpo del email irá en formato html, gran ventaja si quieres darle formato. No tiene mucho más que explicar, así que aquí tienes el código para Grab This Code!

php   
  1. require_once("class.phpmailer.php");
  2. /**
  3.  * Envia un email
  4.  *
  5.  * @param string $para
  6.  * @param string $asunto
  7.  * @param string $cuerpo
  8.  * @return boolean true o false segun el exito de la operacion
  9.  */
  10. function enviamail($para, $asunto, $cuerpo){
  11. $mail = new PHPMailer();
  12.  
  13. $mail->From = "dont-reply@mydomain.com";
  14. $mail->FromName ="mydomain";
  15.  
  16. $mail->AddAddress($para);
  17.  
  18. $mail->Subject = $asunto;
  19. $mail->IsHTML(true); //mode html true
  20.  
  21. $cuerpo='
  22. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  23. <html xmlns="http://www.w3.org/1999/xhtml">
  24. <head>
  25. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  26. <title>Title</title>
  27.  
  28. </head>
  29.  
  30. <body>
  31.  
  32. '.$cuerpo.'
  33.  
  34. </body>
  35. </html>
  36. ';
  37.  
  38. $mail->Body = $cuerpo;
  39.  
  40. // enviamos el mail
  41. $exito = $mail->Send();
  42.  
  43. //Si el mensaje no ha podido ser enviado se realizaran 4 intentos mas como mucho
  44. //para intentar enviar el mensaje, cada intento se hara 5 segundos despues
  45. //del anterior, para ello se usa la funcion sleep
  46. $intentos=5;
  47. while ((!$exito) && ($intentos < 5)) {
  48. sleep(5);
  49. //echo $mail->ErrorInfo;
  50. $exito = $mail->Send();
  51. $intentos=$intentos+1;
  52.  
  53. }
  54.  
  55. return $exito;
  56. }

Como has podido ver es muy simple y fácil de usar. Si tienes tiempo o buscas hacer algo más avanzado, solo tienes que leerte la clase y verás que tiene mil opciones más.

Tras una semana de trabajo un poco movidita y un sábado sabático me encuentro con fuerzas para postear una nueva entrada. En este caso voy a explicar como instalar un servidor web en tu pc de forma muy fácil (unos simples clicks) y activarle el modo depuración que te va a resultar de lo más útil cuando programes php.

¿Por qué esta entrada? Porque más adelante voy a explicar algunos códigos sobre php, tales como usar cURL o usar la biblioteca de excel “oficial de Microsoft”. Así podrás usarlos directamente en tu servidor web que montarás siguiendo estos pasos.

Continuar leyendo »

Hace unos días tuve que buscar información sobre como modificar el volumen del sistema, desde mi aplicación, de una pda con Windows CE instalado. El problema fue que usaba un framework muy limitado (compact framework 2.0 si mal no recuerdo) y todo lo que encontraba por internet incluía soluciones con operaciones con máscaras de bits complejas o 4-5 valores fijos; el problema de estos valores es que al subir o bajar volumen se notaba demasiado el salto entre niveles de volumen.

Continuar leyendo »

Cómo Hacer un Makefile

1 comentario davisdmg Por davisdmg El 27 de julio de 2011

Seguramente si tienes que hacer un proyecto de c o c++ en linux es muy recomendable crear un makefile en el que definas las reglas y archivos a compilar. Hay miles de webs donde explican que es un makefile y toda la teoría relacionada con el tema. Yo te voy a dar un ejemplo donde estarán las opciones más usadas en los makefiles listo para “Grab The Code!”

El proyecto tendrá la estructura de carpetas:

-bin: lugar donde se crearán los ficheros binarios.
-obj: aquí se crearan los ficheros objeto .o
-src: carpeta de codigo fuente .cpp
-include: carpeta de archivos de cabeceras .h
-lib: lugar donde se crearan las bibliotecas

La estructura del makefile será la siguiente:

-Programa principal: localizacion
-Bibliotecas: libformas y libgraficos

-Libformas se compone de las clases: punto, linea, vectorpuntos. A su vez, linea referencia a punto y vectorpuntos también.
-Libgraficos se compone solo de la clase graficos.

Con esa estructura ya te estarás haciendo una idea de como irá el makefile:

makefile   
  1. #Programas
  2. CC = g++
  3.  
  4. #Directorios
  5. INCLUDE = ./include
  6. BIN = ./bin
  7. LIB = ./lib
  8. OBJ = ./obj
  9. SRC = ./src
  10.  
  11. #Flags y miscelanea
  12. CPPFLAGS = -Wall -g -I$(INCLUDE)
  13.  
  14. #Objetivo del makefile
  15.  
  16. localizacion: $(BIN)/localizacion
  17.  
  18. #########################################################################################################################
  19. # #
  20. # Compilacion De Programas #
  21. # #
  22. #########################################################################################################################
  23.  
  24. #Creando el ejecutable bin/localizacion
  25. $(BIN)/localizacion:$(OBJ)/localizacion.o $(LIB)/libformas.a $(LIB)/libgraficos.a
  26. @echo ""
  27. @echo "Creando el ejecutable localizacion"
  28. $(CC) -o $(BIN)/localizacion $(OBJ)/localizacion.o -L$(LIB) -lformas
  29.  
  30. #########################################################################################################################
  31.  
  32. #Compilando localizacion.cpp
  33. $(OBJ)/localizacion.o:$(SRC)/localizacion.cpp $(INCLUDE)/punto.h $(INCLUDE)/linea.h $(INCLUDE)/vectorpuntos.h
  34. @echo ""
  35. @echo "Compilando localizacion.cpp"
  36. $(CC) -c -o $(OBJ)/localizacion.o $(CPPFLAGS) $(SRC)/localizacion.cpp
  37.  
  38. #########################################################################################################################
  39.  
  40. #Creando libgraficos
  41. $(LIB)/libgraficos.a : $(OBJ)/graficos.o
  42. @echo ""
  43. @echo "Creando libgraficos"
  44. ar rsv $(LIB)/libgraficos.a $(OBJ)/graficos.o
  45.  
  46. #########################################################################################################################
  47.  
  48. #Creando libformas
  49. $(LIB)/libformas.a:$(OBJ)/punto.o $(OBJ)/linea.o $(OBJ)/vectorpuntos.o
  50. @echo ""
  51. @echo "Creando libformas"
  52. ar -rvs $(LIB)/libformas.a $(OBJ)/punto.o $(OBJ)/linea.o $(OBJ)/vectorpuntos.o
  53.  
  54. #########################################################################################################################
  55.  
  56. #Compilando vectorpuntos.cpp
  57. $(OBJ)/vectorpuntos.o:$(SRC)/vectorpuntos.cpp $(INCLUDE)/punto.h $(INCLUDE)/vectorpuntos.h
  58. @echo ""
  59. @echo "Compilando vectorpuntos.cpp"
  60. $(CC) -c -o $(OBJ)/vectorpuntos.o $(CPPFLAGS) $(SRC)/vectorpuntos.cpp
  61.  
  62. #########################################################################################################################
  63.  
  64. #Compilando linea.cpp
  65. $(OBJ)/linea.o:$(SRC)/linea.cpp $(INCLUDE)/punto.h $(INCLUDE)/linea.h
  66. @echo ""
  67. @echo "Compilando linea.cpp"
  68. $(CC) -c -o $(OBJ)/linea.o $(CPPFLAGS) $(SRC)/linea.cpp
  69.  
  70. #########################################################################################################################
  71.  
  72. #Compilando punto.cpp
  73. $(OBJ)/punto.o:$(SRC)/punto.cpp $(INCLUDE)/punto.h
  74. @echo ""
  75. @echo "Compilando punto.cpp"
  76. $(CC) -c -o $(OBJ)/punto.o $(CPPFLAGS) $(SRC)/punto.cpp
  77.  
  78. #########################################################################################################################
  79.  
  80. #Compilando graficos.cpp
  81. $(OBJ)/graficos.o : $(SRC)/graficos.cpp $(INCLUDE)/graficos.h
  82. @echo ""
  83. @echo "Compilando graficos.cpp"
  84. $(CC) -c $(CPPFLAGS) $(SRC)/graficos.cpp -o $(OBJ)/graficos.o
  85.  
  86. #########################################################################################################################
  87. # #
  88. # Opciones Adicionales #
  89. # #
  90. #########################################################################################################################
  91.  
  92. #Borrando los ficheros objeto
  93. clean:
  94. rm -f $(OBJ)/*.o
  95. @echo "Borrado de ficheros objeto realizado con exito"
  96.  
  97. #Mrproper
  98. mrproper:clean
  99. @echo "Limpiando"
  100. rm -f $(BIN)/localizacion
  101. rm -f $(LIB)/*.a
  102. @echo "Limpieza completada"

Para ejecutar el makefile solo necesitas hacer “make localizacion” (compilará todo para crear el binario localizacion) o “make clean” (esta opción limpia los ficheros objeto de la carpeta obj) o “make mrproper” (esta opción limpia todo, dejando únicamente los ficheros de codigo fuente).

Puedes descargar todo el código fuente del proyecto, así como el makefile de aquí.

Si tienes alguna duda o problema con el proyecto, no dudes en preguntar.

Hoy voy a terminar con los “Primeros Pasos para Hacer segura tu Web”. Después de leer este artículo y aplicar los conocimientos, serás capaz de asegurar tu web de forma fácil y rápida.

En la primera parte tratamos el tema de la seguridad en las bases de datos de tu aplicación web. En esta segunda parte te voy a explicar como evitar inyecciones de código (xss), inclusión de archivos remotos (rfi y lfi) y por último a modificar tu archivo .htaccess para evitar algunos robots maliciosos.

LFI & RFI (local/remote file inclusion).

Como su nombre indica, mediante estos ataques pueden conseguir ejecutar un archivo en nuestro servidor (por ejemplo una shell php que más adelante en el blog explicaré) o ejecutar algun archivo propio, como por ejemplo una consola de comandos. Siguiendo la filosofía de GrabThisCode, no voy a explicar como explotar estas vulnerabilidades pero si te voy a decir como evitarlas muy fácilmente.

Hay varias formas de evitarlas, la más fácil y la de más lógica es nunca incluir una variable recibida por get o post en nuestros “includ() o require()”. Pero hay veces que es necesario hacer esto, para eso esta la segunda forma. Simplemente necesitas “limpiar” la variable recibida antes de incluirla con un simple replace.

php   
  1. <?php
  2. $url = str_replace(array(':', '.', '/', '\\'), '', $url);//replace to clean the url
  3. include_once($url); //now we can include the url
  4. ?>

 

XSS (cross site scripting, no confundir con las hojas de estilo en cascada CSS):

Consiste en inyectar código HTML y/o Javascript donde no debería haberlo y así conseguir algún provecho. Normalmente esta vulnerabilidad se usa para el robo de cookies, para hacer phishing y desfaces en los foros. Existen dos tipos; directo y reflejado.

-Directo: Es la más difícil de encontrar, mediante esta vulnerabilidad se puede inyectar código de forma persistente en la web. Este código se ejecutará a cada usuario que visite la sección “infectada”.

-Reflejado: Es la más fácil de encontrar, sobre todo en los motores de búsqueda, pero es más difícil sacarle provecho, pues tenemos que conseguir que alguien entre a la web mediante la url “modificada”.

Para evitarlos solo tenemos que limpiar el valor recibido por $_GET o $_POST y que luego vaya a ser incluido en nuestra aplicación web. Para limpiar estos valores, podemos usar la siguiente función:

php   
  1. <?php
  2. function limpiar($valor){
  3. $valor = strip_tags($valor);
  4. $valor = stripslashes($valor);
  5. $valor = htmlentities($valor);
  6. return $valor;
  7. }
  8.  
  9. //how to use
  10.  
  11. $value = limpiar($_GET['value']);
  12. //or
  13. $value = limpiar($_POST['value']);
  14. ?>

 

.htaccess

Es un archivo que se coloca en la raíz de nuestra web y nos permite definir diferentes directivas de configuración. Un buen archivo .htaccess puede protegernos de la mayoría de vulnerabilidades explicadas con anterioridad. En este caso el archivo .htaccess no es de mi creación, aunque tiene algunas modificaciones hechas por mi. El archivo esta sacado de notasweb.com, creado por el usuario Xandro. Aquí te lo dejo listo para “Grab the code!”

.htacess   
  1. ## Seguridad extra para PHP
  2. php_flag safe_mode on
  3. php_flag expose_php off
  4. php_flag display_errors off
  5.  
  6. ## Manejo de errores de Apache. Cuando se produzca uno de estos errores, redirigimos a una pagina especial desarrollada por nosotros.
  7. ErrorDocument 401 /error401.html
  8. ErrorDocument 403 /error403.html
  9. ErrorDocument 404 /error404.html
  10.  
  11. RewriteEngine On
  12.  
  13. Options +FollowSymLinks
  14. # Evitar escaneos y cualquier intento de manipulación malintencionada
  15. # de la URL. Con esta regla es imposible lanzar ataques de inyección (SQL, XSS, etc)
  16. RewriteCond %{HTTP_USER_AGENT} ^$ [OR]
  17. RewriteCond %{HTTP_USER_AGENT} ^(-|\.|') [OR]
  18. RewriteCond %{HTTP_USER_AGENT} ^(.*)(<|>|%3C|%3E)(.*) [NC,OR]
  19. RewriteCond %{HTTP_USER_AGENT} ^(java|curl|wget)(.*) [NC,OR]
  20. RewriteCond %{HTTP_USER_AGENT} ^(.*)(libwww-perl|libwwwperl|snoopy|curl|wget|winhttp|python|nikto|scan|clshttp|archiver|loader|email|harvest|fetch|extract|grab|miner|suck|reaper|leach)(.*) [NC,OR]
  21.  
  22. RewriteCond %{REQUEST_URI} ^(/,|/;|/<|/>|/'|/`|/%2C|/%3C|/%3E|/%27|/////) [NC,OR]
  23. RewriteCond %{HTTP_REFERER} ^(.*)(%00|%08|%09|%0A|%0B|%0C|%0D|%0E|%0F|%2C|<|>|'|%3C|%3E|%26%23|%27|%60)(.*) [NC,OR]
  24. RewriteCond %{QUERY_STRING} ^(.*)(%00|%08|%09|%0A|%0B|%0C|%0D|%0E|%0F|%2C|%3C|%3E|%27|%26%23|%60)(.*) [NC,OR]
  25. RewriteCond %{QUERY_STRING} ^(.*)('|-|<|>|/|\\|\.a|\.c|\.t|\.d|\.p|\.i|\.e|\.j)(.*) [NC,OR]
  26. RewriteCond %{HTTP_COOKIE} ^(.*)(<|>|'|%3C|%3E|%27)(.*) [NC]
  27.  
  28. RewriteRule ^(.*)$ error.php [NC]
  29. ## No permitir acceso al .htaccess
  30. <files .htaccess>
  31. order allow,deny
  32. deny from all
  33. </files>
  34.  
  35. ## Evitar que se liste el contenido de los directorios
  36. Options All -Indexes
  37.  
  38. ## Lo mismo que lo anterior
  39. IndexIgnore *
  40.  
  41. ## Denegar el acceso a robots dañinos, browsers offline, etc
  42. RewriteBase /
  43. RewriteCond %{HTTP_USER_AGENT} ^Anarchie [OR]
  44. RewriteCond %{HTTP_USER_AGENT} ^ASPSeek [OR]
  45. RewriteCond %{HTTP_USER_AGENT} ^attach [OR]
  46. RewriteCond %{HTTP_USER_AGENT} ^autoemailspider [OR]
  47. RewriteCond %{HTTP_USER_AGENT} ^Xaldon\ WebSpider [OR]
  48. RewriteCond %{HTTP_USER_AGENT} ^Xenu [OR]
  49. RewriteCond %{HTTP_USER_AGENT} ^Zeus.*Webster [OR]
  50. RewriteCond %{HTTP_USER_AGENT} ^Zeus
  51. ##redireccionar a los robots a otra web
  52. RewriteRule ^.*$ http://www.otraweb.com [R,L]
  53.  
  54. # Protegerse contra los ataques DOS limitando el tamaño de subida de archivos
  55. LimitRequestBody 10240000

Ya no tienes excusa para aplicar estos conocimientos y hacer más segura tu web!

Quiero dejar claro que esto solo son consejos mínimos de seguridad, obviamente existen xploits muchos más complejos que los explicados aquí pero que, por ahora, escapan a nuestros conocimientos. Te dejo con una frase que siempre me decía un buen amigo mio:

Una web es segura hasta que alguien quiere algo de ella.

Ir a la primera parte.

Efecto jQuery “Shake”

2 comentarios Anthen Por Anthen El 22 de julio de 2011

Hoy toca un post sobre diseño y efectos jquery. En concreto un plugin de jQuery llamado jRumble!

jRumble es un plugin jQuery que vibra y gira cualquier elemento que seleccionemos. Es muy interesante su implementación a modo de efecto para controlar o bien, dirigir la atención del usuario a determinados elementos.

Dentro de las posibilidades de configuración están disponibles las opciones de controlar el rango X, Y, la velocidad, la rotación y finalmente, el evento por el cual queremos lanzar la animación.

Puedes ver las distintos demos en el sitio oficial del plugin.

Se descarga aquí. Y solo tienes que incluir las librerias js en el código html donde quieras usarlo:

html   
  1. <script type="text/javascript" src="js/jquery.js"></script>
  2. <script type="text/javascript" src="js/jrumble.1.0.js"></script>

Un ejemplo de configuración de este plugin puede ser:

  1. $('#demo2').jrumble({
  2. rangeX: 10,
  3. rangeY: 10,
  4. rangeRot: 4
  5. });

 

Web: jRumble

Comienza GrabThisCode y lo hace con un tema que se ha puesto muy de moda en estos tiempos. La seguridad en la red. Todos hemos escuchado sobre los ataques de Anonymous, Lulzsec o Antisec, entre otros, a grandes corporaciones con robo de datos en algunas ocasiones. La mayoría de estos ataques aprovechan vulnerabilidades que el programador se ha olvidado de “cubrir”.

Voy a explicarte  unos simples pasos para asegurar tu web programada con php + mysql pero saltándome la teoría y la forma de explotarlos, pues no es fácil y en muchos de los casos requiere mucho conocimiento de la materia y grandes cantidades de paciencia. Si te interesa el tema puedes pasarte por el foro.elhacker donde encontraras mucho material sobre como explotar estas vulnerabilidades. Hay que dejar claro que esto es lo básico de seguridad en una web, no la hará impenetrable, pero lo dificultará en gran manera.

SQLI o inyección SQL.

“Todo dato que se vaya a introducir en la Base de Datos que provenga del usuario hay que limpiarlo!”. Para ello, php tiene un par de funciones de fácil uso que “escaparan” los carácteres especiales y así evitaremos que no hagan una inyección sql. Estas 2 funciones son:

mysql_escape_string() y mysql_real_escape_string()

Como puedes ver son la misma, solo que la primera ya está deprecated en php 5.3. La diferencia entre ellas es que mientrás a mysql_escape_string solo debes pasarle el valor a limpiar, a mysql_real_escape_string necesita además la variable de conexión a la base de datos, de la cual recogerá la codificación de carácteres.

Veamos un ejemplo para dejar claro su uso:

  1. <?php
  2. //using mysql_escate_string()
  3. function selectValue($val){
  4.  
  5. $val = mysql_escape_string($val);
  6. $sql = "select * from myDB where value='".$val."'";
  7. $result = mysql_query($sql);
  8. return $result;
  9. }
  10.  
  11. //using mysql_real_escape_string()
  12. //$conn = mysql_connect('localhost', 'mysql_user', 'mysql_password');
  13. function selectValue2($val,$conn){
  14.  
  15. $val = mysql_real_escape_string($val,$conn); //$conn
  16. $sql = "select * from myDB where value='".$val."'";
  17. $result = mysql_query($sql);
  18. return $result;
  19. }
  20.  
  21. ?>

 

Encriptar contraseñas de los usuarios en la base de datos:

Si crees que guardar información “delicada” (contraseñas sobre todo) de los usuarios de tu web encriptada con un algoritmo md5 o sha1 es seguro, estás muy equivocado. A día de hoy cualquiero usuario con un ordenador medio “potente” puede romper estos algoritmos. Pero podemos ponerle las cosas un poco más dificil:

En primer lugar debemos crear un salt. Básicamente es una “semilla” con carácteres aleatorios que nosotros mismos asginamos (recomendable usar carácteres alfanuméricos). No te calientes mucho la cabeza, basta con darle un par de golpes al teclado y ya nos sale nuestra combinación.

Ya tengo mi salt, ¿ahora que hago con esto? Sigue leyendo porque es muy sencillo. Te propongo usar una combinación de los 2 algoritmos de hashing mencionados más arriba junto con tu salt.

  1. <?php
  2.  
  3. $salt = "|@#asdfq3}{4209i1as"; //example of random salt
  4. $pass = sha1($salt.md5($pass));
  5.  
  6. ?>

Bonito eh! ahora si alguien consigue “robar” tu base de datos, lo va a tener muy difícil para descifrar esas contraseñas almacenadas en ella y casi imposible sin saber tu salt.

En la segunda parte trataremos el tema de xss, rfl, lfi y .htaccess. Espero que te haya sido de ayuda, no olvides comentar si tienes alguna duda o sugerencia!

Es construcción!

1 comentario davisdmg Por davisdmg El 20 de julio de 2011

Estoy terminando de configurar todo el blog y añadir los plugins más importantes para dejar esto listo. Muy pronto tendré lista la primera entrada oficial.

Mientrás tanto os dejo un trozo de código con un típico chiste de programador y así de paso pruebo el plugin de código:

  1. #include<stdio.h>;
  2. int main(void)
  3. {
  4. int count;
  5.  
  6. for(count=0;count<500;count++)
  7. {
  8. printf("I will not throw papel airplanes in class.");
  9. }
  10. return 0;
  11. }