2022年3月16日T.I.L認証/セキュリティ
認定/セキュリティインフラストラクチャの目標
特定のサービスを完了することで、2つのトピックを集中的に学習します.
登録とログイン、ログアウトなどの機能が実装されます.さらに,認証(authentication)という重要な概念についても議論する.
クライアント、サーバ、およびデータベースを理解し、完全なスタック開発環境での完全なプロセスと操作を理解します.
Achievement Goals
暗号化やhashing,saltingなどの概念が理解できる.
HTTPとHTTPSの違いが理解できます.
ライセンスと資格認定について説明します.
Cookieの仕組みが理解できる
セッションとCookie/Tocken/OAuthで認証できます.
クライアント、サーバ、データベースの全体的な動作を理解できます.
会員登録や登録などのユーザー認証を体現し理解する.
サービスセキュリティに関する方法を理解し、原理とメリットとデメリットを理解します.
HTTPS
Hyper Text Treansferプロトコルセキュリティソケット層の略
HTTPプロトコルの内容を暗号化する方法SSL、TLSアルゴリズム
SSL : Secure Sockets Layer; 2018年から、グーグルはSSL証明書を含まないサイトにアクセスする際、「不安全」の処罰を行う.
TLS : Transport Layer Security; 強力なSSLバージョン
従来のHTTPは、要求を簡単にブロックして情報を表示することができる.
HTTPSは証明書、CAと非対称暗号化によって情報を暗号化する!!
しかしHTTPSはなぜ使いますか?
Hyper Text Treansferプロトコルセキュリティソケット層の略
HTTPプロトコルの内容を暗号化する方法SSL、TLSアルゴリズム
SSL : Secure Sockets Layer; 2018年から、グーグルはSSL証明書を含まないサイトにアクセスする際、「不安全」の処罰を行う.
TLS : Transport Layer Security; 強力なSSLバージョン
従来のHTTPは、要求を簡単にブロックして情報を表示することができる.
HTTPSは証明書、CAと非対称暗号化によって情報を暗号化する!!
しかしHTTPSはなぜ使いますか?
クライアントはデータプロバイダから提供されたデータを使用できません.
しかし、仲介者の攻撃を受けやすい.
HTTPSパケットの解析中に表示されない
証明書
データプロバイダのアイデンティティを確保し、証明書の内容がドメインに依存していることを確認します.
例えば、サーバが要求を受信すると、サーバは
証明書ドメインと応答オブジェクトドメインを送信!もしこの2つのドメインが同じなら、私は認めます.
ハッカーが真ん中でドメイン名を変更すると、これはおかしいと教えてくれます!
CA
認証機関です!
このCAの資格は更新され続けます!
非対称鍵暗号化
RSAのような方法
ただし、すべてのプロシージャで公開鍵が使用されている場合は、演算量が大きすぎます.
通信用の第1部のみ!
Hashing 任意のデータを他のデータにマッピング!した関数をハッシュ関数と呼びます! もちろんパスワードとかつけて、人に気づかれないように! ここにsaltを追加します。 アルゴリズムが解読されてもsaltバーのパスワードにもっと多くのものを追加しました 原価は人に気づかれない! saltは再利用できません 各ユーザーはsaltを異なる程度に使用する必要があります。saltはdbに保存する必要があります。 cookie HTTPリクエストを無状態と呼ぶ. 私がクーボンをぶらぶらしていても、私たちの情報はどのように維持できますか? (でもdbに格納されている可能性もあるでしょう?)Cookieのおかげで クッキーって何? サイトにアクセスすると、サーバはクライアントに一方向にアクセスします。転送されたミニデータ サーバは、Webブラウザに情報を転送することもできます。 逆に、Cookieをクライアントからサーバに転送することも含まれています! そのサーバーはいったい私に何のクッキーを送ってくれたのですか? たとえば、暗いモードを維持したり、idを保存したりします。 Cookieオプション document.cookie = "user=John; path=/; expires=Tue, 19 Jan 2038 03:14:07 GMT" ドメインオプション document.cookie = "user=John" クライアントからクッキーを転送するには、クッキーのドメインオプションをサーバ上のドメインと一致させる必要があります。 パスオプション path=/mypath これは、サーバがルーティング時に使用するパスです。 基本的には たとえば、Pathが/usersに設定され、実際に要求されたパスが/user/loginである場合。 いずれにしても/usersは満足しているのでCookieを送ることができます MaxAgentまたはExpiresオプション >//一日後 let date = new Date(Date.now() + 86400e3); date = date.toUTCString(); document.cookie = "user=John; expires=" + date; 例えば、pcルームで、ある日ログインせずに出てきました。 では、サーバーはCookieというオプションを与えて、しばらくしてから自動的に消えてしまいます! セキュリティオプション >//(https://を使用して通信すると仮定) //設定したCookieはHTTPS通信時のみアクセス可能 document.cookie = "user=John; secure"; trueの場合、Cookieは「HTTPS」プロトコルを使用して通信する場合にのみ送信されます。 -Httplyオプションのみ 基本的にfalse! 例えば、Cookieは<script>タグでアクセスできるため、XSS攻撃を受けやすい。 HttpOnlyオプションを使用してtrueに変更し、<script>タグを無効にします。 XSS攻撃 サイト間スクリプト: 攻撃者が相手のブラウザでスクリプトを実行して、ユーザーセッションをブロックしたり、ウェブサイトを改ざんしたり、悪意のあるコンテンツを挿入したり、ネット釣り攻撃をしたりすることを指す。 SameSiteオプション Cross-Originリクエストが受信された場合、リクエストで使用されるメソッドとそのオプションの組み合わせによって、サーバがCookieを転送するかどうかを決定します。 Lax:Cross-OriginリクエストはCookieをGETメソッドにのみ送信できます。 Strict:Cookieは、Cross-Origin以外の同じサイトでのみ転送されます。 None:いつもCookieを送ることができます。ただし、Cookieオプションでは、セキュリティオプションが必要です。ㅄㅄ 選択肢はたくさんありますが、基本的には CookieはJSを使ってCookieにアクセスできるので、長い時間保持できます。 機密情報を含まないでください。 Session Cookie認証とは異なるセッション方式 ユーザー検証に成功したステータスをセッションと呼びます。 サーバは、ユーザーが認証に成功したことを知っている必要があります。 クライアントには、認証の成功を証明する手段が必要です。 では今。 セッションは、サーバがクライアントに提供する一意で暗号化されたセッションIDです。 重要なデータはサーバが管理する セッションidが返され、サーバが暗号化し、セッションIDとして保存してクライアントに転送します。 その後、セッションIDを使用して必要なタスクを実行し続けます。 脱退したいなら? サーバ上のセッション情報を削除し、クライアントCookieをリフレッシュすればいい! サーバはクライアントのクッキーを勝手に削除することはできませんが、set-cookieを使用してセッションIDの鍵値を無効にすることができます。 しかし、このような会話を処理するのは面倒なのではないでしょうか。だから。 express-session という名前のモジュールがあります。これはミドルウェアです GitHub: express-session
これらのミドルウェアを使用すると、セッションにCookieを含めたり、いろいろなことをすることができます.
ビスケットのやり方と何が違いますか?
セッションサーバに情報を格納
セッションは信頼できるユーザーであり、サーバ上で表示できます.
でも会話の欠点は?
サーバ・ユーザーが非常に多い場合は、各ユーザーがサーバに情報を格納し、負荷が増加します.
セッションでもCookieを使い、XSS攻撃でCookieを奪うことができます!
ではとりあえずセシオンスプリントを見てみましょう!
セッション印刷(サーバ実装)
最初の土地指数。js部分
セキュリティ上の理由から、Cookieはデフォルトでリクエストに送信できません.
Cookieで認証するには、まずリクエストに送信する必要があります.
証明書セクションをtrueに変更する必要があります(XMLベースでは、fetchはtrueではなくincludeを使用します).
リファレンス
証明書をコピーしなければなりません!!
ブランチ(ルーティング/user.js)
ログインを実現し、ログアウトを実現し、userinfoを実現する3つ!
一人ずつ見てみましょう.
インプリメンテーションログイン(controller/users/login.js)
async,waitよく書いてfindOne文法チェック!
これをuserInfoとして確認
userInfoを使用するかどうかによって応答します!!
ログアウトの実装(コントローラ/ユーザー/logout.js)
controller/logout.js (POST/users/logout)
セッションオブジェクトに格納されている値が存在する場合、
セッションを削除します.(クライアントCookieが自動更新)
クイックセッションを使用する場合は、ログイン時にreqを使用します.セッションオブジェクトに含まれる情報はuserid値です
情報がなければ400を出します.
情報があれば.
セッションオブジェクトのuserId情報を削除します.
どうして200回送って201じゃないの?ログアウトだからですか?
userInfoインプリメンテーション(controller/user/userInfo.js)
セッションオブジェクトに格納されている値が存在する場合、
データベースでユーザー情報を問合せ、応答として送信します.
セッションオブジェクトに格納されている値が存在しない場合.
要求を却下する.
保存された値が存在しない場合は拒否されます
あったら戻って終わります!@
セッションエージェント(クライアント実装)
フルフロー(App.js)
現在のステータスは、isLogin(ログイン済み)とuserDataによって管理されます.
Mypage素子は、Login素子を有する.
Login構成部品
あのAxiospost部分は勉強します!なぜかただの道具logoutHandlerが使えるか分からない!!
Mypage素子
ここでAxiospost送信時にnullデータを送信しないとエラー...内容タイプなども送ってきます.
Reference
この問題について(2022年3月16日T.I.L認証/セキュリティ), 我々は、より多くの情報をここで見つけました
https://velog.io/@mageboy/2022-03-16-T.I.L-인증보안
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
Reference
この問題について(2022年3月16日T.I.L認証/セキュリティ), 我々は、より多くの情報をここで見つけました https://velog.io/@mageboy/2022-03-16-T.I.L-인증보안テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol