Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 数据库还是会话?在哪里存放代币_Php_Token - Fatal编程技术网

Php 数据库还是会话?在哪里存放代币

Php 数据库还是会话?在哪里存放代币,php,token,Php,Token,令牌是防止csrf攻击的绝佳工具 对于用户发出的每个请求,您的系统必须生成一个唯一的令牌并将其存储在某处 下次客户端请求执行某些操作时,系统将验证令牌是否存在,以及它是否仍然有效 如果我们将令牌存储在会话中,那么会话将变得太大,这将消耗大量内存,因为CPU在响应请求时将整个会话加载到ram中,例如,如果CPU为1Gb,1000个用户每个会话为1Mb,CPU将无法处理任何事情,这可能是典型的ddos攻击(请求越来越多的令牌,知道它们存储在会话中) 另一方面,在数据库中存储令牌有其自身的弱点 您使用

令牌是防止csrf攻击的绝佳工具

对于用户发出的每个请求,您的系统必须生成一个唯一的令牌并将其存储在某处

下次客户端请求执行某些操作时,系统将验证令牌是否存在,以及它是否仍然有效

如果我们将令牌存储在会话中,那么会话将变得太大,这将消耗大量内存,因为CPU在响应请求时将整个会话加载到ram中,例如,如果CPU为1Gb,1000个用户每个会话为1Mb,CPU将无法处理任何事情,这可能是典型的ddos攻击(请求越来越多的令牌,知道它们存储在会话中)

另一方面,在数据库中存储令牌有其自身的弱点


您使用哪种方法存储令牌?

使用会话,每个会话1MB的容量在我看来相当高。由于PHP的会话处理程序可以切换到不同的后端,因此您可以灵活地将它们存储在磁盘/memcached/mysql上。

每个会话允许一个用户一个令牌的最大数量是多少,请参阅Sure、 尽管您应该让它们过期或定期重新生成,但请确保测试无效令牌不会导致用户的表单状态丢失。