'admin'); check('string passes through', requestString('user'), 'admin'); // The empty string is still a string: callers decide what empty means, and the // login paths already test for it with empty(). $_REQUEST = array('user' => ''); check('empty string is kept', requestString('user'), ''); // A parameter that was never sent. $_REQUEST = array(); check('missing parameter is null', requestString('user'), null); // The shape the user edit form posts. This is the reported crash. $_REQUEST = array('user' => array('Username' => 'admin', 'Password' => 'secret')); check('form array is refused', requestString('user'), null); // The shape an attacker sends, on the paths that need no session. $_REQUEST = array('username' => array('admin'), 'password' => array('x')); check('username array is refused', requestString('username'), null); check('password array is refused', requestString('password'), null); // An auth hash is used to look up a user and compared against the session copy. $_REQUEST = array('auth' => array('deadbeef')); check('auth array is refused', requestString('auth'), null); // Anything else PHP can put in a request parameter. $_REQUEST = array('user' => array(array('nested'))); check('nested array is refused', requestString('user'), null); echo "\n$passes passed, $failures failed\n"; exit($failures ? 1 : 0);