Мы используем SingleSingOut (SSO) Shibboleth для аутентификации. Shibboleth — это проект с открытым исходным кодом, который был интегрирован в наш проект. Shibboleth выполнит перенаправление на страницу login.jsp, если пользователь не прошел аутентификацию. Теперь мы настроили страницу login.jsp для поддержки локализации. Таким образом, форма actionUrl должна быть отправлена Shibboleth IDP (поставщиком удостоверений) для выполнения аутентификации. Вот приведенный ниже пример кода, предоставленный Shibboleth:
<% if(request.getAttribute("actionUrl") != null){ %>
<form id="login" action="<%=request.getAttribute("actionUrl")%>" method="post">
<% }else{ %>
<form id="login" action="j_security_check" method="post">
<% } %>
<% if ("true".equals(request.getAttribute("loginFailed"))) { %>
<section>
<p class="form-element form-error">Login has failed. Double-check your username and password.</p>
</section>
<% } %>
<legend>
Log in to <idpui:serviceName/>
</legend>
<section>
<label for="username">Username</label>
<input class="form-element form-field" name="j_username" type="text" value="">
</section>
<section>
<label for="password">Password</label>
<input class="form-element form-field" name="j_password" type="password" value="">
</section>
<section>
<button class="form-element form-button" type="submit">Login</button>
</section>
</form>
Теперь я использовал инструмент OWASP ZAP для проверки атаки безопасности. Это подняло высокий риск в приведенном ниже коде
<form id="login" action="<%=request.getAttribute("actionUrl")%>" method="post">
Он сказал, что может быть атака XSS (Cross-site Scripting), поэтому он попросил меня закодировать приведенный выше код.
Как я могу предотвратить XSS (межсайтовый скриптинг) для URL-адреса действия формы. Поскольку это ненадежные данные, есть ли способ закодировать URL-адрес. После некоторых исследований я обнаружил, что лучше использовать ESAPI.encoder().encodeForURL('url'); метод. Я сомневаюсь, что это правильный способ использования ESAPI.encoder().encodeForURL('url') для URL-адреса действия формы?
Из памятки по предотвращению межсайтовых_скриптов
Фактический URL действия формы:
<form name="loginForm" id="login" method="POST" action="<%=request.getParameter("actionUrl")%>">
Закодированный URL-адрес действия формы:
<form name="loginForm" id="login" method="POST" action="<%=ESAPI.encoder().encodeForURL(request.getParameter("actionUrl"))%>">
Мы ценим любые предложения.
action
? В чем проблема с использованиемESAPI.encoder().encodeForURL
? Почему вы добавляете<pre>
кform
? - person t.niese   schedule 26.12.2014ESAPI.encoder().encodeForURL()
для URL-адреса действия формы, потому что, когда я увидел Правило № 5 из Cross_Site_Scripting Prevention Cheatsheet, в нем упоминается, что это правило должно применяться к значениям параметров HTML URL. - person Sarath Upadrista   schedule 26.12.2014actionUrl
может быть чем-то вроде" onsubmit="alert('xss');
, вам нужно избежатьactionUrl
, чтобы он не допустил такого рода атаки. Но тогда есть еще одна проблема, так как кто-то может передатьhttp://a-malicious-domain.com/to/collect/data
какactionUrl
, и тогда данные формы будут отправлены на чужой домен. Просто экранирование URL не поможет. - person t.niese   schedule 26.12.2014