Security Scanner #125 - XMLWriter WriteRawText method used in source

Cuando ejecuto el Security Scanner en una KB Genexus, lista aquellos objetos que utilicen WriteRawText cuando graban XML con el XMLWriter.

Que problema puede dar esto?

Comparemos estos dos casos

 1)
  &strAux =  '<tag>'+&String+'</tag>'
  &XMLWriter.WriteRawText(&strAux)


2)
&XMLWriter.WriteElement('tag',&String)

Ambas formas de programar son equivalentes cuando la variable &String no tiene caracteres especiales, pues generan el mismo archivo xml, que tendrá la forma

<tag>ContenidoDelSting</tag>

Ahora hagamos las pruebas con otros valores:

&String = "<otroTag>Valor</otroTag>"

El caso 1) generará el xml 

1) <tag>
         <otroTag>Valor</otroTag>
   </tag>

Queda el XML con nuevos nodos. otroTag que no estaba en el XML original

2) <tag>&lt;otroTag&gt;Valor&lt;/otroTag&gt;</tag> 

Las diferencia es que el WriteElement sustituye los caracteres especiales por su representacion alternativa, para que no se pueda modificar la estructura del XML, haciedo menos peligroso su uso. 

Otros casos que pueden ocasionar problemas:

&String=">"

&String="</tag><NuevoTag>valor</NuevoTag>"

&String = "\""

Programando con XMLwriter.WriteRawText con variables que dependan de un ingreso del usuario sin validacion, puede ocasionar la generación de xml mal formados o con problemas de codificación de caracteres (encoding). 

Esto puede hacer que nuestros programas entren en loop o cancelen, por lo que es importante evitarlo. 

Siempre que sea posible, sustituir el WriteRawText por WriteElement. 
En caso que esto no sea posible, utilizar rutinas o expresiones regulares para validar que dichos campos tienen valores validos. La tarea de validar entradas (o sanitizar) no es algo fácil de programar y no se recomienda usar rutinas propias. Gerardo Canedo de GeneXus Consulting me recomendó usar. :

Seria bueno que estas rutinas esten incluidas en GeneXus para poder realizar estas validaciones de forma mas sencilla. 

Comentarios

Entradas más populares de este blog

La nefasta influencia del golero de Cacho Bochinche en el fútbol uruguayo

Aplicación monolítica o distribuida?

Funcionalidades de GeneXus que vale la pena conocer: DATE Constants.