Mostrando entradas con la etiqueta php. Mostrar todas las entradas
Mostrando entradas con la etiqueta php. Mostrar todas las entradas

Top 10 Errores MySQL cometidos por desarrolladores PHP

0 comentarios

Top 10 Errores MySQL cometidos por desarrolladores PHP



Una base de datos es un elemento fundamental en la mayoría de las aplicaciones web. Si usamos PHP, probablemente usemos MySQL - integrante del conocido LAMP.

PHP es relativamente sencillo y la mayoría de nuevos desarrolladores pueden escribir código funcional en pocas horas. Sin embargo, construir una solida aplicación con diseño de base de datos toma su tiempo y experiencia. Por ello, siguiendo este post de sitepoint, vamos a listar los 10 peores errores de MySQL; pero, que también podrían darse con otro servidor de base de datos SQL.

1. Usar MyISAM en vez de InnoDB

MySQL tiene una variedad de motores o database engines; pero, es probable que nos hayamos encontrado casi siempre con MyISAM y/o InnoDB.
MyISAM es el motor por defecto; sin embargo, a menos que no estemos creando una base de datos sencilla o de pruebas, usar MyISAM como nuestro motor es una opción equivocada. MyISAM no soporta restricciones de claves foráneas o transacciones, esenciales para mantener la integridad referencial de los datos. Además, del hecho de que toda la tabla se bloquea cuando uno inserta o actualiza un registro, lo que provoca un efecto adverso en el rendimiento de la aplicación, cuando esta crece.
La solución: Usar InnoDB...

2. Usar las funciones MySQL de PHP

Desde sus inicios, PHP nos provee de librerías de funciones especiales para el manejo de MySQL. Muchas aplicaciones dependen de las funciones mysql_connect, mysql_query, mysql_fetch_assoc, etc. pero el propio manual de PHP dice:
Si estas usando la versión de MySQL 4.1.3 o superior se recomienda el uso de la extensión mysqli.
mysqli o la extensión mejorada de MySQL, tiene notorias ventajas:
  • Una (opcional) interfaz orientada a objetos
  • Declaraciones preparadas (que nos ayudan a prevenir inyecciones SQL y a incrementar el rendimiento)
  • Múltiples declaraciones y soporte de transacciones
Alternativamente, debes de considerar usar PDO si deseamos mantener un soporte a múltiples bases de datos.

3. No validar el acceso de usuarios

Esta debería de ser probablemente la #1: Nunca confiar en lo que escribe el usuario. Validar cada cadena de texto que es enviada al servidor con PHP, aún cuando usamos JavaScript, debería ser la norma. Las más sencillas inyecciones de SQL dependen de códigos como este:
$username $_POST["name"];
$password $_POST["password"];
$sql "SELECT userid FROM usertable WHERE username='$username' AND password='$password';";
// run query...?>
Esto podría ser crackeado ingresando “admin’ ; –“ en el campo del nombre de usuario. El string del SQL quedaría como sigue:
SELECT userid FROM usertable WHERE username='admin';
El cracker podría loggearse como “admin”, sin necesidad de conocer la clave, ya que esta comentada en el SQL.

4. No usar UTF-8

UTF-8 resuelve muchos problemas de internacionalización. Aunque no será soportado adecuadamente en PHP hasta la versión 6.0, hay algunas cosas que podemos hacer al configurar los caracteres de MySQL como UTF-8.

5. Favorecer a PHP sobre SQL

Cuando somos nuevos con MySQL, es común resolver los problemas en el lenguaje que más conocemos. Esto nos puede conducir a un código más lento e innecesario. Por ejemplo, en vez de usar las función nativa de mysql AVG(), usamos un loop PHP para calcular el promedio obteniendo todos los valores de un conjunto de registros.
También hay que tener cuidado de las consultas SQL dentro de los bucles de PHP. Siempre es recomendable realizar una consulta y luego recorrer sus resultados.
En general, hay que utilizar los puntos fuertes de la base de datos para analizar los datos.

6. No optimizar tus consultas

El 99% de los problemas de rendimiento con PHP son causados por la base de datos y una consulta SQL mal realizada podría causar estragos en nuestra aplicación. La declaraciónEXPLAIN de MySQL, el Query Profiler y muchas otras herramientas, nos ayudarán a encontrar nuestra consulta acertada.

7. Usar los tipos de datos equivocados

MySQL ofrece una variedad de tipos de datos: numéricos, de cadena y fecha. Si estamos almacenando una fecha, hay que guardarla en un campo DATE o DATETIME. Usar unINTEGER STRING puede hacer de nuestras consultas SQL más complicadas.
A menudo podríamos tener la tentación de almacenar nuestro propio formato de datos; por ejemplo, almacenar objetos serializados de PHP como string; gestionar la base de datos sería más fácil; pero, MySQL se convertirá en un almacén de datos tontos y que, probablemente, nos lleven a más problemas.
Recomendado: Usos de Varchar y Char

8. Usar * en las consultas SELECT

No es conveniente usar el * para devolver todas las columnas de una tabla, es ocioso. Sólo debemos extraer los datos que necesitamos, incluso si requerimos de todos los campos en un momento, en el futuro, nuestras tablas pueden cambiar.

9. Sub o Sobre Indexación

Como norma general, los índices deben aplicarse a cualquier columna que vaya a ser llamada en la clausula WHERE de una consulta SELECT.
Por ejemplo, supongamos que tenemos una tabla user con un ID numérico (clave primaria) y una dirección de correo electrónico. Durante la sesión de usuario, MySQL debe localizar el ID correcto al buscar un correo electrónico. Con un índice, MySQL podría usar un algoritmo de búsqueda rápida para localizar el e-mail casi instantáneamente. Sin un índice, MySQL debe comprobar todos los registros en orden, hasta encontrar la dirección de correo.
A veces es tentador añadir índices a cada columna; sin embargo, estos se regeneran con cada INSERT o UPDATE en una tabla. Lo que podría tener un gran impacto en el rendimiento, por ello sólo debemos añadir índices a los campos estrictamente necesarios.

10. Olvidarse de hacer backups

Puede sonar raro, pero los discos duros pueden malograrse. Los servidores pueden quemarse... y la perdida de nuestros datos MySQL serían catastróficos. Por ello, hay que asegurarnos de contar con copias de seguridad automatizadas o réplicas de nuestra base datos.

11. Bonus mistake: No considerar otras bases de datos

MySQL puede ser la base de datos más popular y aceptada por los desarrolladores de PHP; pero, no es la única opción. PostgreSQL y Firebird son sus competidores más cercanos, ambos son open source y no están manejados por una corporación. Microsoft provee SQL Server Express y Oracle 10g Express; ambas son versiones gratuitas de las populares ediciones enterprise. Incluso, SQLite puede ser una alternativa viable para aplicaciones pequeñas o embebidas.

Fuente: Baluart.net

PHP Obfuscator - No muestres tu code php

0 comentarios
 
Encode and Obfuscate PHP Scripts
Our PHP obfuscator application encodes and obfuscates PHP code to make the output difficult to reverse engineer. The application requires no pre-modifications to your code and no additional components on your server. This product allows for encoding of functions, variables and the removal of whitespace.

Apache 2 configuration of clean URLs on Debian

0 comentarios

Note: This article needs to be updated for Debian "Etch" and "Lenny" releases. (as of March 2009)

If you're running Apache 2 on Debian stable, in order to install the rewrite module you simply need to:
# a2enmod rewrite
then restart the webserver:
# /etc/init.d/apache2 restart
then edit either /etc/apache2/sites-enabled/drupal or to your .htaccess and ensure it looks something like this:



#
# Apache/PHP/site settings:
#

# Protect files and directories from prying eyes:

  order deny,allow
  deny from all


# Set some options
Options -Indexes
Options +FollowSymLinks

# Customized server error messages:
ErrorDocument 404 /index.php

# Set the default handler to index.php:
DirectoryIndex index.php

# Overload PHP variables:

   # If you are using Apache 2, you have to use
   # instead of .
   php_value register_globals        0
   php_value track_vars              1
   php_value short_open_tag          1
   php_value magic_quotes_gpc        0
   php_value magic_quotes_runtime    0
   php_value magic_quotes_sybase     0
   php_value arg_separator.output    "&"
   php_value session.cache_expire    200000
   php_value session.gc_maxlifetime  200000
   php_value session.cookie_lifetime 2000000
   php_value session.auto_start      0
   php_value session.save_handler    user
   php_value session.cache_limiter   none
   php_value allow_call_time_pass_reference  On


# Various rewrite rules

  RewriteEngine on
  Options All

  # Modify the RewriteBase if you are using Drupal in a subdirectory and the
  # rewrite rules are not working properly:
  RewriteBase /drupal

  # Rewrite old-style URLS of the form 'node.php?id=x':
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{QUERY_STRING} ^id=([^&]+)$
  RewriteRule node.php index.php?q=node/view/%1 [L]

  # Rewrite old-style URLs of the form 'module.php?mod=x':
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{QUERY_STRING} ^mod=([^&]+)$
  RewriteRule module.php index.php?q=%1 [L]

  # Rewrite URLs of the form 'index.php?q=x':
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]


# $Id: .htaccess,v 1.58 2004/10/09 20:41:49 dries Exp $

This is because the debian package installs the drupal "sites-enabled" virtual host, result being that drupal is accessed from http://example.com/drupal, hence the need to uncomment RewriteBase. Change it to the base that corresponds to your system.
ref: http://www.debian-administration.org/articles/136
http://drupal.org/node/14322
--
Sean K. O'Brien
CTO
Colley Graphics, LLC
http://www.colleygraphics.com

OpenInviter - clase php

0 comentarios

Por si no sean dado cuenta al momento que uno se registra en una de estas webs de redes sociales( ya sea twitter, facebook, myspace, etc, etc..) pues es estos para empezar te solicitan una cuenta de correo, y ojo no cualquier correo (intente con mi coprorativo y no funcaba) sino una cuenta con unos de estos archi conocidos correos como gmail, yahoo, hotmail, etc. y ustedes se preguntaran: "PORQUE???" pues ahi entra a tallar esta herramienta OpenInviter que lo que hace es conectarse con nuestra cuenta de correo registrada y tomar datos como tu lista de contactos... lo cual muy inteligentemente servira para : DESEAS INVITAR A TUS AMIGOS?? ..

Se llama Open Inviter y soporta estos servicios: AOL, GMail, GMX.net, Windows Live (Hotmail), Katamail, Lycos, Mail.com, Mail.ru, Rambler.ru, Rediff, Yahoo!, Yandex, Facebook, Hi5, LinkedIn, MySpace, Orkut, Twitter.

 En conclusiñon es una clase escrita en PHP que sirve para obtener la lista de contactos de servicios como Hotmail.
 
Derechos Reservados 2010 Sigo en lo mismo...