Hi Marty,

I have developed a complet request and security system for our
applications.

Most of our clients are B2B environments and most of our applica-
tions reflects similar functions in the ERP system.

We have 3 type of users ...

1. internal users - not bound to any accounts in the ERP system
2. external users - bound to one or several accounts in the ERP system
3. administrators of external users - bound to one or several accounts
   in the ERP system

The administrators og external users is of course because external users
are our client's customers or suppliers and they have several employees
that changes over time so they have to manage their own users and what
their users may or may not do, them selves.

If there is one thing our clients management fears is that one of their
customers can sneak into another customers account.

So therefore, I had to make sure that every request send from the browser
is impossible to alter.

The way to do this is to generate a unique request id for every link,
buttom etc. and then store these requests whith the parameters nessesary
to do the processing ...

My Requestfile looks like:

Web Request            1198689696151117050106602363
Web Cgi-Function       wbdl04
Web Session            0630043376151127050106602363
Web Request IP Adresse 80.62.224.76
Web Program Parameters 00000060022DM2006010000
Web Time Posted        2006-01-05-15.11.27.636240

In the HTML the request looks like ...

wbdl04.pgm?ses=0630043376151127050106602363&req=
1198689696151117050106602363

the cgi-program wbdl04 will process customer(DM) accountnumber 60022, year
2006 period 01
for the user bound to the session 0630043376151127050106602363.

The session number is generated at log in, and will be active as long as
there is
activity within a given timeframe. At log out every request is deleted and
gone
forever. This goes for PDF's and other files (even javascripts that may
access vital
information) the user have accessed during the session, they only "live" in
the apache
directives as temporary files bound to the session and all have
"unbreakable" nonsence
filenames.

Both session and requestnumber are constructed by a number from the random
function,
the job-number from the cgiprogram that generated the request and a time
instruction.

Furthermore I check that the user still have permission to the account, the
user still
is active and the user still have permission to run the cgi-program.

If you try to alter the request, the cgi-program name or the session in the
HTML
you are OUT and your IP adresse will be logged in QSYSOPR message queue!

Now try to figure another active users combination out.

The reason I do not check the IP address is that it can change during a
session so
it is only informational, but can be user for a reverse DNS lookup if
anybody
tries to violate the system.

Because I use this method not only when nessecary but all over and the RPG
code is
stored in copy modules and other programs the coding is quite simple ...

Every cgi-program starts checking with:

 * Call Sequrity And Request Handler
c                   eval      ZZWCgi      = 'wbdl04'
c                   exsr      RHdlr_Init

To Create a request the code is:

 * Create New Request
c                   eval      ZZrhdl      = '*ADD'
c                   eval      ZZwcgi      = 'wbdl04'
c                   eval      ZZwpar      = ZZacno
c                                         + ZZaccd
c                                         + ZZyear
c                                         + ZZperiod
c                   exsr      Rhdlr_Exe
c                   eval      Request     = 'wbdl04.pgm'
c                                           + %trim('?')
c                                           + %trim('ses=')
c                                           + %trim(ZZWSes)
c                                           + %trim('&')
c                                           + %trim('req=')
c                                           + %trim(ZZWReq)

And as a bonus I end every program with a call to the Sequrity
and Request Handler again. This will log the request and processing
time for tracking and statistical purposes in another file.

 * Output html to browser
c                   callp     wrtsection('*fini')
 * Call Sequrity And Request Handler
c                   exsr      RHdlr_End
 * Quit
c                   return

This is of course only "the top of the iceberg" and what the cgi-programmer
has to do. There is a lot of files, maintenance and controle programs
etc.etc.
benidth.

But it shoud give you a clue to how to create a security system that not
only
controls the access to the cgi-programs but also to specific data stored in
common files.

rgds
Henrik






                                                                           
             "itpweb1"                                                     
             <[EMAIL PROTECTED]                                             
             da.com>                                                    To 
             Sent by:                  [email protected]        
             [EMAIL PROTECTED]                                          cc 
             ogroups.com                                                   
                                                                   Subject 
                                       [Easy400Group] user validation and  
             05-01-2006 14:24          page security, but do not want to   
                                       create user profiles                
                                                                           
             Please respond to                                             
             [EMAIL PROTECTED]                                             
                ogroups.com                                                
                                                                           
                                                                           




I have a question for CGIDEV2 developers who have developed (or
thought about) applications with a form of user validation and page
security, but do create a user profile for each unique user.

That is to say, they do not want to use AS400(or NT/UNIX)
userID/password (with or without authorization lists) because there
are potentially too many users or have other business reason(s) not to
do this.

My question is: what strategy of validation/page security are you
using? What are advantages/disadvantages of your method and is it
suitable for the WWW as well as a controlled intranet.

** Examples:
Validate against a PF list of user/passwords and pass a "user" token
variable from page to page, validate against IP address or other
environment variable, use the same password for everybody, create and
store a temporary cookie on the client which is verified on each page,
use CGIDEV2 persistence...

Also is "too many users" a good excuse for not using as/400 user
profiles/auth lists to validate users?

marty






Yahoo! Groups Links










 
Yahoo! Groups Links

<*> To visit your group on the web, go to:
    http://groups.yahoo.com/group/Easy400Group/

<*> To unsubscribe from this group, send an email to:
    [EMAIL PROTECTED]

<*> Your use of Yahoo! Groups is subject to:
    http://docs.yahoo.com/info/terms/
 


Reply via email to