struts-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Craig R. McClanahan" <craig...@apache.org>
Subject Re: Going from https on /member.do, back to http on index.jsp?
Date Sat, 27 Sep 2003 01:38:23 GMT
Jayaraman Dorai wrote:

>  
>
>>-----Original Message-----
>>From: Craig R. McClanahan [mailto:craigmcc@apache.org]
>>Sent: Thursday, September 25, 2003 10:55 PM
>>To: Struts Users Mailing List
>>Subject: Re: Going from https on /member.do, back to http on 
>>index.jsp?
>>
>>
>>Max Cooper wrote:
>>
>>    
>>
>>>Creating an index.do is one option. If it is not marked as 
>>>      
>>>
>>secure, sslext
>>    
>>
>>>will write an absolute URL back to http:// for it. Many Struts users
>>>advocate that all requests should be served by Actions, even 
>>>      
>>>
>>if the action
>>    
>>
>>>merely forwards to a JSP.
>>> 
>>>
>>>      
>>>
>>I actually have a more important concern about doing this -- exposing 
>>information to people who can listen in on the packets that 
>>go back and 
>>forth.
>>
>>Many people would like, for example, to have the login form 
>>be secure so 
>>that your password is not sent across the wire encrypted, but then go 
>>back to http for the rest of the session for the better performance.  
>>The seemingly ideal solution is to have the destination of the login 
>>submit require SSL, and then switch back.  Using a 
>><user-transport-guarantee> security constraint, you can even let the 
>>container worry about the http->https transition for you.  
>>Or, you can 
>>use things like SSLext that is nicely integrated into Struts.
>>
>>However, the servlet spec offers no help in switching back to http, 
>>because it is not a recommended practice.  Why?  Consider the 
>>fact that 
>>you now trust subsequent transactions from the same user, and are 
>>typically using the session that was established earlier (whether the 
>>session was originally created in http or https turns out not to 
>>matter).  But the session id is no longer encrypted (it's either in a 
>>cookie or in rewritten URLs), so it can be easily forged by 
>>anyone with 
>>a network snooper between you and the server.  How do you 
>>guarantee that 
>>an after-login request on that session is not being sent by 
>>someone who 
>>is forging the session id because they snooped it?
>>
>>I'm a conservative on security issues -- if I have an app 
>>that needs SSL 
>>sometimes, I arrange things to never accept a non-SSL request on the 
>>same session again, once I've switched to SSL (easy to do 
>>with a Filter, 
>>for example).  If you're concerned enough to protect the 
>>password, you 
>>should be concerned enough to pay the CPU overhead for SSL 
>>the remainder 
>>of the session.  Otherwise, it's likely that encrypting the 
>>login form 
>>will just give you a false sense of security.
>>
>>    
>>
>>>I think you can also use the secure attribute in the sslext 
>>>      
>>>
>>tags to indicate
>>    
>>
>>>whether the target of the link or form should be accessed 
>>>      
>>>
>>securely. In this
>>    
>>
>>>case, you would add secure="false" to the sslext:link tag 
>>>      
>>>
>>that goes back to
>>    
>>
>>>/index.jsp.
>>>
>>>-Max
>>> 
>>>
>>>      
>>>
>>Craig
>>    
>>
>
>Will it be useful for cases like where credit card information are sent through SSL and
hence are secured. They might snoop the session, if it is switched back to http, but still
the credit card information is not. Similarly, snooper might steal the sessionId, but the
password is not stolen and is secured. Is that not better than nothing? Am I missing something?
>
The credit card information is not going back and forth across the wire 
unencrypted, but your session identifier is (for servlet based apps, 
it's normally in a cookie or encoded into the URLs).

In at least some ecommerce apps I'm familiar with, the credit card 
number *is* stored in an HttpSession (or something analogous for 
non-servlet technologies), so that the customer can go back and buy some 
more stuff, and do an expedited checkout the second time.  If I know 
that your app works that way, I can snoop the wire until the user goes 
to https (which I can't read, but can see happening) and then back to 
http (which I can see).  Now, I've got the cleartext version of the 
session id, assume that the user has gone through the checkout, and can 
submit false additional purchase transactions to your app based on that 
session id, without having to resubmit a credit card number.

Protecting just the password, but not the remainder of the current 
session, is *not* better than nothing -- IMHO it is substantially worse 
because it gives you a *false* sense of security.

Craig


Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message