0

我有一个网站,用户可以在其中使用注册码延长他们的产品试用期。他们单击电子邮件中的链接(在 URL 中带有键),进入该站点,然后出现一个带有注册码的灯箱。我目前正在使用 HTML 显示注册代码并使用 CSS 隐藏它。一旦我检查以确保 URL 具有正确的 javascript 密钥,我就会显示注册码。但是,这意味着任何人都可以在页面上查看源代码并复制注册码。有没有办法对代码进行加密,使其不会出现在查看源中,然后在 URL 具有正确密钥的情况下对其进行解密?每个产品一个代码,而不是每个用户,所以我不需要做任何服务器端身份验证。

4

7 回答 7

6

如果计算机知道,用户就知道。

您可以玩混淆游戏,所有这些都使您的 Javascript 难以阅读。但是一个足够坚定的用户无论如何都会找到它,一旦他们找到了,他们就可以轻松地与他们的朋友分享它。

每个用户一个代码是可靠地解决这个问题的唯一方法。

于 2011-06-02T21:07:17.683 回答
2

我检查以确保 URL 具有正确的 javascript 键

不要在客户端检查密钥,在服务器上验证密钥。
这是确保只有有效用户才能获得注册码的唯一方法。

伪 PHP 示例:

if( validateKey($_GET['key']) ) {
    echo 'The Registration Code';
} else {
    echo 'Error';
}
于 2011-06-02T21:08:07.950 回答
0

客户端代码本质上是不安全的。考虑您发送到全世界​​的客户端计算机的任何内容,并且在您清理之前不要相信来自客户端的任何内容。无论您在初始混淆例程中投入多少精力,一个足够坚定的用户都会对您的代码进行去混淆处理。

于 2011-06-02T21:10:49.273 回答
0

另一个提示可以帮助您在站点中显示注册码,您可以将带有注册码的电子邮件发回给用户

正如 Nemo 建议的那样,正确的方法是为用户提供一个代码

希望有帮助

于 2011-06-02T21:14:51.530 回答
0

如前所述,客户端不会满足您的安全需求。

最好让页面向包含密钥的服务器发送 Ajax 请求,然后您可以使用注册码进行响应。

更好的是直接验证第一个请求的密钥,然后决定返回错误页面或带有注册信息的页面。

于 2011-06-02T21:16:00.550 回答
0

正如其他人所回答的那样,在服务器端进行此验证既容易又安全。

您可以有一个 AJAX 请求将 URL 密钥发布到一个 php 页面,然后该页面会使用正确的注册码进行回复。

话虽如此,总是有可能使用客户端使用加密库(如AES),但据我了解,我认为这不是解决问题的好方法。

同样,在服务器端执行此操作既非常简单,又非常安全。

于 2011-06-02T21:21:23.627 回答
0

在将其嵌入 HTML 之前,使用服务器中的密钥加密您的注册码(加上一些神奇的 cookie)。在您的 JavaScript 中,通过解密注册码来验证密钥(在 URL 中)。如果魔术 cookie 匹配,那么您将获得一个有效的密钥,您可以向用户显示注册码。

查看源代码只会显示加密的注册码。没有密钥,窥探者无法提取注册码。

这意味着您将拥有每个注册码的唯一密钥,您的注册系统应该就是这种情况。您在电子邮件中发送给用户的密钥,嵌入到他们单击的链接中,如您所说。

于 2011-06-03T09:34:37.940 回答