2

あいまいだと思うので、質問を編集して簡単にしました。だから私はそれをシンプルにしました。ブラウザに保存された Cookie を使用して API を使用してユーザーを認証したい。もちろん、Cookie はログインごとにランダムに変更されます。

情報知識 : バックエンドでのカスタム API と php の使用

また、テンプレート エンジンのフロントエンドとして Javascript と Tempojs を使用します。

編集:

私のアルゴリズムは次のようになります。データベースには、ログインごとに変更されるフィールドが 1 つだけあります。これは、毎回増加する login-attempt です。

ユーザーが php を使用してログインするとき。セッションと Cookie が生成され、API への接続に使用される 1 つの Cookie が

hash of (username + login attempt+ salt)= xxxxxxxyyyyyyxxxxxx

これで、Api は Cookie の値がどうあるべきかを認識し、ユーザーが正しいことを確認してデータに応答します。これで、ユーザーがログアウトすると Cookie の有効期限が切れ、API が認証できなくなります。投稿するユーザーのデータを取得するために使用するもの

別のサブドメインにある api サーバーに xmlhttprequest を介して Cookie を送信し、データを Web アプリケーションにロードします。

これは、この方法が脆弱または安全でないと誰かが考えている場合の私の計画です。私に知らせてください。はい、クロスドメインリクエストに使用します

header("Access-Control-Allow-Origin: *") または header("Access-Control-Allow-Origin: 'www.website.com'")

しかし、代替手段がある場合は、jsonp を使用できることを説明してください。

4

1 に答える 1

3

提案されたソリューションは良さそうです。ただし、次の点を確認する必要があります。

  • ハッシュ内のソルトが十分な長さであることを確認してください (少し長めですが、安全のために 32 文字を使用します)。
  • ソルトが実際にハッシュ関数の最後のコンポーネントであることを確認してください。そうでない場合、場合によっては、攻撃者が独自の Cookie を作成する可能性があります (方法は次のとおりです)。
  • ハッシュを行うときは区切り文字を使用します。たとえば、ユーザーfooがいて別のユーザーがfoo1いる場合、区切り文字を使用しないと、次のようになります: foo11 回目hash("foo11"+salt)にログインしたfoo1とき、彼の Cookie はhash("foo11"+salt). hash(user+"|"+login_attempt+"|"+salt)それは悪いので、代わりに次のようなことをしてください。
  • APIサーバーもAccess-Control-Allow-Credentials: trueヘッダーを送信する必要があると思います。

また、ユーザーがコンピューター A からログインしてからコンピューター B からログインすると、コンピューター A からのセッションは無効になることにも注意してください。

于 2013-03-30T10:12:38.020 に答える