2014-12-11 21 views
7

In javax.faces.webapp.FacesServlet docs, si è detto,Attenzione: JACC: Per il xxx modello URL, tutti tranne i seguenti metodi sono stati scoperti: POST, GET

metodi HTTP consentiti

La specifica JSF richiede solo l'uso dei metodi GET e POST http . Se la tua applicazione web non richiede altri metodi http , come PUT e DELETE, ti preghiamo di prendere in considerazione la possibilità di limitare i metodi HTTP consentiti utilizzando gli elementi <http-method> e <http-method-omission>. Per ulteriori informazioni sull'uso di questi elementi, consultare la sezione Sicurezza del servlet Java .


La mia applicazione infatti non dipende da altri metodi HTTP (tranne GET e POST). Pertanto, sto cercando di utilizzare <http-method> (o <http-method-omission>) per escludere tutti i metodi tranne GET e POST.

In web.xml, JAAS I vincoli di sicurezza servlet sono configurati come segue.

<security-constraint> 
    <display-name>AdminConstraint</display-name> 
    <web-resource-collection> 
     <web-resource-name>ROLE_ADMIN</web-resource-name> 
     <description/> 
     <url-pattern>/admin_side/*</url-pattern> 
     <http-method>GET</http-method> 
     <http-method>POST</http-method> 
    </web-resource-collection> 
    <auth-constraint> 
     <description/> 
     <role-name>ROLE_ADMIN</role-name> 
    </auth-constraint> 
    <user-data-constraint> 
     <description/> 
     <transport-guarantee>CONFIDENTIAL</transport-guarantee> 
    </user-data-constraint> 
</security-constraint> 

<security-constraint> 
    <display-name>UserConstraint</display-name> 
    <web-resource-collection> 
     <web-resource-name>ROLE_USER</web-resource-name> 
     <description/> 
     <url-pattern>/user_side/*</url-pattern> 
     <http-method>GET</http-method> 
     <http-method>POST</http-method> 
    </web-resource-collection> 
    <auth-constraint> 
     <description/> 
     <role-name>ROLE_USER</role-name> 
    </auth-constraint> 
    <user-data-constraint> 
     <description/> 
     <transport-guarantee>CONFIDENTIAL</transport-guarantee> 
    </user-data-constraint> 
</security-constraint> 

L'utilizzo di questi elementi,

<http-method>GET</http-method> 
<http-method>POST</http-method> 

mi aspetto che tutti gli altri metodi HTTP non sono consentite.


Il server GlassFish 4.1 tuttavia, registra i seguenti avvisi sul terminale server.

Attenzione: JACC: Per il pattern URL /user_side/*, tutti tranne i seguenti metodi sono stati scoperti: POST, GET

Attenzione: JACC: Per il pattern URL /admin_side/*, tutti tranne i seguenti metodi sono stati scoperti : POST, GET

Che cosa significa?


Inoltre, invece di farlo in tutti <security-constraint> elementi, questo può essere configurato globalmente, in modo che possa essere applicato a tutte le risorse in un'applicazione e che tutti tranne GET e POST richieste HTTP può essere omesso cioè applicata globalmente un'applicazione - forse utilizzando un altro modello di URL specializzato specializzato come /*?


C'è un esempio here.

<security-constraint> 
    <display-name>WebConstraint</display-name> 

    <web-resource-collection> 
     <web-resource-name>test</web-resource-name> 
     <description/> 
     <url-pattern>/test.jsp</url-pattern> 
     <http-method>POST</http-method> 
     <http-method>HEAD</http-method> 
     <http-method>PUT</http-method> 
     <http-method>OPTIONS</http-method> 
     <http-method>TRACE</http-method> 
     <http-method>DELETE</http-method> 
    </web-resource-collection> 

    <auth-constraint> 
     <description/> 
     <role-name>dev</role-name> 
    </auth-constraint> 
</security-constraint> 

l'elemento sopra indica che la risorsa a cui fa riferimento l'url modello/test.jsp, quando si accede da tutti i metodi http tranne GET, deve essere limitato per essere visualizzato solo dagli utenti autentificati appartenenti al ruolo dev. Si noti che il vincolo di sicurezza non si applica per il metodo http GET, ma solo per gli altri metodi (POST, HEAD, PUT, ecc.).

Ho trovato l'ultima frase nel testo forte che confonde. Vuol dire che l'utilizzo di una richiesta GET, risorse elencate nel dato url-pattern sono anche raggiungibile con utenti anonimi perché significa dire: "la sicurezza vincolo non si applica per il http metodo GET "?

+2

> 'vincoli di sicurezza JAAS sono configurati come follows.' - quelli non sono vincoli di sicurezza JAAS, ma vincoli di sicurezza Servlet. –

+0

Proprio su .... !!! – Tiny

risposta

8

Che cosa significa?

Significa che tutti i metodi tranne GET e POST sono scoperti, significa non protetti. Tutti possono accedere al pattern URL /user_side/* con metodi come PUT e HEAD senza autenticazione.

Per proteggere gli altri metodi aggiungere il seguente:

<security-constraint> 
    <web-resource-collection> 
     <web-resource-name>protected</web-resource-name> 
     <url-pattern>/user_side/*</url-pattern> 
     <http-method-omission>GET</http-method-omission> 
     <http-method-omission>POST</http-method-omission> 
    </web-resource-collection> 
    <auth-constraint/> 
</security-constraint> 

Se si sta utilizzando Servlet 3.1 è anche possibile utilizzare il tag più breve:

<deny-uncovered-http-methods/> 

Inoltre, invece di farlo in tutta elementi, può essere configurato globalmente in modo che possa essere applicato a tutte le risorse in un'applicazione e che tutte tranne le richieste HTTP GET e POST possono essere om è applicato a livello globale a un'applicazione, forse utilizzando un modello di url più generalizzato come/*?

Sì, questo è possibile. È possibile utilizzare l'url-pattern / per includere tutte le sottocartelle.

Ho trovato l'ultima frase nel testo forte che confonde. Significa che utilizzando una richiesta GET, le risorse elencate nel modello di URL specificato possono essere accessibili da utenti anonimi, , perché significa "il vincolo di sicurezza non si applica per il metodo http GET"?

Hai ragione, significa che l'utente anonimo può accedere al modello di URL specificato con il metodo GET. Tutti gli altri metodi sono protetti.

Consulta anche:

+0

Ho usato '', dal momento che sono su Servlet 3.1. – Tiny