Javascript 如何加强单页web应用程序的安全性?

Javascript 如何加强单页web应用程序的安全性?,javascript,angularjs,security,Javascript,Angularjs,Security,例如,我正在使用AngularJS编写一个web应用程序,它为用户存储机密信息,比如他们的信用卡号 我在想我应该使用哪些安全协议。我没有安全方面的经验,所以我发现自己在这种问题上无能为力。我已经整理了一些要求: 客户端永远不会受到保护,因此服务器需要自己对用户身份进行验证 服务器无法将密码存储为数据库中的纯文本,而是不可逆修改的字符串 通过internet发送密码是不安全的,因此服务器无法请求原始密码 在这一点上我感到困惑,因为这些要求似乎自相矛盾。我必须对用户密码执行不可逆的转换,我的服务

例如,我正在使用AngularJS编写一个web应用程序,它为用户存储机密信息,比如他们的信用卡号

我在想我应该使用哪些安全协议。我没有安全方面的经验,所以我发现自己在这种问题上无能为力。我已经整理了一些要求:

  • 客户端永远不会受到保护,因此服务器需要自己对用户身份进行验证
  • 服务器无法将密码存储为数据库中的纯文本,而是不可逆修改的字符串
  • 通过internet发送密码是不安全的,因此服务器无法请求原始密码
在这一点上我感到困惑,因为这些要求似乎自相矛盾。我必须对用户密码执行不可逆的转换,我的服务器不能要求原始密码,这意味着转换只能在客户端完成。另一方面,你永远不能信任客户端,因为它对用户开放,并且容易被黑客攻击

是否有任何现有的安全协议/框架可以解决我提到的问题?

1)如果您正在处理任何类型的机密信息,您应该使用https。这将允许将密码从客户端发送到服务器。 2) 在创建密码时对其进行散列,并将该散列保存在数据库中。在以后登录时,您可以对提供的密码进行散列,并比较散列值


(P>3)如果你处理信用卡信息,你必须考虑其他事情。您应该快速查看PCI要求(如果您正在保存信用卡信息),如果您只是希望处理信用卡,我建议将其委托给第三方资源,如Stripe。他们将为您处理所有卡安全方面的问题。

您还应该研究清理和验证用户输入,以避免SQL注入、跨站点脚本等。

密码哈希必须在服务器上进行,而不是在客户端。服务器可以处理密码,但不应以纯文本形式保存密码。此外,管理敏感信息的应用程序的安全设计是一个复杂的主题,不断发现新的风险。你真的应该考虑找一些专业人士帮忙。@ PosiTy感谢你的评论,是的,我认为散列应该发生在服务器端,但这需要我通过互联网发送原始密码。如果有人抓到了包裹怎么办?届时他们是否有权使用password@Xavier_Ex您必须使用SSL/TLS;换句话说,您的服务器URL必须是
https://
URL。谢谢,我会记住这一点。这个项目的全部目的就是为了实践这些概念:)这里是一个让你开始学习的好地方,在这里你可以学到很多关于安全和最常见的黑客攻击的知识:。希望这有帮助。