属性値がユーザーによって提供される要素属性の XPath クエリを動的に構築する必要があります。SQL インジェクション攻撃に相当する XPath を防ぐために、この値をクリーニングまたはサニタイズする方法がわかりません。例 (PHP の場合):
<?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']
特に最後の攻撃は、昔の SQL インジェクション攻撃を思い起こさせます。
さて、一重引用符を含む属性と二重引用符を含む属性があるという事実を知っています。これらは関数への引数として提供されるため、これらの入力をサニタイズする理想的な方法は何でしょうか?