2015-12-16 33 views
3

我正在阅读这本书Essential PHP Security by Chris Shiflett,我在URL中使用了令牌(Session Hijacking)。书上说的“更好的办法是传播URL中的令牌 - 东西,可以被认为是识别的第二形式URL标记有效吗?

<?php 

$token = md5(uniqid(rand(),TRUE)); 

$url = array(); 
$html = array(); 

$url ['token'] = rawurlencode($token); 
$html['token'] = htmlentities($url['token'], ENT_QUOTES, 'UTF-8'); 


?> 

<a href="index.php?token=<?php echo $html['token'];?>">Click Here</a> 

一旦我点击‘点击这里’时, URL现在有一个令牌给它

http://localhost/urltoken/index.php?token=55420e8dce399820ecf4dfa08cf0d5a0 

我不明白的是,服务器如何知道此令牌是否有效。

+3

您最终可以将令牌放入$ _SESSION []中,然后将其与'url'中存在的令牌进行比较。 – Franco

+0

@Franco,请你举个例子。 – Manish

+0

令牌可以存储在数据库中。 – Barmar

回答

2

将令牌保存在具有引用用户表和任何其他与应用程序相关的表的外键的数据库表中。当用户转到token参数的链接时,该脚本将在此表中查找该令牌。如果找不到,则令牌无效。

这是一个常见的例子,当您在网站上创建一个帐户时,它会向您发送一封电子邮件来验证帐户。电子邮件中的链接将包含一个引用该帐户的令牌,当您单击该帐户时,该脚本会将该帐户标记为已验证。密码重置电子邮件的工作类似。

+0

我也有过这个想法。感谢您的确认。 – Manish