Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1

    [JAVA] Progetto scritto in Spring Boot e quesiti sulla sicurezza

    Ho scaricato e caricato sul mio IDE questo progetto:

    https://hellokoding.com/registration...-jpa-hsql-jsp/
    https://github.com/hellokoding/hello...stration-login

    Vorrei comprendere bene il meccanismo di funzionamento dei vari codici?
    Se scrivo qui mi aiutate?
    Più pratica in futuro...

  2. #2
    Per esempio non capisco perché il token generato da questo codice:
    codice:
    <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>
    cambia 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"/>
    Ho letto qui:
    https://giuseppetoto.it/json-web-tok...e-ee7b481d8b27
    E' possibile che l'HEADER contenga un algoritmo che funzioni diversamente dall'hash 256 e che il token possa essere verificato e rigenerato partendo da una password dinamica che cambia nel tempo?
    Più pratica in futuro...

  3. #3
    Su questo forum non c'è più nessuno, che peccato. Anni fa c'era tantissima gente.
    Più pratica in futuro...

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,255
    Quote Originariamente inviata da giannino1995 Visualizza il messaggio
    Su questo forum non c'è più nessuno, che peccato. Anni fa c'era tantissima gente.
    Probabilmente prima si facevano piccole semplici domande, adesso si pretende il tutoraggio fine a se stesso per argomenti complessi... la gente è impegnata..

    Se chiedi qualcosa che ti blocca il lavoro forse puoi avere subito un contatto ma se chiedi un docente riservato che ti spieghi del codice complesso solo per studiarlo in una interminabile discussione forse il forum non è lo strumento adatto. Assumi un docente e prendi lezioni.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Non credo sia per questo motivo, voi siete tutti professionisti di altissimo livello, siete laureati in ingegneria informatica, avete certificazioni di livello e lavorare con Spring da quando io imparavo le basi dell'HTML. Per voi comprendere questo script e come bere un bicchiere d'acqua.
    Più pratica in futuro...

  6. #6
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    23,841
    Quote Originariamente inviata da giannino1995 Visualizza il messaggio
    Per voi comprendere questo script e come bere un bicchiere d'acqua.
    Quando si dice "la gente è impegnata" non ci si riferisce al tempo della comprensione, ma a quello necessario alla spiegazione.

    Se si tratta di affrontare un problema specifico, che può essere risolto con un suggerimento rivolto all'utente che ha aperto la discussione affinché possa approfondire autonomamente e risolvere quindi il problema, è un conto.

    Disquisire del codice di un progetto di terze parti, da leggere e analizzare, per rispondere poi a delle domande generali, è invece un altro tipo di impegno, e non tutti hanno il tempo per farlo. Preciso: il tempo, non le capacità.

    Il mio consiglio è quello di focalizzare meglio il problema, magari anticipando una contestualizzazione propria e introducendo chi legge alla difficoltà specifica con qualche informazione di contorno già estrapolata, altrimenti sarà difficile darti una mano.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Delphi Succinctly (e-book)

  7. #7
    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...

  8. #8
    alka ci sei ancora?
    Più pratica in futuro...

  9. #9
    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.
    AndreaSenior Java developerSCJP 5 (91%) – SCWCD 5 (94%)
    Il mio nuovo sito-blog italiano sulla programmazione: andbin.it

  10. #10
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,096
    Quello che hai letto in merito al json-web-token non ha nulla a che vedere con ciò che viene usato nel progetto che hai scaricato. Da nessuna parte nel progetto che hai scaricato si fa riferimento al json-web-token.
    La domanda che sorge, quindi, è: "perchè hai pensato che le due cose avessero a che fare l'una con l'altra"?

    Una banalissima ricerca su Google cercando "${_csrf.parameterName}" ti avrebbe portato qui:
    https://www.baeldung.com/spring-security-csrf

    Ciò che viene usato nel progetto che hai scaricato è la Cross-Site Request Forgery Protection (CSRF Protection), che riguarda la protezione da attacchi, che nulla ha a che fare con la json-web-token di cui si parla nell'articolo che hai linkato e che riguarda un meccanismo di autenticazione.

    Non trovi traccia nel codice di questa cosa perchè fa parte di Spring Security, una delle librerie già pronte di Spring.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

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 © 2019 vBulletin Solutions, Inc. All rights reserved.