Webの基礎知識


> 정보 출처: https://dreamhack.io/

Webの基礎知識


- HTTP


Webブラウザを使用すると、アドレスウィンドウにHTTPまたはHTTPSが表示されます.たとえば、Webブラウザを使用してDREAMコアホームに接続すると、アドレスウィンドウにhttps://dreamhack.ioが入力されていることがわかります.

HTTPまたはHTTPSは、Scheme(プロトコル)に相当するURIのコンポーネントである.プロトコルは、コンピュータ内またはコンピュータ間でデータを交換する方法を定義するルール・アーキテクチャです.
HyperTextトランスポートプロトコル(HTTP)、HyperTextトランスポートプロトコルセキュリティソケット層(HTTPS)は、Web上の通信を定義するプロトコルである.TCPまたはTLS(暗号化TCP)を使用して通信を行い、基本ポートは80(HTTP)、443(HTTPS)ポートである.
ポート番号はサーバの設定で変更できます.サーバのポート番号は必ずしも80443ではありません.たとえば、Webサーバで最も一般的なTomcatサーバのデフォルトポート番号は8080です.
HTTPSは,HTTPに存在する問題であるデータのコメント転送を補うために出現する.しかしHTTPとHTTPSのコア構造と動作原理は同じであるため、総称してHTTPと呼ぶこともできる.
HTTPは,ユーザからサーバへの要求とサーバからのユーザ要求への応答に分けられる.
次の図は、HTTPリクエストとレスポンスの簡単なデータ構造です.


Webの基礎知識


- HTTP Request


HTTPリクエストとは、サーバへのリクエストを意味します.ユーザとサーバが互いに通信するためには,互いに理解するデータ構造を伝達する必要がある.
HTTPの構成では、各行をCRLFまで改行しなければならない.
HTTPリクエストの構成において、第1行は、ユーザがサーバをリクエストする際に実行すべき動作Method、WebリソースをリクエストするパスPath、使用するHTTPバージョンを示すVersionからなる.
2行目からHeader部です.Headerは이름: 값の形で構成されている.
Headerは状況に応じて多くのデータを含む可能性があるので、CRLFをもう一度出力してHeaderセクションの最後を表示します.
最後に、Bodyはユーザデータを含む部分である.


-要求コンポーネント

  • メソッド:サーバを要求するときに実行する操作を示します.
  • Path:ユーザがサーバに要求するWebリソースのパス.
  • バージョン:HTTPのバージョンを表します.
  • Header:サーバに追加情報を伝達するデータ部分.ユーザが入力したデータ転送部と比較して、サーバとユーザが対話する情報転送部である.
  • - Method


    これらの方法はいずれも異なる目的のために設計されていますが、サーバの設定方法やWebアプリケーションの処理方法によって異なる場合があります.
  • OPTIONS:リソースの許可を要求するメソッドのリストを返します.たとえば、/loginページでOPTIONS、GET、POSTメソッドのみが許可されている場合、OPTIONS、GET、POSTが返されます.
  • HEAD:GETメソッドですが、応答するボディ部分は受け付けず、Headerのみ受け付けます.(e.g.サーバステータスチェック等)
  • GET:リソースを要求します.(e.g.投稿/プロファイル、画像などを表示)
  • POST:値を発行して特定のリソースを作成し、データを追加します.(e.g.投稿/プロファイルなどを作成)
  • PUT:特定のリソースのコンテンツを送信された値に設定します.(e.g.作成/更新等)
  • PATCH:特定のリソースコンテンツの送信値のみを変更するキー(e.g投稿更新など)
  • DELETE:特定のリソースを削除します.(e.g.投稿等を削除)
  • TRACE:要求された値を応答の主体としてクライアントに返す.
  • - Header

  • ホスト:データを送信するサーバアドレスを示します.
  • Cookie:ユーザを識別するための情報.
  • ユーザ-Agent:ユーザが使用するプログラムを示す情報.
  • Refer:ページ移動時に以前のURIの情報が表示されます.
  • コンテンツ-タイプ:ユーザーがデータを渡す処理方法とフォーマットを示します.ユーザとサーバ間のデータ処理方式は、データ通信を正常に行うために一致しなければならない.
  • Webの基礎知識


    - HTTP Response


    HTTP応答とは、ユーザ要求に対するサーバの応答を意味する.
    応答の構造も要求の構造と同様に、各行はCRLFで改行しなければならない.
    HTTP応答の構造の第1行は、サーバの状態応答コードStatus Code、すなわちバージョンとユーザ要求の状態応答コードから構成される.2行目からヘッド部分です.Header部分の各行は이름: 값の形で構成されている.CRLFをもう一度出力してヘッダの終了を表示し、サーバの応答データ部Bodyからなる.
    ネットワーク・ハッカーでは、ユーザーの入力に対するサーバの応答に注目する必要があります.たとえば、悪意のある入力を送信したときに500 Status Code(内部サーバエラー)に応答した場合、その入力がサーバに何らかの影響を及ぼしたと判断し、サーバに脆弱性が発生する可能性があります.

    - 200 OK

    Request
    GET 
    
    /index.html
    
    HTTP/1.1
    Host: dreamhack.io
    Connection: keep-alive
    User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36
    Response
    HTTP/1.1
     
    200 OK
    Server: Apache/2.4.29 (Ubuntu)
    Content-Length: 61
    Connection: Keep-Alive
    Content-Type: text/html
    
    <!doctype html>
    <html>
    <head>
    </head>
    <body>
    </body>
    </html>

    - 404 Not Found

    Request
    GET
     
    /not_found.html
     
    HTTP/1.1
    Host: dreamhack.io
    Connection: keep-alive
    User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36
    Response
    HTTP/1.1
     
    404 Not Found
    Server: Apache/2.4.29 (Ubuntu)
    Content-Length: 255
    Connection: Keep-Alive
    Content-Type: text/html
    
    <!doctype html>
    <html><head>
    <title>404 Not Found</title>
    </head><body>
    <h1>Not Found</h1>
    <p>The requested URL /not_found.html was not found on this server.</p>
    <hr>
    <address>Apache/2.4.29 (Ubuntu) Server at dreamhack.io Port 80</address>
    </body></html>

    - 500 Internal Server Error

    Request
    POST
     
    /login
     
    HTTP/1.1
    Host: dreamhack.io
    Connection: keep-alive
    User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36
    Content-Length: 16
    Content-Type: application/x-www-form-urlencoded; charset=UTF-8
    username={공격코드}
    Response
    HTTP/1.1
     
    500 Internal Server Error
    Server: Apache/2.4.29 (Ubuntu)
    Content-Length: 0
    Connection: close
    Content-Type: text/html

    -応答コンポーネント

  • バージョン:HTTPのバージョンを表します.
  • Status code:サーバによるユーザ要求の処理結果を示す.
  • Header:ユーザーと対話するデータを含めるために使用されます.e.g.ユーザ(Webブラウザ)がサーバの応答データを処理する方法およびフォーマットに関する情報、およびサーバ上でユーザを識別するためのCookie発行情報、計
  • .
  • Body:サーバ応答ユーザのデータ部分.
  • - Status code

  • 200:サーバがリクエストを正常に処理したことを示します.200 OK
    -201 Created
  • 300番エリア:ユーザーが要求したリソースが他のパスに変更されたことを示すエリア.Webブラウザが300領域のレスポンスステータスコードを返すと、レスポンスヘッダに含まれる位置決めヘッダの値にリダイレクトします.
    -301 Moved Permanetly
    -302 Found
  • 400番エリア:ユーザーがサーバに要求した構造またはデータが無効であることを示すエリア.
    -400 Bad Request:ユーザーによって渡されたデータまたは構造構文エラーのため、サーバがリクエストを理解できないことを意味します.
    -403 Forbidden:ユーザーがWebリソースにアクセスする権利がないことを示します.
    -404 Not Found:ユーザーの要求に応答できるデータがないWebリソースパスを示します.
    -405メソッドNot Allowed:ユーザ要求を表すメソッドはサーバが許可しないメソッドです.
  • 500番エリア:サーバエラーに関連するエリア.
    -500内部サーバーエラー:サーバーにエラーが発生したことを示します.
    -503 Service Unavailable:サーバがユーザーの要求を処理する準備ができていないことを示します.
  • - Header

  • コンテンツタイプ:Webブラウザでサーバ応答データを処理する方法とフォーマットを示します.
  • コンテンツ長:サーバ応答ユーザのデータ長を示す.
  • サーバ:サーバが使用するソフトウェアを示す情報.
  • Allow:ユーザーに許可されたメソッドのリストを伝えるために使用されます.
  • Location:300領域のレスポンスコードを使用する場合に変更されるWebリソースのアドレスを表します.
  • Set-Cookie:Cookieをユーザーに発行します.該当するタイトルを受け取ったWebブラウザは、該当するCookieを保存します.