Inyección de código y Cross-site scripting

SQL, HTML y Tag Nes

Nes gestiona de forma totalmente transparente la eliminación de código malicioso de las variables.

Por defecto es filtrado el HTML y los Tags Nes de todas las variables de entorno (*) procedentes de formularios.

Por defecto es filtrado el HTML y los Tags Nes de todas las variables ($).

Por defecto es filtrado el HTML y los Tags Nes de todas las variables de Tablas y SQL (@$).

Por defecto en HTML se permite el Tag HTML <br>.

Por defecto se llama a DBI::quote en todas las variables que formen parte de una sentencia SELECT en el Tag sql.

Cambiar el comportamiento por defecto

Los tipos de variables *, $ y @$ admiten parámetros para cambiar este comportamiento:

{: $  ('var','yes_html','no_sql') :}
{: *  ('q_var','yes_html','no_sql') :}
{: @$ ('table.field','yes_html','no_sql') :}

Esto es, pasamos como parámetros las opciones de filtrado que deseeamos, y son:

no_sql   # no permitir SQL, llama a DBI::quote
no_html  # no permitir Tag HTML
no_br    # no permitir el Tag HTML <br>
no_nes   # no permitir Tag Nes {: :}

yes_sql  # permitir SQL, no filtrar con DBI::quote
yes_html # permitir todos los Tags HTML
yes_br   # permitir el Tag HTML <br>
yes_nes  # permitir Tag Nes {: :}

Permitir tags HTML concretos ( yes_tag_TAG ):

yes_tag_B      # permitir el Tag HTML <B></B>
yes_tag_strong # permitir el Tag HTML <strong></strong>
...

El formato es:

{: $  ('var',[lista del opciones en cualquier orden]) :}

Tags Nes

Si hacemos a una variable yes_nes no conseguiremos ejecutar el código que contenga la variable. Por seguridad, por claridad, NO es posible ejecutar código Nes desde una variable. El efecto de no_nes es que los Tags sean visibles, y de yes_nes es que desaparezcan. No queremos que hagan cosas como esta:

http://nes.sourceforge.net/miniblog/es/?item={: include .htaccess :}

...o peores, ¿verdad?



Archivos de configuración

Esta aplicación esta creada con Nes, como podéis ver el código fuente de está disponible en tiempo real para poder ser visto por cualquiera.

Es importante mantener los datos sensibles separados de la aplicación como rutas de directorios, contraseñas, etc.

Los archivos de configuración .nes.cfg no sólo nos pueden resultar útiles como herramienta de programación, también hacen nuestra aplicación más segura.

Hay que impedir el acceso a estos archivos en nuestro .htaccess:

 <FilesMatch \.nes.cfg$>
    order deny,allow
    deny from all
 </FilesMatch>
 

Seguridad en Formularios

Ver:
Formularios: Formularios seguros
Plugin: Forms
Plugin: Captcha

PHP

NES filtra el los Tags Nes de los formularios del PHP con include o Wrapper pero NO el HTML y SQL. Se presupone que el script PHP debe incorporar esos filtros.