表单安全令牌(CSRF) - 为什么在bin2hex中使用bin2hex(random_bytes(32))

时间:2017-09-19 15:28:42

标签: php forms security token csrf

我正在尝试在我的表单中添加一个令牌以加强安全性(即CSRF)。我到目前为止所发现的(在stackoverflow和许多其他网站上)是建议使用:

$_SESSION['token'] = bin2hex(random_bytes(32));

我的问题很简单,为什么不直接使用:

$_SESSION['token'] = random_bytes(32);

为什么要将其转换为十六进制表示?

谢谢

1 个答案:

答案 0 :(得分:4)

随机字节不会轻易作为表单字段中的标记传递。你需要一些可预测的字符集。只是随机的字节流几乎肯定会破坏表单使用的任何客户端编码(utf-8,iso-8859-1,win1252,big5等)。

另一方面,bin2hex编码的字符将始终是纯ASCII字符串,因此它们在客户端的任何编码中都是安全的。