Как предотвратить инъекцию XPath / XML in.NET
Как предотвратить инъекцию XPATH в .NET Framework?
ранее мы использовали конкатенацию строк для создания операторов XPATH, но обнаружили, что конечные пользователи могут выполнять некоторые произвольные XPATH. Например:
string queryValue = "pages[@url='" + USER_INPUT_VALUE + "']";
node = doc.DocumentElement.SelectSingleNode(queryValue);
было бы достаточно удалить одинарные и двойные кавычки из входных строк?
или .NET framework поддерживает параметризованные запросы XPATH?
4 ответов
основная идея предотвращения инъекции XPath заключается в том, чтобы предварительно скомпилировать выражение XPath, которое вы хотите использовать, и разрешить переменные (параметры) в нем, которые во время процесса оценки будут заменены введенными пользователем значениями.
в .NET:
предварительно скомпилируйте XPath expresion с XPathExpression.Compile ().
использовать XPathExpression.SetContext() метод, чтобы задать в качестве контекста XsltContext объект, который разрешает некоторые конкретные переменные для введенных пользователем значений.
вы можете узнать больше о том, как оценить выражение XPath, содержащее переменные здесь.
этот текст содержит хорошие и полные примеры.
строго типизированные параметры доступны, если вы используете полномасштабный XsltTransform.
вместо строго типизированных параметров вы можете уменьшить параметры для пользователя. Зачем давать им полный контроль, если ты этого не хочешь?
предоставьте пользователю пару опций для выбора, а затем создайте запрос.
разрешение пользователю вводить любую строку вызывает проблемы или много работы.