我正在制作一个会员可以进行一对一聊天的网站,但我不确定应该如何处理对话文本。我应该将文本存储在 .txt 文件中还是直接存储在数据库中?
我还想知道是否应该以某种方式加密文本,这样如果有人通过数据库,他或她就不会得到我成员对话的明文。我网站上的会员注册是为了和其他人一起玩,所以我认为他们的谈话中没有任何超级秘密的东西。但是,我只是想添加那一层安全性,同时获得经验,如果我将来需要对用户提交的文本保密。
我正在制作一个会员可以进行一对一聊天的网站,但我不确定应该如何处理对话文本。我应该将文本存储在 .txt 文件中还是直接存储在数据库中?
我还想知道是否应该以某种方式加密文本,这样如果有人通过数据库,他或她就不会得到我成员对话的明文。我网站上的会员注册是为了和其他人一起玩,所以我认为他们的谈话中没有任何超级秘密的东西。但是,我只是想添加那一层安全性,同时获得经验,如果我将来需要对用户提交的文本保密。
它不是特别干净、高效或简单,但有一个方案可以为您做到这一点。
从 Alice 向 Bob 发送消息时,请执行以下操作:
当 Bob 想要阅读消息时:
该方案具有以下性质:
如果最终的安全考虑有问题,请考虑在每条消息中发送发件人公钥的摘要。这样,如果在任何时候发生合法对话,系统可以根据之前对话中发送的摘要来验证公钥。
不用担心加密。它是在 .txt 文件中还是在数据库中都没有关系(从安全角度来看)。相反,您可以为用户的安全和隐私做的最重要的事情是:
保留数据的时间不要超过您绝对需要的时间!
人们对聊天有一定的期望。他们期望在线聊天就像离线聊天(在您的门廊或其他地方):没有定期保存所有聊天的永久记录。人们可能希望聊天通常保持私密。所以,不要违背他们的期望。不要保留他们的聊天记录。在一段合理的时间后删除所有记录(例如,一天后;或尽快)。然后,如果您受到攻击,损失将是适度的,您不必与您的用户正面交锋,承认黑客已经获得了他们过去所有聊天记录的访问权限,并且一直如此。
聊天应该被加密,即使只是轻微的加密,以使其不被查看。同样删除超过一个月或日志超过 300 行左右的行,如果数据库和解密密钥被泄露,他们的隐私将受到一定程度的保护。用户可能希望保存聊天(我愿意),所以最好是给他们一个选项来存储它更长的时间,并下载将从服务器中删除的任何内容。
我不确定用用户密码加密它是否有用。它甚至可能使攻击者更容易,通过 SQL 注入,他可能能够查看用户的密码。硬编码的解密密钥将提供第二个因素;受损的数据库是不够的。然而,当服务器被入侵时,总是可以找到解密密钥(当数据库被破坏时,这可能更容易做到,尤其是当攻击者可以写入数据库时),因此不能完全依赖它。
真正保护用户聊天的唯一方法是生成私钥和公钥对,让用户下载私钥而不保留副本。可以使用私钥解密聊天(需要在从数据库加载任何聊天时输入),使用公钥可以加密和存储聊天。不过,这可能是不切实际的,而且工作量太大。