需要有关如何使用加密数据库创建网站的建议

时间:2011-01-03 17:55:47

标签: security ssl database

我想创建一个网站,用户输入内容(比如几句话),最终存储在后端数据库(可能是MySQL)中。但是在内容离开客户端之前,我希望它能够使用客户端上的东西加密,例如javascript。

数据将通过网络加密传输,但更重要的是,还将永久存储在后端数据库中加密。

JavaScript适合用于此吗? 256位加密会花费太长时间吗?

另外,如果您想要下载用户过去2个月内提交的内容,您如何在以后查询加密数据库?

我正在寻找有关如何学习和完成此任务的提示,建议和指示。

谢谢!

5 个答案:

答案 0 :(得分:1)

您不应自行为客户端和服务器之间的通信实施加密,请使用SSL(https)。至于加密数据库中的数据,您可以始终使用MySQL的内置方法,例如AES_ENCRYPT和AES_DECRYPT,有关详细信息,请参阅reference manual

答案 1 :(得分:0)

嗯,要指出一些事情:如果客户端加密,它也可能很容易被解密,就像使用javascript这样的语言一样,他们会被交给您加密方案的源代码。有很多加密方案,AES,Blowfish等,但如果数据是在加密连接上传输的话,我认为加密数据只会增加很少的安全性,可能是本地安装的数据包嗅探器或其他类似的东西。

我还建议您考虑使用压缩,我自己也使用LZMA,Huffman,甚至使用javascript的base64编码来至少模糊来自不经意的观察者的内容。重点是,无论加密有多好,您都要将流程移交给客户端,他们只需查看您的来源并能够轻松地反转加密,因为他们知道加密方案并且不会懒惰做一些谷歌搜索或在维基百科上搜索。我个人更喜欢压缩,因为它也减少了发送数据的大小,除非有人接受加密和压缩分析的训练,否则要弄清楚从嗅探数据包中使用的压缩是不容易的。

编辑:但是如果你想要高级别的安全性,我建议不要只使用压缩,而是在服务器和客户端之间传输的数据上使用RSA或Diffie-Hellman加密等非对称加密方法作为私钥。永远不会被分享。

对于客户端,javascript或更好的Java应用程序可以工作(至少你不能右键单击 - >在两秒钟内使用Java应用程序查看源代码)。如果你只想保存像你所说的几句话,256位加密不会花太长时间。一个现代的处理器,通过毫秒级的爆破。然后,当它到达服务器时,使用AES或其他强大的算法(请注意美国政府使用AES 256作为其最高机密文档)对其进行加密,然后再将其发送到数据库。 (还想补充一点,你也可以存储一个哈希(MD5是一个很容易在PHP中使用的功能,你可以选择像惠而浦这样的东西,但你必须找到一个库),这个数据就是单独的数据库,并在访问它时检查它,以确保您的数据库没有被泄露)

对于查询,我建议使用PHP。读取数据,解密,然后发送到客户端(以加密形式),或者如果您愿意,并让客户端也解密它,如果您不信任网络正在发送数据。

以下是Javascript和AES的良好来源:http://point-at-infinity.org/jsaes/ 我在javascript中使用RSA保存了两个链接:http://www.ohdave.com/rsa/http://www.hanewin.net/encrypt/rsa/rsa.htm

答案 2 :(得分:0)

查看http://www.farfarfar.com/scripts/encrypt/(加密/解密)。

成功地尝试了文字/文字/ XXTEA。

但是,这与JS加密有关。

只要您不使用SSL / https,主要的缺点是:

  • 用于保护私钥的模糊语句(虽然可以像表单字段一样提交,但不需要提交,但需要用户在每个会话中输入值。)

关于搜索/提取有关加密数据的数据,我相信一切都无法发挥作用。

答案 3 :(得分:0)

对于通过网络加密发送的数据,这就是HTTPS的用途。没有任何东西是透明的。它的安全性足以让大多数银行信任它。不要在这里重新发明轮子;它永远不会像一群以轮子为生的人所想出的那样圆润。

让您的表单提交到https://网址(而不是http://),该网址上的脚本/应用与数据库通信,根据需要加密和解密数据。无论如何,Javascript都不会轻易直接与MySQL对话,如果你做了所有加密客户端,任何能够获取页面的人仍然可以解密它(因为必要时客户端也需要获得解密密钥)。

答案 4 :(得分:0)

查看此博文:http://www.ravellosystems.com/blog/all-you-need-to-know-to-configure-ssl-offloading/

它将指导您完成配置Web服务器以在加密通道(a.k.a SSL终止)下提供内容所需的所有步骤。