从http://fullthrottledevelopment.com/php-nonce-library#download,有一个PHP nonce库,但有一些我不明白的东西.第一个是它提醒我们为它设置一个值,FT_NONCE_UNIQUE_KEY
但它从不在它的任何函数中使用它.
第二件事是,当我调用该ft_nonce_create_query_string
函数时,等待几秒钟,然后使用相同的参数再次调用它,两个调用都返回相同的值.这很奇怪,我真的不明白如何确保它生成的每个nonce,nonce将在指定的持续时间内有效FT_NONCE_DURATION
.
但如果我在第二次通话之前等待更长时间,他们将返回不同的价值.我在这里粘贴了代码,以便您可以尝试直接运行它.
为什么会这样?它应该如何工作?
. */ define( 'FT_NONCE_UNIQUE_KEY' , '' ); define( 'FT_NONCE_DURATION' , 300 ); // 300 makes link or form good for 5 minutes from time of generation define( 'FT_NONCE_KEY' , '_nonce' ); // This method creates a key / value pair for a url string function ft_nonce_create_query_string( $action = '' , $user = '' ){ return FT_NONCE_KEY."=".ft_nonce_create( $action , $user ); } // This method creates an nonce for a form field function ft_nonce_create_form_input( $action = '' , $user='' ){ echo ""; } // This method creates an nonce. It should be called by one of the previous two functions. function ft_nonce_create( $action = '' , $user='' ){ return substr( ft_nonce_generate_hash( $action . $user ), -12, 10); } // This method validates an nonce function ft_nonce_is_valid( $nonce , $action = '' , $user='' ){ // Nonce generated 0-12 hours ago if ( substr(ft_nonce_generate_hash( $action . $user ), -12, 10) == $nonce ){ return true; } return false; } // This method generates the nonce timestamp function ft_nonce_generate_hash( $action='' , $user='' ){ $i = ceil( time() / ( FT_NONCE_DURATION / 2 ) ); return md5( $i . $action . $user . $action ); } if ( FT_NONCE_UNIQUE_KEY == '' ){ die( 'You must enter a unique key on line 2 of ft_nonce_lib.php to use this library.'); } ?>
rook.. 17
哇,不要使用这个图书馆.我将在此帖后立即将此报告为漏洞.Nonce是一个只使用一次的值,这个库确实提供了这个值.但是,作者试图阻止跨站请求伪造(XSRF).为了防止攻击者伪造消息,需要有一个攻击者无法预测的秘密值.为此,您需要一个密码安全的随机数生成器或CSRPING.这个库构建的Nonce是非常可预测的,并且可以使用简单的javascript轻松强制执行.
哇,不要使用这个图书馆.我将在此帖后立即将此报告为漏洞.Nonce是一个只使用一次的值,这个库确实提供了这个值.但是,作者试图阻止跨站请求伪造(XSRF).为了防止攻击者伪造消息,需要有一个攻击者无法预测的秘密值.为此,您需要一个密码安全的随机数生成器或CSRPING.这个库构建的Nonce是非常可预测的,并且可以使用简单的javascript轻松强制执行.