几天前我看到了这篇文章。作者展示了如何使用Vue在后端访问Drupal系统。js应用。他使用API密钥进行身份验证——我觉得这很危险。这里';这就是为什么。
首先,让我简要解释一下本文中介绍的设置:后端由Drupal提供。Drupal从版本8开始就在core中集成了JSON API,可以通过模块管理轻松激活。通过这种方式,现在可以访问所有实体(例如用户、节点等),并通过GET请求读取它们。
JSON API基于Drupal系统中定义的权限。因此,如果用户对内容没有读取权限,那么也不能通过JSON API加载该内容。写访问也是如此:只有在访问用户拥有适当权限的情况下,才能创建、修改或删除实体。
但回到文章:在这里,作者描述了如何在客户端Vue应用程序中访问Drupal后端来创建内容。在所示的示例中,他创建了类型为"的内容(Drupal中也称为节点);第34条;。
现在有意思了:他已经配置了他的Drupal系统,这样只有登录的用户才能创建文章。因此,为了通过JSON API创建一篇文章,他必须首先对自己进行身份验证。
有几种向Drupal进行身份验证的方法。通常的方法是通过用户名和密码。这不仅可以通过前端直接实现,还可以通过API实现。在这里,Drupal在成功验证后返回一个会话ID,您可以缓存该ID并将其用于所有进一步的请求。
作者现在使用另一种方法:安装密钥验证模块。这将为后端中的每个用户创建一个API密钥,用于对API进行身份验证。为此,参数";api密钥";必须将键作为每个调用的值传递。这样,用户就可以在Drupal中自动进行身份验证,并拥有所有分配的权限。
在这里,他犯了一个危险的错误:他将Drupal后端的API密钥集成到他的Vue中。js应用程序能够对API进行身份验证并创建内容。
一个Vue。js应用程序由用户在客户端执行';s浏览器。这意味着源代码将从服务器直接发送到浏览器。现在,用户可以完全访问源代码,也可以读取其中包含的身份验证密钥。
在web应用程序的构建过程中,环境变量会写入源代码。环境变量的意思是(顾名思义)为不同的环境提供不同的变量。例如,您可以在开发环境中使用不同于暂存环境或生产环境的变量。例如,如果要集成支付提供商Stripe,可以使用Stripe';在开发和登台环境中使用Stripe';s在生产环境中的实时模式。
但是CORS设置确保我只能从特定域访问后端
不CORS是浏览器中的一种实现,旨在通过确保浏览器中的资源仅允许访问特定端点来保护用户免受恶意应用程序的攻击。
任何时候都可以绕过这种浏览器实现。首先,这取决于浏览器本身:如果CORS没有集成,或者没有干净地集成,那么它将无法工作。服务器发送CORS头,由浏览器决定如何处理。这不是一个安全元素,因为它不在服务器的手中,而在浏览器的手中。
攻击者可以通过web应用的源代码访问API密钥,并使用它,例如,通过cURL请求直接访问后端的API资源。使用cURL时,CORS不会生效,因此攻击者可以使用用户的全部权限直接访问。
API密钥是用户名和密码的替代方案。没有人会想到在web应用程序的源代码中存储用户名和密码。
然而,在某些情况下,这仍然是可能的。例如,如果API密钥具有受限权限。对于某些服务(例如,一些谷歌服务,如谷歌地图),情况肯定是这样。
然而";主要作者";本文中描述的模块不限制密钥的权限。它只是用户名&;暗语
我读到这篇文章是因为我在寻找将Vue应用程序验证到Drupal后端的方法。Designkojo';s的文章是最先出现在搜索引擎顶部的文章之一。此外,这篇文章也很有魅力:它描述得很好,很简洁。特别是对于初学者来说,所描述的方法易于快速实现。它表明:通过API密钥进行身份验证是Web应用程序的常见方式。这就是它变得危险的地方:尤其是没有经验的开发人员可能会上当,并认为这是一种通过后端的web应用进行身份验证的常见方法。
我通过Twitter联系了这篇文章的作者,并解释了我的观点。我们讨论了一下,他明白了我的意思。他在文章中加了一条警告。