質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Cookie

HTTPにおけるCookieとは、クライアントのウェブブラウザ上に保存された一時的なデータを指します。クライアント側のJavaScriptでも、サーバー側のHTTPヘッダーでもクッキーの読み書き・修正・削除が可能です。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

パスワード

パスワードは主に情報にアクセスする際に扱われます。主に、アクセス可能なユーザーを限定する手段として使われます。

ログイン

ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。

Authentication

Authentication(認証)は正当性を認証する為の工程です。ログイン処理等で使われます。

Q&A

5回答

2087閲覧

自前で認証システムを作るのは危険なのでしょうか?

kuuritar

総合スコア38

Cookie

HTTPにおけるCookieとは、クライアントのウェブブラウザ上に保存された一時的なデータを指します。クライアント側のJavaScriptでも、サーバー側のHTTPヘッダーでもクッキーの読み書き・修正・削除が可能です。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

パスワード

パスワードは主に情報にアクセスする際に扱われます。主に、アクセス可能なユーザーを限定する手段として使われます。

ログイン

ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。

Authentication

Authentication(認証)は正当性を認証する為の工程です。ログイン処理等で使われます。

0グッド

1クリップ

投稿2020/08/20 05:13

認証システムはよくライブラリや外部サービスを使っているケースが多いように感じます。
例えばRubyのdevise、Auth0など

しかしシンプルな認証システムを自前で作成することは危険なのでしょうか?

例えばですが、

  • メールアドレスとパスワードでログイン
  • パスワードはハッシュ化して保存し、ハッシュ値が同じであれば認証成功とみなす
  • 認証成功後はブラウザのcookieに認証情報を暗号化したものを保存し、以後そのcookieをみて認証済みかどうか判断する

上記のような一般的な認証システムを実装することはそこまで大きな労力には感じませんが、それをすることで冒頭に挙げたようなライブラリや外部サービスを使うより危険なことがあるのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答5

0

上記のような一般的な認証システムを実装することはそこまで大きな労力には感じませんが、それをすることで冒頭に挙げたようなライブラリや外部サービスを使うより危険なことがあるのでしょうか?

要件定義や設計が完了しているのであれば、確かに労力はそれほどかからないと思います。
が、認証システム(というか、会員管理システム)は適切に設計することすら大きな労力を伴います。

システムのセキュリティ精度を一定以上に保つためには脅威分析を行わねばならず、脅威分析を行うには、脅威自体を網羅的に知る必要がありますが、この「網羅的に脅威を知る(洗い出す)」という行為が非常にハードルが高いです。
情報の性質として仕方ないのですが、クローズドな情報として扱われるケースが多く、この部分において、セキュリティの専門家と一般エンジニアの持つ情報量の乖離は絶望的です。。。

シェアの大きなフレームワークや有名ライブラリでは、この部分を集合知で乗り切ろうとしています。
コードをオープンにすることで、クローズドな情報も持った方からも実装の提案を受けやすくし、「それなりに安全なシステム」として成立できる程度を結果として保てるようになります。

ごく一般論としてですが、集合知によってなされたコード群の背景にある要件は、一般システムの持つ要件を包括しています。そのため、(ホントに要件を満たしているかの確認は必要ですが)自前で実装するよりもはるかに安全に使用することが可能です。

個人的には、フレームワークやライブラリが、その実装の背景にある要件や設計を明文化していないケースが多いのが不満ですが、それでも実利を考えると、フレームワークの使用やライブラリの使用をオススメします。

投稿2020/08/20 07:46

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/08/20 07:53 編集

ただ、フレームワークやライブラリの使用方法を間違って、逆に穴をあけてしまうってケースもあるんですよね。。。重要部分はちゃんと一度は理解しておきたいですね。
guest

0

一昔前では、自前で作るのが当たり前だったわけですから、
アプリケーションを作る事自体はそんなにハードルは高くないでしょう。
ノウハウなどを勉強するための情報も、十分にあると思います。
どうしても不安なら、セキュリティに強い会社に相談してもいいでしょうし。

結局、運営側で一番嫌な事ってのは、**「個人情報を自分たちの管理下で持つ」**ってところなんですよね。
クレデンシャルの情報もそうですし、カード番号などもなるべく持ちたくありません。
アプリがセキュアでも内部の人間が業者に売り飛ばすかもしれませんしね。
そういう意味でも、外部に委譲した方が楽な事が多いってだけです。

あと、TwitterやFacebookなどの有名なサービスでのOAuthが用意されていると、
ユーザーの会員登録へのハードルが下がるという効果もあるかもしれませんね。

投稿2020/08/20 05:53

編集2020/08/20 06:37
root_jp

総合スコア4666

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

危険になるかどうかは質問者さんの技量次第です。
例えば、攻撃方法や防御方法を熟知した上で作成するなら、既存のより圧倒的に柔軟性の高いのができると思いますが、それらを持ち合わせていない・自信がないなら避けるのが無難だと思います。

投稿2020/08/20 05:18

kyoya0819

総合スコア10429

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kuuritar

2020/08/20 05:20

なるほど、ありがとうございます 一般的に広く使われているものはそういった攻撃などを考慮されているということですね。 1例でも良いので、想像できる攻撃などあればおしえていただけないでしょうか。
kyoya0819

2020/08/20 05:24 編集

どのようなツール、規格を用いるかによって異なってきますが、 SQLインジェクションやセッションハイジャックなどが有名だと思います。 その他にもいろいろありますので、セキュリティを学んでみると良いと思います。
退会済みユーザー

退会済みユーザー

2020/08/20 05:25

ごく一般論で、以下が問題となります。 > メールアドレスとパスワードでログイン 昨今の傾向として、無対策だと辞書攻撃に弱いです。 > パスワードはハッシュ化して保存し、ハッシュ値が同じであれば認証成功とみなす ハッシュ化だけであれば、漏洩時にレインボーなやつでサクッと解析されます。 > 認証成功後はブラウザのcookieに認証情報を暗号化したものを保存し、以後そのcookieをみて認証済みかどうか判断する cookie に情報を持たせた場合、暗号化手順によっては解析可能です。 これは、session id だった場合も同様です。
kuuritar

2020/08/20 05:31

詳しくありがとうございます。 確かに解析された場合の対策、もしくは認証突破後のプラスαが必要そうですね
miyabi_takatsuk

2020/08/20 06:27

あと、パスワード暗号化 + アクセストークンを生成するのがトレンドになっていると思います。 フロントエンドフレームワークの普及で、APIを使用する機会が増えているため、 ログイン後の、各API実行は、ハッシュ認証を必ず行うようにする方式です。 te2jiさんの仰るものプラス、ユーザーに入力させるパスワードはログイン時のみで、その後は発行されたアクセストークンによって認証かける方式です。
guest

0

認証成功後はブラウザのcookieに認証情報を暗号化したものを保存し、以後そのcookieをみて認証済みかどうか判断する

これだけだと、cookieを「盗まれる」ような事があると不正ログインに使用される事がありますね。
だから、その認証を失効させる手段が必要な訳です。
(OAuthなんか使ってるとそういうページありますよね。)

で、cookieが盗まれる、というのはそのシステム側だけでなく、ブラウザ側のバグにより漏れる事があったりもするので、そういったシーケンスもろもろ合わせて使用する(つまりは、〇〇ライブラリを使う)というような話になる訳です。

投稿2020/08/20 05:23

yoorwm

総合スコア1305

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kuuritar

2020/08/20 05:25

>認証を失効させる手段 >ブラウザ側のバグにより漏れる事があったりもする ありがとうございます。 確かに敏感にそこに対応していくには専任の人間がいないと厳しい印象ですね。
guest

0

実装上の問題もありえますが、設計上の問題が大きそうですね。
パスワード保護だけとっても、単に「ハッシュで保存すればよい」というものではありません。このテーマでYouTube動画を作ったものがありますので、よろしければどうぞ。3本でトータル35分くらいかかります。

ウェブサイトにおけるパスワード保護の重用性 - YouTube

投稿2020/08/20 12:49

ockeghem

総合スコア11705

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問