A basic problem with most web development is that people are building security into their applications. It should be handled outside of the application. You can have your application work in conjunction with an external security mechanism for more granular control but I the security mechanism should be external to the application for the most part.
 
You could use for example one of the authorization and access modules for apache. Then when you create your application you can create specific *protected* URLs for say an admin area. Then only the person that is logged into the security mechanism with the proper *authorization*  can access that URL (or one that contains that URL and parameters being passed to it in the URL). Security needs to be considered when building the applications but trying to build it into the application is a big mistake.
 
A big reason to not build it into the app is that as your security requirements change you invariably have to make code changes to your application. By using an external mechanism you just change the rules governing the authorization and access control usually without any code changes to your app.
 
 
 
 
----- Original Message -----
From: Jeff Trent
Sent: Monday, May 07, 2001 6:37 PM
Subject: Potential Security Flaw in Struts MVC

I may be wrong about this (only been working w/ Struts for a week now).  But I do see a potential security flaw in struts that I would like to hear from others regarding.
 
Consider a simple set of struts classes that represent a user in a system. You would probably have classes that look something like this:
    User                (the model representing the user)
    UserForm        (an enrollment form for a new user)
    UserAction        (Saves the UserForm information to db, etc)
   
The User class would have accessors and modifiers like getFirstName(), setFirstName(), getAdministrativeUserFlag(), setAdministrativeUserFlag(), etc.  The basic implementation of the UserForm is to take the UI form data, introspect the beans, and call the correct modifier of the UserForm bean based on the fields contained within the UI submission/form.  A developer of course would not expose the "Administrative User Flag" option on the UI for enrollment (that would be found possibly in some other administrative-level module).  However, if someone is familiar with the db schema and the naming convention the developer used, that user could subvert the application by writing his own version of the UI which contains an "Administrative User Flag" field (or any other field for that matter) and the basic form processing in Struts will kindly honor the request and set the "Administrative Flag" on the user.  Unless, of course, the developer makes special provisions to prevent this behavior.  However, its not entirely obvious to the struts user (in my opinion) that this is even a concern.  Am I making sense here?
 
- jeff
 

Reply via email to