形成安全令牌(CSRF) - 为什么在BIN2HEX中使用BIN2HEX(Random_bytes(32))



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

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

我的问题很简单,为什么不只是使用:

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

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

谢谢

随机字节在您的表单字段中的令牌时不会轻易传递。您需要一些可预测的字符集。单个字节的随机流几乎肯定会打破任何端客户编码(UTF-8,ISO-8859-1,Win1252,big5等)。

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

最新更新