Вопрос Как защититься от сохраненного XSS внутри значения атрибута JSP в форме?
Исходный код похож на
<form ..>
<input value="<c:out value="${name}"/>" type="text" />
</form>
Использование c: out:
<input value="<c:out value="${name}"/>" type="text" />
или esapi: encodeForHTMLAttribute?
<%@ taglib prefix="esapi" uri="http://www.owasp.org/index.php/Category:OWASP_Enterprise_Security_API" %>
<input value="<esapi:encodeForHTMLAttribute>${name}</esapi:encodeForHTMLAttribute>" type="text" />
Моя первая мысль Из того, что я прочитал, кодировка esapi - самый безопасный способ.Я не думаю, что c: out достаточно безопасен, когда мы пишем значение атрибута.На основе шпаргалки Owasp для предотвращения экранирования xss должно выполняться по-разному в зависимости от контекста, в котором используется значение - значение атрибута в этом случае.c:out
экранирует только для чувствительных к HTML символов, поэтому только эти символы: & <> "'/.
Пример уязвимости: возможно, кто-то по ошибке удалит символы" или ", окружающие значение атрибута.Страница по-прежнему будет действительным HTML и работает хорошо.Но если значение, которое будет вставлено в атрибут, равно something onclick=alert(1)
, то, поскольку c: out ничего не пропустит, у нас будет html <input value=something onclick=alert(1) ...
, который будет выполнять javascript при нажатии.