services

Drupal Services csrf 的防御


使用 token 是如何防御 csrf 的

因为 token 是由服务端生成的,每次提交信息都需要验证。攻击者的网页无法获取。

为什么不能获取,这个和网站的 X-Frame-Options 有关。

如果不设置 X-Frame-Options 则表示任意网页都可以使用 iframe 加载。

那么则可以获取到 token,这样使用 token 也无法防御。

如果不使用 token 那么攻击者就可以直接提交各种数据了。

Drupal X-Frame-Options 默认设置  SAMEORIGIN

可是

Services 获取 token 的 uri 可以任意访问。

Drupal 7 使用 Services 自定义 API


在 Drupal 7 下使用 Services 模块定义 api,可以很方便的使用各种认证、端点管理。

支持 OAuth、Session等。

如果不勾选认证方式,会使用匿名用户。

这样会导致如果登录的时候调用了一个无需认证的接口,会导致用户退出。建议勾选 session 认证。

使用 OAuth 认证的时候返回的数据 headers 中包含 cookie 信息,属于 OAuth  Consumer 所属 user 的 cookie。可以使用此 cookie 来登录用户。如果同时勾选了 Session 认证就会导致 csrf 错误。

Drupal Services 的前后端分离实践


前后端分离以优越的灵活性、便于维护、升级等优点越来越多的受到关注。

下面就来实践如何在Drupal中灵活使用前后端分离。

首先需要使用的模块 Services 及其依赖,这里如何安装模块就不说了。

安装好之后打开services的配置页面

添加一个服务: 

填写端点机读名称:api(这个可以随便填)

服务器选择:REST;

身份认证选择:会话认证;

然后在资源中开启需要打开的资源。

在前端js调用时拼接调用url字符串,如下: