相关疑难解决方法(0)

这个Rails JSON身份验证API(使用Devise)是否安全?

我的Rails应用程序使用Devise进行身份验证.它有一个姐妹iOS应用程序,用户可以使用他们用于Web应用程序的相同凭据登录iOS应用程序.所以我需要某种API进行身份验证.

这里有很多类似的问题指向本教程,但它似乎token_authenticatable已经过时了,因为该模块已从Devise中删除,并且某些行会抛出错误.(我正在使用Devise 3.2.2.)我试图根据那个教程(和这个教程)推出自己的教程(但是这个),但我对它没有100%的信心 - 我觉得我可能会有一些东西被误解或错过了.

首先,按照这个要点的建议,我authentication_token在我的users表中添加了一个text属性,以及以下内容user.rb:

before_save :ensure_authentication_token

def ensure_authentication_token
  if authentication_token.blank?
    self.authentication_token = generate_authentication_token
  end
end

private

  def generate_authentication_token
    loop do
      token = Devise.friendly_token
      break token unless User.find_by(authentication_token: token)
    end
  end
Run Code Online (Sandbox Code Playgroud)

然后我有以下控制器:

api_controller.rb

class ApiController < ApplicationController
  respond_to :json
  skip_before_filter :authenticate_user!

  protected

  def user_params
    params[:user].permit(:email, :password, :password_confirmation)
  end
end
Run Code Online (Sandbox Code Playgroud)

(注意我application_controller有这条线before_filter :authenticate_user!.)

API/sessions_controller.rb

class Api::SessionsController < Devise::RegistrationsController
  prepend_before_filter :require_no_authentication, :only …
Run Code Online (Sandbox Code Playgroud)

security api json ruby-on-rails devise

70
推荐指数
1
解决办法
3万
查看次数

JSON API和CSRF

我正在开发一个Web API.身份验证是通过cookie.所有端点都JSON在请求正文中接收参数.

我是否需要实施CSRF token保护它们?这怎么可以被利用?是否可以通过普通<form>元素发送JSON ?

攻击者有可能拥有这样的东西吗?

<form type="application/json" method="POST">
     <input name="json" value="{ my json code here }">
     <input type="submit">Send</input>
<form>
Run Code Online (Sandbox Code Playgroud)

api-design csrf csrf-protection

9
推荐指数
1
解决办法
838
查看次数

CSRF和CORS与Django(REST框架)

我们正在将我们的前端转移到一个单独的项目(Django之外).这是一个Javascript单页面应用程序.

其中一个原因是让我们的前端开发人员更容易完成他们的工作,而不必在本地运行整个项目 - 包括API.相反,我们希望他们能够与我们设置的测试API进行通信.

我们已经设法解决了大部分CORS/CSRF问题.但是现在我们遇到了一些我无法在任何地方找到解决方案的东西,尽管阅读了大量文档和SO答案.

前台和API是从不同的域(在开发过程中提供服务localhosttest-api.example.com).到目前为止,虽然从同一个域提供服务,但前端已经能够从csrftokenAPI(Django)设置的cookie中获取CSRF令牌.但是,当从不同的域提供服务时,frontend(localhost)无法访问API(api-test.example.com)的cookie .

我正在试图找到解决这个问题的方法,以某种方式将CSRF令牌传递给前端.Django文档建议X-CSRFToken为AJAX请求设置自定义标头.如果我们在每个响应中同样为CSRF令牌提供标头并且(通过Access-Control-Expose-Headers)允许前端读取此标头,我们是否会破坏CSRF保护?

鉴于我们已经为API正确设置了CORS(即只允许某些域对API进行跨域请求),第三方站点上的JS应该无法读取此响应头,因此无法做出妥协AJAX请求我们的用户背后,对吧?还是我错过了一些重要的事情?

还是有另一种更好的方法来实现我们想要的东西吗?

javascript django csrf cors django-rest-framework

6
推荐指数
1
解决办法
895
查看次数

GraphQL和CSRF保护

我读了很多:

  1. https://github.com/pillarjs/understanding-csrf
  2. https://security.stackexchange.com/questions/10227/csrf-with-json-post
  3. JSON Web服务是否容易受到CSRF攻击?
  4. (ApolloServer站点上没有任何内容:https ://www.apollographql.com/docs/apollo-server/ )

但是,我还无法理解我们的端点(// graphql)是否受到这种类型的攻击的保护,或者是否有必要使用以下解决方案来保护它:https : //github.com/expressjs/csurf

我不清楚的是在这里:https : //github.com/pillarjs/understanding-csrf他们说:

当您错误地使用CSRF令牌时:...将它们添加到JSON AJAX调用中如上所述,如果您不支持CORS并且您的API严格是JSON,则将CSRF令牌添加到您的AJAX调用中绝对没有意义。

如果我们将端点限制为仅使用Content-Type: application/json,那么我们安全吗?

security csrf csrf-protection graphql graphql-js

6
推荐指数
1
解决办法
3136
查看次数

CSRF - 伪造的POST可以包含任意数据吗?

伪造的POST请求可以由不受信任的网站构建,方法是创建表单并将其发布到目标站点.但是,此POST的原始内容将由浏览器编码为以下格式:

param1=value1&param2=value2
Run Code Online (Sandbox Code Playgroud)

是否有可能不受信任的网站构造包含任意原始内容的伪造POST - 例如字符串化JSON?

{param1: value1, param2: value2}
Run Code Online (Sandbox Code Playgroud)

换句话说: 网站可以使浏览器将任意内容发布到第三方域吗?

javascript security post csrf

5
推荐指数
1
解决办法
2760
查看次数