限制访问Angular2 Web应用程序后端?

3

我要开发一个网络应用程序,很可能会使用Angular2来完成。由于该应用程序需要在服务器上存储数据,因此我需要一个后端,以便Web应用程序可以使用它进行读写。

但是如何防止他人从我的Web应用程序之外使用它呢?这似乎是不可能的?我在前端中使用的任何硬编码token、API密钥等都将通过查看代码可见于攻击者。即使通过混淆和压缩JS源代码可以使其更加困难,但它永远无法完全安全,对吧?

那么,我如何创建一个可供Web应用程序前端使用的后端,并同时限制其只能由我自己的前端使用呢?

如果不是普遍地可能,是否在某些特定条件下可能,例如如果Web前端是从运行后端的同一服务器加载的?我认为可以在前端脚本启动时启动服务器会话并动态生成前端的会话ID,但我想攻击者仍然可以轻松创建自己的客户端,他只需确保首先加载官方客户端并从中提取会话ID即可?


这并不是十分可怕 (; 如果情况真的那么糟糕,每个人都可以抢劫任何银行。首先要求身份验证以读取/写入您的服务器并使用https。向谷歌询问更多有关“Web应用程序安全性”、“内容安全策略”的信息 (: - Sasxa
这是一个有趣的问题,我认为你不能这样做。基本上,如果你正在使用REST将数据加载到前端,那么这些数据就不是敏感数据。你无法阻止某人在你的前端之外进行REST调用,就像你无法阻止他从curl https://yousite.com并使用脚本来获取所需的数据一样。但是,如果你处理敏感数据,可以在头部传递令牌以检查是否将数据发送给了已识别的用户。 - YounesM
@Sasxa 当你说“从要求身份验证开始”,你是指要求Web应用程序的用户进行身份验证吗?我做了更多的研究,似乎人们认为实现我的想法并仍然具有可通过JS前端或移动应用程序访问的后端几乎不可能,因为这些可以被反向工程,并且下一个最好的方法是依靠用户登录以使用该应用程序(由于密码不存储在应用程序中,因此可能)... 你是否同意? - Magnus
是的,一个好的开始是将敏感信息(密码、私钥等)保存在服务器上,永远不要通过网络传输。你可以在此基础上构建并添加额外的安全层。 - Sasxa
1个回答

0

我将与您分享我的个人经验和技巧。

无论您是黑帽子骇客还是服务器管理员,每一份敏感数据都以01的形式存在于流中。让攻击者无法获取您的数据的最佳方法是将其限制在您的服务器上。但是,这不仅仅是如此。

影响数据安全的重要因素:

  • 后端安全
    • 如果攻击者可以从内部获取数据,那么你所有的努力都是徒劳的。确保没有安全漏洞,这样他们就无法访问 root 终端。
    • 你的后端应该处理客户端可能发生的所有事件。有人可能会通过自定义客户端发送格式不正确的数据包,你应该为此做好准备,以避免泄露敏感数据。
    • 你永远不应该发送比最低限度更多的数据。每个不必要的字节都可能为攻击者打开新的选项。
  • 传输层安全
    • 数据包的字节流很容易被拦截。你应该确保当它们被拦截时,攻击者无法理解其中的任何一个字。
    • 使用 SSL。现在已经是必备的了 - 为你提供了一种不可破解的加密方式。(当然,前提是攻击者无法获取私钥 - 这又让我们回到了 后端安全
  • 前端安全
    • 没有硬编码的密钥、密码或任何敏感信息。这对每个人都是可见的。
    • 混淆和压缩会减慢反向工程师的速度,但不会阻止他们。最好的方法是让他们看到一些对他们毫无用处的代码。
  • 身份验证
    • 如果你想把某些东西隐藏起来,使其不被普通访客看到,那么身份验证就是解决方案。我建议你不要自己解决,因为已经有很多框架和解决方案可以处理你可能遇到的大部分问题。你应该看看 JSON Web Tokens (JWT) - 它们支持所有活跃的编程语言,是一个开放标准。(https://jwt.io

在开发过程中,不仅要以软件工程师的身份思考,还要以攻击者的角度思考,这非常重要。你会发现,你的编码能力将变得更加高效。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接