Necesito construir dinámicamente una consulta XPath para un atributo de elemento, donde el valor de atributo es proporcionado por el usuario. No estoy seguro de cómo limpiar o desinfectar este valor para evitar el equivalente XPath de un ataque de inyección SQL. Por ejemplo (en PHP):Limpieza/desinfección de los atributos xpath
<?php
function xPathQuery($attr) {
$xml = simplexml_load_file('example.xml');
return $xml->xpath("//myElement[@content='{$attr}']");
}
xPathQuery('This should work fine');
# //myElement[@content='This should work fine']
xPathQuery('As should "this"');
# //myElement[@content='As should "this"']
xPathQuery('This\'ll cause problems');
# //myElement[@content='This'll cause problems']
xPathQuery('\']/../privateElement[@content=\'private data');
# //myElement[@content='']/../privateElement[@content='private data']
El último de ellos, en particular, es una reminiscencia de los ataques de inyección SQL de antaño.
Ahora, sé de hecho que habrá atributos que contengan comillas simples y atributos que contengan comillas dobles. Dado que estos se proporcionan como argumento para una función, ¿cuál sería la forma ideal de desinfectar la entrada para estos?
¿Está pasando por alto quizá '? –
Sí, ese es el que estoy buscando. Hay una lista de todas (5) de las entidades XML aquí: http://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references –