向用户返回安全的“获胜代码”

时间:2012-03-04 00:05:14

标签: php jquery authentication encryption encoding

这可能是一个非常基本/介绍性的事情,但让我画一个场景:

假设我正在使用jQuery在我的网站上进行某种迷你测验游戏。用户点击正确的答案,然后会弹出一个窗口,其中包含一个秘密的“获胜者代码”,可以在其他地方兑换。

如何生成获胜者的代码,使其不仅仅出现在HTML中,而且用户无法对其进行逆向工程(至少不需要付出相当大的努力)?

我的意思是,如果我只生成一个包含其用户名和某些附加信息的编码字符串,我知道,那会起作用,对吧?或MD5哈希或其他什么,但我怎么做到这样,赢家的代码本身不会出现在HTML中,只有选择了正确的答案?

感谢您提供的任何建议的阅读/辅导/帮助/建议。

3 个答案:

答案 0 :(得分:2)

如果我理解正确,您只需要在选择正确答案时显示代码?

如果是这样,只需要一个PHP页面,您将用户在GET / POST变量中选择的答案发送到该页面。然后,只有答案是正确的,才让PHP页面显示代码。这样,如果答案不正确,它就不会出现在HTML中。

例如,您的PHP页面如下所示:

<?php
if ($_GET["answer"] == "correct_answer") {
  echo "give the code here";
} else {
  echo "sorry the answer was incorrect";
}
?>

此外,如果您希望上述内容出现在javascript弹出窗口或其他内容中,fetch it using Ajax

答案 1 :(得分:1)

那里有几个问题。

1)如何生成安全代码:

如果您正在实施“赢家代码”,则可以使用散列的iv + secret +用户信息或某些签名机制。您还可以在服务器上实现代码到期时间,以便在必要时可以进一步提高标准。

2)获取获奖用户的代码:

如果您不希望代码出现在html中,那么您希望使用ajax来获取它。然后将代码注入要显示它的DOM中。此外,您应该使用安全的SSL通道来执行此操作,以防止嗅探。更进一步,考虑某种“一次性”令牌,以便中间人无法重新发布您的代码请求并获得相同的获胜代码。

希望这能让你有所考虑。

答案 2 :(得分:0)

首先,为了使游戏完全安全,所有获胜评估必须在服务器上完成,所有可兑换代码必须在服务器上唯一创建并发送给客户端。

它无法以安全的方式在客户端上完成,因为所有javascript代码都可供任何人查看。有一些方法可以掩盖javascript代码,使某人更难以进行逆向工程,但这无法阻止一个坚定的黑客 - 它只能减慢它们的速度或者稍微阻止它们。用于评估游戏结果的代码/算法是安全且无需操纵的唯一地方就在您的服务器上。

即便如此,您可能需要做一些事情来阻止一个用户获取可兑换代码,然后与其他人分享或获得正确答案,然后让其他人编写一个脚本,向您提交正确的答案服务器生成无限代码。