|  | Posted by Jochem Maas on 06/05/05 15:18 
JamesBenson wrote:> Hello all, Ive been working with PHP for my websites for a few months,
 > just attempted to build my own class, after reading all this stuff about
 >  automated robots and XSS attacks etc decided to step up security a bit,
 > my result is an attempt to create a class for using the token method
 > within web forms, not even sure whether its the real thing but my work
 > is below, some advice on whether its ok or what needs improving would be
 > appreciated, thanks.
 >
 >
 > <?php
 > // PHP 4.3.11
 >
 >
 > class SecretToken {
 >
 >     var $_returnCode;
 >
 >
 >     function GenerateToken() {
 >      if(!isset($_SESSION['token'])) {
 >       session_regenerate_id();
 
 I wonder if regenerating the session id here is useful.
 I understand doing it on log off/on but whats the connection
 with creating a 'submit token'?
 
 >       $new_token = md5(uniqid(rand(), true));
 >       $_SESSION['token'] = $new_token;
 >      }
 >     }
 >
 >
 >     function VerifyToken($post) {
 >      if(isset($_SESSION['token'])) {
 >       $saved_token = ($_SESSION['token']);
 >      }
 
 I think you should be unsetting $_SESSION['token']
 round about here in order to make sure that each
 submit a user does requires a different/new token.
 
 I am assuming you have implemented this class in order
 to trap double submits (as well as increasing the
 security of you submits somewhat).
 
 at the moment the user gets a single token for
 ALL submits he does within a given session.
 
 
 
 >      if($post == $saved_token):
 >       $this->_returnCode = 1;
 >       unset($_SESSION['token']);
 >      else:
 >       $this->_returnCode = 0;
 >      endif;
 >     }
 >
 >
 >     function ReturnCode() {
 > ## Result will be 1 for success or 0 for fail
 >       return $this->_returnCode;
 >     }
 >
 
 you can probably drop the ReturnCode() function
 and just have the 1/0 returned directly from VerifyToken() e.g:
 
 if (SecretToken::VerifyToken( $myTok )) {
 // lets do a submit
 } else {
 // evil hacker, set the dogs on him.
 }
 
 >
 > // end class definition
 > }
 > ?>
 >
 >
 > Basically in my web form I call GenerateToken firstly, then when the
 > forms been submitted I then call VerifyToken and finally check return
 > codes using a switch statement, seems to work,
 
 sounds fine to me.
 rgds,
 jochem
 
 >
 >
 > TIA
 > James Benson
 >
  Navigation: [Reply to this message] |