1

私は現在、iPhoneアプリ用のRailsバックエンドを構築しています。iphoneは、iphoneアプリが解析して適切に表示するJSONを返す特別なコントローラーにアクセスします。Railsアプリには管理パネルがあり、iphoneアプリの新しいデータを挿入するために使用されます。その認証はDeviseによって制御されます。それ以外では、iphoneアプリは機能するためにユーザー情報を必要としないため、複雑な認証を行う必要はありません。

これが私が立ち往生しているところです。ユーザーがアプリからフィードバックを送信できるコントローラーを追加しました。そのフィードバックはRailのデータベースに保存されます。これを行うために、私はそのコントローラーメソッドprotect_from_forgeryを使用してオフにしました。skip_before_filter :verify_authenticity_token, :only => [ :create ]しかし、これを行うことで、セキュリティ上の問題が発生することを理解しています。また、この回答この回答に従って、カスタム保護(トークンなど)を作成する必要があることも理解しています。私のWeb検索では、DeviseまたはOauthを使用してこれを行う方法しか見つかりませんでしたが、前述したように、iPhoneのユーザー認証はありません。私がやりたいのは、何かが足りない場合を除いて、この1つのセキュリティホールを埋めることです。この特定の状況に関する記事を見つけるのに苦労しています。

4

2 に答える 2

0

デフォルトでは、onが付いているRailsアプリは、次のように、ページに関する情報:protect_from_forgeryに信頼性トークンを含めます。<meta>

<meta content="arBBP614zvMxug9+5ozHakrXhAaTNmQ9aBJ/Ehp3nl8=" name="csrf-token">

あなたがする必要があるのは、あなたのフォームのプレーンな古いhtmlコピーを:protect_from_forgeryonでダウンロードすることです。そうすれば、このタグが生成されます。次に、そのHTMLをに含めると、NSString*次のようなトークンを見つけることができます。

    NSArray* firstArray = [htmlString componentsSeparatedByString:@"\" name=\"csrf-token\">"];
    NSArray* secondArray = [[firstArray objectAtIndex:0] componentsSeparatedByString:@"<meta content=\""];
    NSString* authToken = [secondArray objectAtIndex:1];

次に、ヘッダーフィールドauthTokenとして送信する必要があります。X-CSRF-Tokenこれらは通常あまり頻繁に変更されないので、おそらくしばらくの間コピーを保持することができます。

于 2013-01-15T04:44:53.890 に答える
0

私は自分の選んだトークンを思いついた。を使用してトークンをチェックするようにコントローラーをセットアップしますbefore_filter。次に、SSLですべてをロックします。

before_filter :has_token?, only: :create
skip_before_filter :authenticate_user!, :verify_authenticity_token, only: :create

トークンを確認するために使用している方法は次のとおりです。

def has_token?
  if request.request_parameters[:token] == "SECRET"
    true
  else
    head :unauthorized
  end
end

次に、トークンは iPhone アプリにハード コードされ、Rails バックエンドに送信されるパラメーターと共に渡されます。これは、トークンを変更する必要がある場合、iPhone アプリの新しいバージョンをリリースする必要があることを意味しますが、これにより、何が起こっているかをより詳細に制御できます。

于 2013-01-18T17:06:44.350 に答える