Skip to content

Instantly share code, notes, and snippets.

@daijinload
Last active February 6, 2017 04:57
Show Gist options
  • Save daijinload/275d92d2ea7c9e4966d8c18d93abe21c to your computer and use it in GitHub Desktop.
Save daijinload/275d92d2ea7c9e4966d8c18d93abe21c to your computer and use it in GitHub Desktop.

Controllerとviewの責務


ロジックが外に漏れ出ると、外も修正が必要になる。

危険レベルが80%を超えたら赤で表示というのを、サーバーサイドとフロントで持ってしまうと、90%で赤にしたいという仕様変更で、2箇所修正になる。

フロントが来たものをそのまま表示するとなっていると、サーバーサイドでやればよくなる。けど、単純にControllerから赤と指定すると、結果変わらないので、status:creticalみたいな感じなら、良い気がします。

つまりデータだけ送るのが良いかと。表示側は送られてきたデータを見て、表示を作る。

sessionの話


通常のsession

昨日のsessionの話ですが、初めてアクセスしたときにkeyが割り当てられて、それを元に認証するのであれば、keyごとにユーザ情報が紐づく形になると思います。 その状態で、

リフレッシュトークン アクセストークン

を用意して、都度リクエスト時にアクセストークンを書き換えていけば、 どちらかのアクセストークンがダメだった際に、リフレッシュトークンを消せば、 両方アウトに出来ると思いました。

この仕様なら、マルチブラウザでも問題ないと思います。 この仕様のポイントは、ログイン時に生成されるトークンが2つになることで、 変化するものとしないものに分かれ、 変化しないものを消せば、両方ダメに出来るところですね。

SSLStripやSSLSniff

DB


長々と語ったが、今回のエントリで主張したことをまとめると、次のものに集約される。

  • データベース設計時にはドメインを意識する
  • 表示とデータは分ける
  • 同じ意味のカラムには同じ名前をつける
  • IDとなるドメインの設計時には運用まで視野にいれておく

これらを実践することで、冒頭に述べた次のような判断が的確に行えるようになるだろう。

  • 一つのカラムとして定義して良いのか、あるいは分けるべきか
  • SQLのデータ型は何にするべきか
  • 制約をつけるべきか

DB


  • パスワード変更にはtokenが必要。
  • 最終的には、token付きでパスワード変更リクエストを投げる。

ブルートフォースでアタックされた場合、変更可能。トークンが発行されるのは、第二パスワードが分かった場合だし、たとえ発行されたとしても、トークンの期限切れ前にブルートを成功させる必要がある。さらに、変更された場合、メールが届く。おかしければ、停止措置を。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment