我有以下功能,發現HTML DOM
內的值;如何從DOM DOM查詢中轉義所有無效字符?
它的工作原理,但是當我給參數$value
,如:Levi's Baby Overall,
它的裂縫,因爲它不逃避,和「字符
如何逃避DOM的XPath查詢所有無效字符?
我有以下功能,發現HTML DOM
內的值;如何從DOM DOM查詢中轉義所有無效字符?
它的工作原理,但是當我給參數$value
,如:Levi's Baby Overall,
它的裂縫,因爲它不逃避,和「字符
如何逃避DOM的XPath查詢所有無效字符?
由於存在(惡意)XPath注入的風險,因此XPath表達式中的佔位符不能用用戶提供的任意字符串代替。
爲了安全處理這些未知的字符串,解決方案是使用預編譯的XPath表達式並將用戶提供的字符串作爲變量傳遞給它。這也完全消除了在代碼中處理嵌套引號的需要。
將字符串放在首位的全部原因,是爲了確保它在xpath中沒有特別的含義,這樣黑客無法注入任何東西,它可以可靠地搜索確切的文本字符串,如'// parent :: * [@ password]' – hanshenrik
'解決方案是使用預編譯的XPath表達式並將用戶提供的字符串作爲「 - 呃,不,這不是PHP的解決方案,因爲PHP的DOMXPath不支持變量(只是另一個避免PHP的原因,我猜) – hanshenrik
@hanshenrik,是的,我不知道PHP,in .NET可以使用XsltContext類:https://msdn.microsoft.com/en-us/library/system.xml.xsl.xsltcontext(v = vs.110).aspx –
PHP沒有用於轉義/引用XPath查詢字符串的內置函數。此外,逃逸字符串XPath是相當困難的事,這裏的一對爲什麼越來越多的信息:https://stackoverflow.com/a/1352556/1067003,這裏是他的C#XPath的報價功能的PHP接口:
function xpath_quote(string $value):string{
if(false===strpos($value,'"')){
return '"'.$value.'"';
}
if(false===strpos($value,'\'')){
return '\''.$value.'\'';
}
// if the value contains both single and double quotes, construct an
// expression that concatenates all non-double-quote substrings with
// the quotes, e.g.:
//
// concat("'foo'", '"', "bar")
$sb='concat(';
$substrings=explode('"',$value);
for($i=0;$i<count($substrings);++$i){
$needComma=($i>0);
if($substrings[$i]!==''){
if($i>0){
$sb.=', ';
}
$sb.='"'.$substrings[$i].'"';
$needComma=true;
}
if($i < (count($substrings) -1)){
if($needComma){
$sb.=', ';
}
$sb.="'\"'";
}
}
$sb.=')';
return $sb;
}
用法示例:
$elements = $dom_xpath->query("//*[contains(text()," . xpath_quote($value) . ")]");
"
),因爲(如果需要的話或CONCAT()當量)的xpath_quote功能,它會爲我
你可能會發現你在這裏回答:http://stackoverflow.com/questions/4452323/xpath-query-with-single-quote。 – matthias
我不認爲是可能的,他的代碼不適用於所有的DOM的 –