【问题标题】:JavaScript, node.js and securityJavaScript、node.js 和安全性
【发布时间】:2011-09-04 10:14:11
【问题描述】:

我的网站上有一个用户注册表单,它只是使用 socket.io 以纯文本形式将数据(用户名、密码和电子邮件)发送到服务器。我知道这是一个非常糟糕的解决方案,那么我用什么来隐藏信息呢?你能解释一下别人是如何获得这些信息的,所以我知道应该避免什么吗?我听说过jsAES,它会加密这些东西,但是客户端和服务器如何知道密钥呢?

【问题讨论】:

  • 我对此没什么经验,但 https 使用 RSA。您在客户端使用公钥加密,在服务器端使用私钥(秘密)解密。您不妨实施 RSA。

标签: javascript security node.js socket.io


【解决方案1】:

您可以在 JavaScript 中使用asymmetric cryptography:在您的代码中包含 JavaScript 加密代码(例如,RSA,不是对称 AES)和公钥。提交后,加密所有输入并将它们发送到使用私钥解密的服务器。但是,熟练的攻击者可以简单地更改该 JavaScript 或注入自己的 JavaScript 来规避这种客户端加密。此外,它需要 JavaScript,有安全意识的访问者可能会禁用它。

使用 HTTPS,而不是推出自己的解决方案。生成密钥对,为其获取证书,并配置您的服务器以服务 HTTPS 请求。使用 HTTP Strict Transport Security 强制所有连接使用 HTTPS。

【讨论】:

  • 我确实使用 JavaScript,这是我正在制作的在线游戏,而且是必须的。
  • @bane 然后使用 HTTPS。它简单、支持良好、快速且安全,and you can get certificates for free
  • 您能进一步解释一下这些证书是如何工作的吗?我的网站还没上线,连域名都没有注册!没有证书的软件可以使用,上市后拿到吗?
  • @bane 当然!通常,构成您网站的所有数据(HTML、样式、图像、JavaScript 等)都是通过 HTTP 以纯格式传输的。当您访问 https:// URL(如 paypal.com)时,您的浏览器和网络服务器会协商一个加密的通信通道 (SSL/TLS)。一旦建立了该通道,他们就会通过它使用 HTTP。为了确保加密通道的另一端是您认为的人(即它是您的网络服务器)而不是其他人的,您需要一个受信任方的证书,表明您的网络服务器确实是@987654328 @。继续...
  • @bane 实际上,这意味着您必须首先创建密钥,然后获取 SSL 证书(尝试上面的免费 StartSSL),然后将其上传到网络服务器并配置它以开始提供 HTTPS。注册域后,创建密钥并申请证书。拥有它后,只需联系您的网络服务器管理员/提供商,并说您需要 HTTPS 支持并为您的域提供密钥对和证书。如果有任何不清楚的地方,请随时通过webmastersserverfaultme 提问。
猜你喜欢
  • 1970-01-01
  • 2016-12-27
  • 1970-01-01
  • 2018-01-16
  • 1970-01-01
  • 1970-01-01
  • 2018-12-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多