限制对 Angular2 Web 应用程序后端的访问?
Posted
技术标签:
【中文标题】限制对 Angular2 Web 应用程序后端的访问?【英文标题】:Restricting access to the backend of an Angular2 web application? 【发布时间】:2017-08-09 21:11:57 【问题描述】:我要开发一个 Web 应用程序,我很可能会使用 Angular2 来完成它。由于应用程序需要在服务器上存储数据,因此我需要一个 Web 应用程序可以用来读取/写入的后端。
但是如何防止其他人从我的 Web 应用程序之外使用它?这似乎不可能?通过查看源代码,攻击者可以看到我在前端使用的任何硬编码令牌、API 密钥等。即使通过混淆和缩小 JS 源代码可以使其变得更加困难,但这种方式永远无法做到 100% 安全,对吧?
那么我如何才能创建一个可供 Web 应用程序前端使用的后端,同时将其限制为仅限我自己的前端使用?
如果不是一般可能,在某些特定条件下是否可能,例如,如果 Web 前端是从运行后端的同一台服务器加载的?我正在考虑在启动前端脚本并为前端动态生成会话 ID 时启动服务器会话?但我想攻击者无论如何都可以轻松创建自己的客户端,他只需要确保它首先加载官方客户端并从中提取会话 ID?
【问题讨论】:
情况并非如此严峻(;如果情况如此糟糕,每个人都可以抢劫任何银行。首先要求身份验证以读取/写入您的服务器并使用 https。向谷歌询问“网络应用程序安全性”, “内容安全政策”了解更多(: 这是一个有趣的问题,我认为你做不到。基本上,如果您使用 REST 将数据加载到前端,则意味着该数据不是敏感数据。您无法阻止某人在您的前端之外进行 REST 调用,就像您无法阻止他从curl https://yousite.com
并使用脚本来获取他需要的数据一样。但是,如果您正在处理敏感数据,则可以在标头中传递令牌以检查您是否将数据发送给已识别的用户。
@Sasxa 当您说“首先要求身份验证”时,您的意思是要求 Web 应用程序的用户进行身份验证?我做了更多的研究,似乎人们同意,实际上不可能做我想做的事情,并且仍然有一个可以从 JS 前端或移动应用程序访问的后端,因为这些可以被逆向工程,而且下一个最好的办法是依靠让用户登录来使用应用程序(这是可能的,因为密码没有存储在应用程序中)......你同意吗?
是的,一个好的开始是将敏感的东西(密码、私钥......)保存在服务器上,并且永远不要通过网络传输。您可以在此基础上构建并添加额外的安全级别。
【参考方案1】:
我将与您分享我的个人经验和技巧。
无论您是黑帽黑客还是服务器管理员,每条敏感数据都以 0 和 1秒。阻止攻击者获取您的数据的最佳机会是将他们限制在您的服务器上。但是,它的意义远不止于此..
影响数据安全的重要因素:
后端安全: 如果您的攻击者可以从内部获取数据,那么您的所有努力都是徒劳的。确保没有安全漏洞,以免他们无法访问 root 终端。 您的后端应该处理所有可能发生在客户端的事件。有人可能使用自定义客户端发送了格式错误的数据包,您应该做好准备,不要分发敏感数据。 您永远不应发送超过最低限度的数据。每个不必要的字节都可能为攻击者开辟新的选择。 运输层安全: 数据包的字节流很容易被截取。你应该确保当他们拦截它时,他们无法辨认出来。 使用 SSL。它现在是必备品 - 为您提供牢不可破的(嗯,目前......)加密。 (当然,前提是攻击者不会得到私钥 - 这让我们回到后端安全) 前端安全: 没有硬编码的密钥、密码或任何敏感信息。所有人都可以看到。 混淆和压缩会减慢逆向工程师的速度,但不会阻止他们。最好是在他们面前抛出一个除了框架之外没有任何有用的代码。 身份验证: 如果您希望对普通访问者隐藏某些内容,则可以使用身份验证。我建议您不要自己制定解决方案,已经有许多框架和解决方案可以处理您遇到的大多数瓶颈。你应该看看 JSON Web Tokens (JWT)——它们支持所有活跃的编程语言并且是一个开放标准。 (https://jwt.io)在开发过程中,您不仅要考虑作为软件工程,还要考虑作为攻击者,这一点至关重要。您会看到,您的编码将变得更有效率。
【讨论】:
以上是关于限制对 Angular2 Web 应用程序后端的访问?的主要内容,如果未能解决你的问题,请参考以下文章
输入输入时如何限制对我的后端的 md-autocomplete 调用?