我有一个网站,用户可以在其中使用注册码延长他们的产品试用期。他们单击电子邮件中的链接(在 URL 中带有键),进入该站点,然后出现一个带有注册码的灯箱。我目前正在使用 HTML 显示注册代码并使用 CSS 隐藏它。一旦我检查以确保 URL 具有正确的 javascript 密钥,我就会显示注册码。但是,这意味着任何人都可以在页面上查看源代码并复制注册码。有没有办法对代码进行加密,使其不会出现在查看源中,然后在 URL 具有正确密钥的情况下对其进行解密?每个产品一个代码,而不是每个用户,所以我不需要做任何服务器端身份验证。
7 回答
如果计算机知道,用户就知道。
您可以玩混淆游戏,所有这些都使您的 Javascript 难以阅读。但是一个足够坚定的用户无论如何都会找到它,一旦他们找到了,他们就可以轻松地与他们的朋友分享它。
每个用户一个代码是可靠地解决这个问题的唯一方法。
我检查以确保 URL 具有正确的 javascript 键
不要在客户端检查密钥,在服务器上验证密钥。
这是确保只有有效用户才能获得注册码的唯一方法。
伪 PHP 示例:
if( validateKey($_GET['key']) ) {
echo 'The Registration Code';
} else {
echo 'Error';
}
客户端代码本质上是不安全的。考虑您发送到全世界的客户端计算机的任何内容,并且在您清理之前不要相信来自客户端的任何内容。无论您在初始混淆例程中投入多少精力,一个足够坚定的用户都会对您的代码进行去混淆处理。
另一个提示可以帮助您在站点中显示注册码,您可以将带有注册码的电子邮件发回给用户。
正如 Nemo 建议的那样,正确的方法是为用户提供一个代码
希望有帮助
如前所述,客户端不会满足您的安全需求。
最好让页面向包含密钥的服务器发送 Ajax 请求,然后您可以使用注册码进行响应。
更好的是直接验证第一个请求的密钥,然后决定返回错误页面或带有注册信息的页面。
正如其他人所回答的那样,在服务器端进行此验证既容易又安全。
您可以有一个 AJAX 请求将 URL 密钥发布到一个 php 页面,然后该页面会使用正确的注册码进行回复。
话虽如此,总是有可能使用客户端使用加密库(如AES),但据我了解,我认为这不是解决问题的好方法。
同样,在服务器端执行此操作既非常简单,又非常安全。
在将其嵌入 HTML 之前,使用服务器中的密钥加密您的注册码(加上一些神奇的 cookie)。在您的 JavaScript 中,通过解密注册码来验证密钥(在 URL 中)。如果魔术 cookie 匹配,那么您将获得一个有效的密钥,您可以向用户显示注册码。
查看源代码只会显示加密的注册码。没有密钥,窥探者无法提取注册码。
这意味着您将拥有每个注册码的唯一密钥,您的注册系统应该就是这种情况。您在电子邮件中发送给用户的密钥,嵌入到他们单击的链接中,如您所说。