Запретить getText() вычислять выражения EL
В бэкэнде Struts2 у меня есть переменная экземпляра класса действия, например: keyName
, Динамический ключ возвращается в представление (JSP).
это keyName
переменная устанавливается с помощью параметра запроса, используя метод POST. В зависимости от значения параметра запроса keyName
будет меняться.
В JSP я использую <s:property value="getText(keyName)" />
показать метку, соответствующую ключу, заданному переменной keyName.
Когда я отправляю выражение EL например ${90-40}
в keyName
это выражение оценивается и в результате отображается 50 на пользовательском интерфейсе.
Как мы можем избежать или предотвратить такую инъекцию EL с getText()
?
Есть ли другой альтернативный способ вместо <s:property value="getText(keyName)" />
?
2 ответа
Вы можете создать свой собственный текстовый провайдер и зарегистрировать его в struts.xml
:
<constant name="struts.xworkTextProvider" value="com.struts.text.MyTextProvier"/>
Теперь создайте класс MyTextProvier
это расширяет TextProviderSupport
и переопределить getText()
методы. Все методы принимают параметр key
как String
и вы можете заменить нежелательные символы из него. Тогда позвони super.getText()
, Например
public String getText(String key) {
return super.getText(key.replaceAll("[\\$\\{\\}]", ""));
}
Использование <s:text name="keyName" />