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