我有一份我写的共享软件,我想在互联网上发布。我有一个序列号类型的东西设置,但仍然有大量的密钥共享:(。我想添加一个系统,一旦用户输入序列,它与我的服务器检查,以确保它是有效的简单是关键。
-Client使用php类型的东西“www.mywebsite.com?key=3434343”将序列号的MD5发送到网页
-Php脚本采用MD5并根据简单数据库进行检查。如果数据库中存在MD5密钥,它会递增与该密钥关联的计数器,并生成显示1的网页。如果数据库中没有条目,则脚本会生成显示0的网页。
-Client读取网页并检查0或1并采取相应的行动。
我将在数据库中手动输入有效密钥(md5'd)并监控活动密钥以进行过多激活。我对php一无所知,所以我不知道这是否有效。这看起来足够好吗?有明显的安全漏洞吗?我将使用共享主机。有没有更好的办法?感谢
答案 0 :(得分:4)
你的计划实际上有几个明显的安全漏洞。
首先,用户可以将本地互联网流量重定向到假冒您的网站,但始终显示“1”。
第二个是每个键只对X“激活”有好处,但是如果消息在传输中丢失,那么太糟糕了 - 计数器仍然会递增。你需要一些方法来验证一切正常;查看页面是不够的。
第三是黑客程序认为它从你的网站得到“1”将是世界上最简单的事情。
不要实施自己的版权保护。它只会惹恼合法用户,甚至不会减慢真正的海盗速度。要么使用复杂的商业系统,要么(更好的是!)试图打击导致用户窃取您的程序的任何动机。这可能是你的价格太高,或者他们觉得你不尊重他们。人们出于某种原因做事。
答案 1 :(得分:3)
你缺乏对密钥的重要理解......密钥以MD5的形式包含字母和数字字符,请以此为例:
3c102d6b53a7a8723e694f1417c2abfe
你将如何生成密钥?您在什么基础上从生成密钥?
我也是,在这里看到的是使用如下参数传递密钥到网站:
www.mywebsite.com?key=3434343
黑客需要一段时间才能找到密钥......随着处理器速度和密钥生成的出现......它会立即被破解,更多的是,你将暴露你的脚本。 ...不要低估黑客/破解者可以做什么来打破脚本......这是你在帖子中没有提到的,没有任何安全防御措施!
此外,没有提及使用安全证书进行身份验证而不是吓跑最终用户,更糟糕的是,防病毒扫描程序可能会将站点标记为可疑,因此最终用户被锁定在应用程序之外.....
BOTTOM LINE:不要尝试像这样的安全方案,因为它们是虚假的经济,无论哪种方式,它都相当于吸引火焰的飞蛾,当应用程序“受到保护”时,黑客/破解者会试图绕过它,无论你怎么想......你会开玩笑地思考并欺骗自己,你是一个出色的程序员,你的梦想计划是万无一失的 - 不要< /em>...远离这些方案......
答案 2 :(得分:1)
我会回应在评论中提出的一些观点,即为什么你应该考虑不这样做,或者至少不要自己做。但是如果你真的想(和/或出于教育目的),对于像这样的系统,我会选择非对称加密。
基本上,您的想法是生成公钥/私钥对,将公钥嵌入应用程序中,并将私钥保留在服务器上。要注册,您的应用程序副本会将序列号发送到您的服务器。服务器上的PHP脚本将检查其数据库中的序列号,确定注册是否有效,如果是,则服务器发回使用其私钥加密的序列号。然后,您的程序可以使用公钥解密收到的消息,将解密的版本与序列号进行比较,如果匹配,则可以自行激活。当然,这不会影响(半)确定的黑客,但它确实消除了解决您在问题中给出的方案的最简单方法,即将请求重定向到始终返回1的站点。
如果您担心未经加密的互联网上的序列号,您可以在程序将序列号发送到服务器之前使用公钥加密序列号。并且当服务器响应时,它将发回(1)服务器上生成的随机数和(2)随机数和序列号的加密散列,而不是发送回加密的序列号。或者使用HTTPS,它做类似的事情。但是,如果你试图防止有能力和动机拦截你的程序和服务器之间的通信的人,你需要的不仅仅是这个简单的方案,因为那个人几乎肯定拥有更复杂的工具供他/她使用。在这种情况下,您需要一个信誉良好的商业DRM系统,以便最有可能保护您的计划。在这一点上,我会问自己这是否真的值得。