[英]md5 token in hidden form field
我在不止一个网站上读过这种保护表格的方法:
我添加了一个隐藏字段:
<input type="hidden" name="token" value="<?php echo $token; ?>" />
令牌由以下内容生成:
$token = md5(uniqid(rand(), TRUE));
$_SESSION['token'] = $token;
我知道这个代码几乎不会破坏,因为它的随机性。
我不明白的是:为什么他们将令牌包含在隐藏的表单字段中,可以在html源代码中查看?
然后用户可以保存表单并将有效的md5令牌复制到表单的虚假版本并提交吗?
这旨在防止CSRF 。
关键是不要阻止Alice访问Bob的网站,然后使用令牌做坏事。
这是为了阻止Charles的网站使用JavaScript让Alice的浏览器向Bob的网站提交表单并做坏事(使用Alice的凭据)。 (查尔斯不会有令牌的副本放在表格中)。
这是一种有助于防止跨站请求伪造的策略 。 令牌在HTML源中并不重要,因为它只使用一次。 攻击者必须知道它是什么才能欺骗用户,即使这样,用户也必须首先通过合法手段提出表单。
此技术用于防止跨站点请求伪造攻击 ,其中恶意站点能够在受害者访问恶意站点的准备好的网页时代表受害者伪造真实和合法。 由于受害者的浏览器将发送任何身份验证凭据以及伪造的请求,因此服务器无法区分请求是否是受害者的意图。
一个简单的例子是导致浏览器发送GET请求的<img>
元素,另一个例子是<form>
元素,这些元素是由JavaScript自动生成和发送的,可能导致POST请求。
为了缓解这种威胁,这个随机令牌被用作只为服务器和浏览器所知的秘密:服务器生成随机令牌,将其存储在会话中并在响应中将其发送回浏览器然后发回在随后的请求中。 这样做,恶意网站无法伪造合法请求,因为它不知道随机令牌并且无法获取它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.