我正在尝试在我的表单中添加一个令牌以增强安全性(即CSRF)。到目前为止,我发现的所有内容(在Stackoverflow和许多其他网站上)是要使用的建议:
$_SESSION['token'] = bin2hex(random_bytes(32));
我的问题很简单,为什么不只是使用:
$_SESSION['token'] = random_bytes(32);
为什么将其转换为十六进制表示?
谢谢
随机字节在您的表单字段中的令牌时不会轻易传递。您需要一些可预测的字符集。单个字节的随机流几乎肯定会打破任何端客户编码(UTF-8,ISO-8859-1,Win1252,big5等)。
另一方面,BIN2HEX编码的字符始终是纯ASCII字符串,因此它们在客户端上的任何编码中都是安全的。