Первый пункт: вы никогда не должны строить запрос путем конкатенации строк, включающей пользовательский ввод.Google «Атаки по SQL-инъекциям» выяснит, почему (большая часть литературы написана на языке SQL, но XPath имеет точно такие же уязвимости).
Если вы используете выражение с переменной, например //*[dataItemId = $userInput]
, то (а) вы защищены от атак с использованием инъекций, (б) вам не нужно беспокоиться о экранировании специальных символов на входе (например, апострофах), и (в) это намного эффективнее, потому что вам нужно скомпилировать выражение XPath только один раз.
Единственная трудность состоит в том, что вам нужно решить, как предоставить параметр для запроса (то есть значение для $userInput
), прежде чем выполнить его.Это зависит от API вашего процессора XPath, и я не знаком с процессором XPath, который вы используете, поэтому вам нужно исследовать это самостоятельно.