martes, 19 de mayo de 2009

Los errores más comunes de un programador PHP

Uno de los lenguajes más usados para el desarrollo web es, sin duda, PHP, y no solo por ser fácil de aprender, si no porque hay mucha información disponible en la red desde tutoriales hasta foros donde la misma comunidad te brinda de su ayuda.
PHP es uno de los pocos que no existe declaración de variables, volviendo más flexible el desarrollo, pero este beneficio, trae consigo problemas en seguridad y errores en la sintaxis.

Los errores más comunes que se cometen al usar PHP como lenguaje para creación de sitios web son:

1) Configuración básica de seguridad

Las nuevas versiones de PHP contienen en su instalación una configuración básica de seguridad (la cual es la indispensable), pero en ocaciones nuestro servidor tiene habilitado o deshabilitado opciones que podrán beneficiar o perjudicar la seguridad de nuestras aplicaciones, para conocer esta configuración, se necesita saber que opciones tiene habilitadas PHP, para ello se utiliza la función phpinfo(), la cual mostrará las configuraciones que contiene el archivo php.ini. Para ello debes realizar lo siguiente:
  1. Imprime la función phpinfo(); en un archivo blanco de PHP.
  2. Las siguientes opciones deben estar en los siguientes estados, si no es así cambialos:
    1. register_globals: desactivadas off.
    2. safe_mode: activado on
NOTA: register_globals y safe_mode han sido eliminados en la versión 6.0.0. de PHP.
Más información en PHP Seguridad

2) Usar una versión vieja de PHP (como PHP4)

¿Sigues usando la versión PHP4?, sabias que PHP4 tiene niveles de seguridad muy bajos y que además no cuenta con muchas funcionalidades necesarias para desarrollo de una aplicación potente que se puede lograr con PHP5. Por ejemplo, PHP4 aun no es posible la programación orientada a objetos (que en el siguiente punto, lo explico).

3) No convertir caracteres a su entidad HTML
No hay que confiar en los usuario!!. Algunos datos que los usuarios envian a nuestra aplicación es posible que se encuentre infectada. Infectada me refiero a que quieran realizar ciertas acciones o sentencias que pueden modificar el contenido de nuestro sitio, es por ello que debemos limpiar esos datos, para ello se realiza lo siguiente:
htmlspecialchars($_GET['comentarios'], ENT_QUOTES);

4) Inyección SQL
Puedes consultar este punto, en mi blog: "Inyección SQL: Hackeando páginas web".

5) Comillas simples o dobles
Si en algunas ocaciones has visto estos signos entre palabra \' o \", hay un problema de magic_quotes. Es porque se tiene habilitado la opción magic_quotes_gpc dentro del archivo php.ini, y realizar lo siguiente:

$variable="¿te apellidas O\'reilly?";

//Imprimira ¿te apellidas O'reilly? , sin \
echo stripslashes($variable);


6) Mal empleo de HTTP-headers
Cuando usamos: session_start(); , header(); , setcookie(); , en ocaciones recibimos el warning siguiente:
warning: Cannot add header information - headers already sent....
Si recibe este warning, es posible que no los estas usando en la parte cabecera del sitio, para su solición realiza lo siguiente:
  1. output_buffering = off en php.ini.
  2. Agrega ob_start(); al principio de tu página, y ob_end_flush(); al final de tu página para liberar el buffer.

7) No proteger ID session
El ID es un dato muy sensible dentro de una aplicación. Por ejemplo, la contraseña de un usuario.

Si el dato no cuenta con encriptación:
if ($_SESSION['contrasena'] == $contrasena) {
//Area protegida
}
Si el dato tiene encriptación:
if ($_SESSION['contrasena'] == sha1($contrasena)) {
//Area protegida
}
8) No usar OOP (Programación Orientada a Objetos) para creación de aplicaciones web

Las ventajas de usar este paradigma de programación son:
  1. Fomenta la reutilización y extensión del código.
  2. Facilita el mantenimiento del software.
  3. Permite crear sistemas más complejos.
  4. Agiliza el desarrollo de software.
  5. Facilita la creación de programas visuales.
  6. Facilita el trabajo en equipo.
  7. Relacionar el sistema al mundo real.
Fuente: Programación Orientada a Objetos

9) No incluir otros lenguajes como JavaScript
¡No todo realiza de manera eficiente PHP!. Un ejemplo simple es la validación de formularios. PHP es un lenguaje que se ejecuta en el servidor, por ende, tiene que enviar los datos al servidor, y desde ahi verificarlos. Al usar JavaScript para realizar esta acción se evita el refrescado del sitio, acelerando la velocidad de respuesta de la aplicación web, ya que se ejecuta en el navegador y no en el servidor. Por esa y otras razones nace JavaScript.

10) No conocer Frameworks
Los frameworks o marco de trabajo, se utilizan para facilitar el desarrollo, ya que proveen de una estructura para la implementación en la aplicación (más información).
En pocas palabras te facilitará la creación de la aplicación web por su caracteristica MVC (Modal View Controller), pero claro no todo es oro, si usas un framework dependerás de el.

Los 10 Top frameworks de PHP son:
  1. Yii
  2. CodeIgniter
  3. PHPDevShell
  4. CakePHP
  5. Akelos
  6. Prado
  7. Symfony
  8. Zend
  9. Zoop
  10. QPHP
Fuente: Top 10 PHP Frameworks

martes, 12 de mayo de 2009

¿Cómo utilizar .htaccess en nuestro sitio web?, en 5 trucos básicos

El .htaccess es un archivo de texto, el cual contiene ciertas reglas sobre archivos y directorios del servidor web (Apache). Es normalmente usado por los desarrolladores para la optimización de sus sitios web, creando URLs amigables para ser mejor posicionadas en buscadores (como Google). Ha esta optimización se le denomina SEO (Search Engine Optimization).

Antes de hablar sobre los 5 trucos básicos, para aquellos que no conocían, ni han usado el .htaccess les daré una guía rápida sobre como crearla.
  1. Abre notepad (bloc de notas)
  2. Dentro de este archivo, es donde teclearas los códigos que aquí te proporcionare.
  3. Guarda el archivo con la extensión .txt en la carpeta raiz del servidor donde tienes tu sitio web.
  4. Ya que lo tengas ahí, cambia su nombre y extensión (en conjunto) a: .htaccess (si lo tienes en carpeta en tu PC, ve a Opciones de Carpeta, y selecciona, que muestra las extensiones, para que así puedas remplazar el nombre/extensión del archivo.)
Los 5 trucos básicos que debes saber sobre como usar .htaccess son los siguientes:
1) Mostrar mensaje de error 404
Tu servidor debe estar preparado para mostrar mensajes de error si el usuario/visitante trata de accesar a una página web que no existe. Entonces, podrás direccionarlo a una página donde explique el porque del error (error número 404).
ErrorDocument 404 /404.html
Donde:

404.html
: nombre de la página a donde se re-direccionará.

2) Prohibir / Bloquear archivos re direccionando visitas a otra página.
Muchas veces por mantenimiento estamos trabajando con algunos archivos dentro de nuestro sitio web, si estamos modificando en línea esto podía repercutir si alguien visita nuestro sitio y se encuentra con errores, para prevenir esto, se realiza lo siguiente (error número 403 es Forbidden, prohibido):
order deny,allow
deny from all
allow from 000.000.000.000

ErrorDocument 403 /actualizando.html

<Files actualizando.html>
allow from all
</Files>
Donde:
orden deny,allow: se empieza el encabezado de bloqueo.
deny from all: Negar todos los visitantes.
allow from 000.000.000.000: permitir solo la siguiente IP (000.00…) que para este caso, pon la tuya, ya que solo a ti te interesa ver tu sitio web en totalidad.
actualizando.html: Es el archivo a donde se redireccionará.
La siguientes líneas, dicen que el archivo actualizando.html, se podrá ver por todos.

3) Renombrar o Redirigir páginas

Otra buena función del .htaccess es renombrar páginas web, esto es útil cuando se tiene una página antigua y se quiere cambiar a una nueva (error número 301).
Redirect 301 /vieja.html http://tuya.com/nueva.html
Donde:
vieja.html: archivo que se quiere renombrar.
nueva.html: archivo nuevo
4) Impedir navegar en directorios
Cuando no tenemos el archivo index.html o index.php, podemos ver todos los archivos que se tienen en el servidor y carpeta, para prevenir que el visitante pueda navegar entre nuestros archivos como imagenes, javascript, css, etc. pondremos lo siguiente:
Options All -Indexes
5) Crear URLs amigables
El último truco, pero uno de los más usados, es la creación de URLs amigables para los buscadores y visitantes, ya que es más fácil para Google encontrarla vea:
www.tuya.com/blog/programacion/apache.html www.tuya.com/blog.php?cat=programacion&nombre=apache
Eso se puede realizar gracias al mod_rewrite, aquí un ejemplo básico:
RewriteEngine On
RewriteRule ^blog/([a-zA-Z]+)/([a-zA-Z]+).htm$ blog.php?cat=$1&nombre=$2