2014-06-25 54 views
1

轉義xpath的最佳方法是什麼?如何在php中轉義xpath

$test = simplexml_load_file('test.xml'); 
$var = $_GET['var']; // injection heaven 
$result = $test->xpath('/catalog/items/item[title="'.$var.'"]'); 

通常我使用PDO綁定。或類似的東西,但他們都需要數據庫連接。 僅僅是addslasheshtmlentities就足夠了。
還是有更好的做到這一點?

回答

2

根據規範,對文字的語法如下:

[29] Literal ::=  '"' [^"]* '"' 
          | "'" [^']* "'" 

這意味着在一個單引號字符串,其他什麼比一個單引號是允許的。在雙引號字符串中,除雙引號以外的任何內容都是允許的。

這就是說,xpath將接受HTML實體代替它們的文字值,所以如果你通過htmlspecialchars($var, ENT_QUOTES)運行你的變量,你將是安全的。

+0

只是檢查,但如果我想在節點值中使用引號,他們也需要是html字符嗎? – janw

+0

是的,這就是'htmlspecialchars()'調用的 –

+0

好吧,我猜這可能會起作用。有沒有辦法做到這一點,同時仍然能夠選擇實際的報價? – janw