Visualizzazione dei risultati da 1 a 10 su 15

Hybrid View

  1. #1
    Ok, alka provo a ricontestualizzare il problema. Fammi sapere se così è più chiaro.
    Ho incominciato a leggere l'HTML del programma che è composto da sole 3 pagine (una per il login, una per la registrazione dell'utente ed una protetta a cui si accede dopo il login.
    Qui di seguito c'è il codice:


    registration.jsp


    codice:
    <%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
    <c:set var="contextPath" value="${pageContext.request.contextPath}"/>
    
    
    <!DOCTYPE html>
    <html lang="en">
      <head>
          <meta charset="utf-8">
          <title>Create an account</title>
          <link href="${contextPath}/resources/css/bootstrap.min.css" rel="stylesheet">
          <link href="${contextPath}/resources/css/common.css" rel="stylesheet">
      </head>
      <body>
        <div class="container">
            <form:form method="POST" modelAttribute="userForm" class="form-signin">
                <h2 class="form-signin-heading">Create your account</h2>
                <spring:bind path="username">
                    <div class="form-group ${status.error ? 'has-error' : ''}">
                        <form:input type="text" path="username" class="form-control" placeholder="Username"
                                    autofocus="true">
                        </form:input>
                        <form:errors path="username">
                        </form:errors>
                    </div>
                </spring:bind>
                <spring:bind path="password">
                    <div class="form-group ${status.error ? 'has-error' : ''}">
                        <form:input type="password" path="password" class="form-control" placeholder="Password">
                        </form:input>
                        <form:errors path="password"></form:errors>
                    </div>
                </spring:bind>
                <spring:bind path="passwordConfirm">
                    <div class="form-group ${status.error ? 'has-error' : ''}">
                        <form:input type="password" path="passwordConfirm" class="form-control"
                                    placeholder="Confirm your password">
                        </form:input>
                        <form:errors path="passwordConfirm">
                        </form:errors>
                    </div>
                </spring:bind>
                <button class="btn btn-lg btn-primary btn-block" type="submit">Submit</button>
            </form:form>
        </div>
    
    
    
    
        <script src="${contextPath}/resources/js/jquery.min.js"></script>
        <script src="${contextPath}/resources/js/bootstrap.min.js"></script>
      </body>
    </html>

    welcome.jsp


    codice:
    <%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <c:set var="contextPath" value="${pageContext.request.contextPath}"/>
    
    
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="utf-8">
        <title>Create an account</title>
        <link href="${contextPath}/resources/css/bootstrap.min.css" rel="stylesheet">
    </head>
    <body>
      <div class="container">
        <c:if test="${pageContext.request.userPrincipal.name != null}">
            <form id="logoutForm" method="POST" action="${contextPath}/logout">
                <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>
            </form>
    
    
            <h2>Welcome ${pageContext.request.userPrincipal.name} | <a onclick="document.forms['logoutForm'].submit()">Logout</a></h2>
        </c:if>
      </div>
      <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
      <script src="${contextPath}/resources/js/bootstrap.min.js"></script>
    </body>
    </html>

    login.jsp


    codice:
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
    <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
    <c:set var="contextPath" value="${pageContext.request.contextPath}"/>
    
    
    <!DOCTYPE html>
    <html lang="en">
      <head>
          <meta charset="utf-8">
          <title>Log in with your account</title>
          <link href="${contextPath}/resources/css/bootstrap.min.css" rel="stylesheet">
          <link href="${contextPath}/resources/css/common.css" rel="stylesheet">
      </head>
      <body>
        <div class="container">
          <form method="POST" action="${contextPath}/login" class="form-signin">
            <h2 class="form-heading">Log in</h2>
            <div class="form-group ${error != null ? 'has-error' : ''}">
                <span>${message}</span>
                <input name="username" type="text" class="form-control" placeholder="Username"
                       autofocus="true"/>
                <input name="password" type="password" class="form-control" placeholder="Password"/>
                <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>
                <button class="btn btn-lg btn-primary btn-block" type="submit">Log In</button>
                <h4 class="text-center"><a href="${contextPath}/registration">Create an account</a></h4>
            </div>
          </form>
        </div>
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
        <script src="${contextPath}/resources/js/bootstrap.min.js"></script>
      </body>
    </html>

    Il codice che non mi è chiaro è il seguente:


    codice:
    <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>

    Non capisco perché il _csrf.token varia continuamente:


    codice:
    <input type="hidden" name="_csrf" value="ad0ba317-4737-4e08-9bbe-a6785f980db3"/>
    <input type="hidden" name="_csrf" value="c91f04b5-b0e9-4ecc-a343-f4168fe0ea67"/>
    <input type="hidden" name="_csrf" value="418e1a6f-e268-40b7-9faa-48f57b42bae6"/>
    <input type="hidden" name="_csrf" value="e4595bb1-a34a-43c9-bc99-8bcd710c30cb"/>

    Da cosa leggo qui:
    https://giuseppetoto.it/json-web-tok...e-ee7b481d8b27
    il token sembra essere un codice costante e non capisco perché oltre ad avere una forma diversa rispetto a quella standard varia continuamente in quel modo ad ogni cambio pagina.
    E' possibile che il PAYLOAD contenga il tempo in millisecondi in cui l'utente clicca sul form? Se si perché non c'è un tag html che cattura questa informazione?
    Altra soluzione è che per produrre il token si usi una firma che cambi continuamente nel tempo e che la validazione del token possa essere fatta anche con una password diversa rispetto a quella usata per produrre il token.
    Ho letto tutto il codice ma non trovo alcun riferimento alla classe responsabile di questo tag.
    Più pratica in futuro...

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da giannino1995 Visualizza il messaggio
    codice:
    <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>
    Non capisco perché il _csrf.token varia continuamente:
    giannino, provo a risponderti io, sebbene ultimamente abbia davvero poco tempo (per ora .. mi spiace). Tutta la questione riguarda, chiaramente, la security e in modo specifico Spring Security (che è comunque tirato dentro dal artifact spring-boot-starter-security in Spring Boot).

    Il CSRF funziona proprio così, è giusto che il token vari ogni volta.

    https://docs.spring.io/spring-securi...-token-pattern:
    [...] You will notice that we added the _csrf parameter with a random value. Now the evil website will not be able to guess the correct value for the _csrf parameter [...]

    Questo impedisce ad un sito "malevolo" di fornirti un link ("valido") su cui cliccare per fare operazioni "maliziose" (in senso negativo) su un altro sito. Solo il sito originale "sa" quale è quel token e quindi può validare e consentire la richiesta.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.