我可能误解了你的问题,但我所理解的是你需要:
-一种身份验证用户的方式
-在首次加载时传递他们想要查看的页面和他们的电子邮件地址。
这的基础是简单的对称密钥认证 - 后面的所有内容都是将其混合在一起的方法。
将您的数据组合在一起(电子邮件地址,着陆页),然后使用
强密钥进行哈希处理。
在另一端进行解密,完成。
如果您的密码(密钥)很难猜测,此方法是安全的 - 以下是一种难以破解的方法。
身份验证
有几种方法可以做到这一点 - 如果您可以访问他们的服务器(或者那里有人可以为您插入一些代码),则以下内容将起作用。
创建一个执行以下操作的php脚本。
我已经过度设计了这个示例,以演示使哈希字符串更难破解的多种方法 - 您可以选择自己的方式!
(伪代码)
$serverTimeStamp = timestamp;
$additionalNoise = "THEcat1sch33sy";
$time = $serverTimeStamp . "XAB"; <- needs to be a random code as delimeter.
$data = $additionalNoise + "email@email.com";
$salt = "wh4tW0u1dB4tm4nD0?" + $serverTimeStamp;
需要使用可逆哈希算法对$password进行哈希处理(可以从mcrypt开始学习)。
$encrypted = mcrypt of $data and $salt ($salt is shared key);
$authenticationcode = $time . $encrypted;
这将为您提供一个带时间戳的强随机字符串,其前面是XAB,然后是一个随机散列字符串。
然后将其传递给您的用户验证脚本。
<iframe src="http://yoursite/validate/COMPLETELYRANDOMSTRING"></iframe>
接下来您需要反向处理。
重要提示(修正)- 我完全忘记了一个重要的要素 - 将发送给您的随机字符串存储在数据库中。这些字符串是“一次性”的 - 如果您再次收到相同的字符串,则会被视为攻击。
这一切都由时间戳在盐中并位于字符串开头来实现 - 可以在一天内使用完全不同的字符串发送相同的数据1000次。
Get random string.
get time-stamp from front of random string -> using regex / index of looking for numbers and then XAB (hence the random XAB string - it is just a separator)
$timeStamp = "10200192XAB";
"wh4tW0u1dB4tm4nD0?" <-shared secret key.
$salt (secret key) = "wh4tW0u1dB4tm4nD0?" + $timeStamp;
使用盐进行解密
您将获取以以下内容开头的数据
"THEcat1sch33sy" (your additional noise) (which is also a fixed shared key in effect)
只需删除"THEcat1sch33sy",您就可以得到您的电子邮件地址(然后您需要验证一下,以防万一随机字符串实际上在开头输出"THEcat1sch33sy")。
瞧 - 不是100%,但相信我 - 如果我试图进入您的服务器 - 我不会用这种方式尝试!
密码页面结束
Simply add it to the $data - so you would pass $email + "seperator" + $coursepage.
希望这能有所帮助(并且清晰易懂)。