Ver Mensaje Individual
  #16 (permalink)  
Antiguo 29/01/2013, 15:21
Avatar de dashtrash
dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años
Puntos: 270
Respuesta: seguridad web

Aporto un par de cosas para ayudar en la seguridad..
- Dejar sólo accesible 1 solo punto de entrada, index.php.Todo el resto de código php no debe ser accesible por http.
- Definir los parámetros que recibe una página.Todas las páginas que puedan accederse en la web, deben tener una configuración que,entre otras cosas, debe definir qué parametros recibe esa página, cuáles son opcionales, cuáles requeridos, y de qué tipo son cada uno.
Por ejemplo, para una página llamada "listado.php", que acepta , por ejemplo, un campo de ordenacion "sortby", y el número de página, sería algo como
Código PHP:
Ver original
  1. $páginas=array(
  2.        /* ... */
  3.       "listado"=>array(
  4.             "source"=>"pages/listado.php", /* fichero que genera la pagina */
  5.              "params"=>array(
  6.                        "sortby"=>array("TYPE"=>"String","REQUIRED"=>false),
  7.                         "page"=>array("TYPE"=>"Integer", "REQUIRED"=>false)
  8.                                      )
  9.                                   )
Esto no sólo sirve para el escapeado / binding, etc, sino también como documentación de la página.
Es parecido a ver tu web como una clase, siendo las páginas los métodos públicos.

Estos parámetros, recibidas por $_GET (aunque yo hago cosas parecidas para $_POST), se asignan a un objeto Request, y se hace unset($_GET), antes de incluir pages/listado.php.Todo acceso a los parámetros se hace a través de Request.

Seguridad extra por $_GET se obtiene haciendo hashing de los parámetros de las urls.
Otras medidas son no incluir los campos clave de los formularios (los que usualmente son campos hidden).En vez de esos campos, se incluye un hash, que apunta a una variable de sesion que contiene los índices para ese formulario.
Otra opción es hacer hash de los campos índice, e incluir ese campo hash como otro campo "hidden".
Obviamente, cuando digo "hash", me refiero a hash de valores + cadena secreta.