Как защитить от сохраненного XSS внутри значения атрибута JSP в форме - PullRequest
0 голосов
/ 19 февраля 2019

Вопрос Как защититься от сохраненного 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 при нажатии.

1 Ответ

0 голосов
/ 22 февраля 2019

Спасибо @avgvstvs за подтверждение этого подхода.Так что безопасный путь - это действительно encodeForHTMLAttribute

...