HTTP 、Cookieについて

クロスサイトスクリプティングXSS

攻撃対象のWebサイトの脆弱性を突き、攻撃者がそこに悪質なサイトへ誘導するスクリプトを仕掛けることで、サイトに訪れるユーザーの個人情報などを詐取する攻撃のことを指します。
ユーザからの入力内容をもとにWebページを生成するサイト(例:アンケートサイト、サイト内検索、ブログ、掲示板など)やTwitterのようなWebアプリケーションで、Webアプリケーションの脆弱性を利用して悪意のあるデータを埋め込み、スクリプトを実行させる攻撃手法

TelnetでのGETリクエストとPOST リクエス

GETリクエスト
❯ telnet dummy-bootcamp-fjord-jp.herokuapp.com 80
Trying 18.211.231.38...
Connected to dummy-bootcamp-fjord-jp.herokuapp.com.
Escape character is '^]'.
GET /articles/new HTTP/1.1
Host: dummy-bootcamp-fjord-jp.herokuapp.com

HTTP/1.1 200 OK
Server: Cowboy
Date: Thu, 30 Jun 2022 01:10:30 GMT
Connection: keep-alive
X-Frame-Options: SAMEORIGIN
X-Xss-Protection: 1; mode=block
X-Content-Type-Options: nosniff
X-Download-Options: noopen
X-Permitted-Cross-Domain-Policies: none
Referrer-Policy: strict-origin-when-cross-origin
Content-Type: text/html; charset=utf-8
Etag: W/"b050d1b1378ebf0aff7e9d0f342189d1"
Cache-Control: max-age=0, private, must-revalidate
Set-Cookie: _dummy_session=n9nT2cSCkVAUB7Yv%2BVRthcCsFjUlpK3k%2BG1%2FBhXDk2bNj7DV7oAGwj0NllLVLRk3pUQTv09sJMX1lP576lwAJIsV7%2BZ9Mari3Gd%2FQQ0cH167WmXcPddcD%2FpRRlQQML6wTtl%2FgUXWnwjmdXkRZH0%3D--TxGnOqRtVHScTRvv--uYrEdfNOrcD5ux0zqPzbGg%3D%3D; path=/; HttpOnly
X-Request-Id: 37502732-57cf-4b75-80e1-bdce6f2be3ab
X-Runtime: 0.006587
Transfer-Encoding: chunked
Via: 1.1 vegur

5ac
<!DOCTYPE html>
<html>
  <head>
    <title>Dummy</title>
    <meta name="csrf-param" content="authenticity_token" />
<meta name="csrf-token" content="jiEHD6ugQtvGsWjb30qOTMMJoWxL7GvLXlxmmZpAUuZpdd0dAo0d31RFtxPX2HZsHOw5TWZENUXSfve2Xo3Ywg==" />
    

    <link rel="stylesheet" media="all" href="/assets/application-d1be5ed5b6cb78061a7ea5e9df80c77ce9b19eb122de40305e7401ac7e02ed34.css" data-turbolinks-track="reload" />
    <script src="/assets/application-8483c49ae067c8c2030ca05a405b92c5b91e3ae4a45d24efb3f102d271382d3b.js" data-turbolinks-track="reload"></script>
  </head>

  <body>
    <div class="container">
      <h1>New Article</h1>

<form action="/articles" accept-charset="UTF-8" method="post"><input name="utf8" type="hidden" value="&#x2713;" /><input type="hidden" name="authenticity_token" value="Ph+E90yWytJC5PDjDsA6qS+6FXQp9cK2gVN8YLHaWMV5PXxkhrySsN89l8TCtpcl8zwOdAG404S5/SM0t4LsPg==" />

  <div class="form-group">
    <label for="article_title">Title</label>
    <input class="form-control" type="text" name="article[title]" id="article_title" />
  </div>

  <div class="form-group">
    <label for="article_body">Body</label>
    <textarea class="form-control" name="article[body]" id="article_body">
</textarea>
  </div>

  <div class="form-group">
    <input type="submit" name="commit" value="Submit" class="btn btn-primary" data-disable-with="Submit" />
  </div>
</form>

<a href="/articles">Back</a>

    </div>
  </body>
</html>

0
POSTリクエスト
❯ telnet dummy-bootcamp-fjord-jp.herokuapp.com 80
Trying 54.205.8.205...
Connected to dummy-bootcamp-fjord-jp.herokuapp.com.
Escape character is '^]'.
POST /articles HTTP/1.1
HOST: dummy-bootcamp-fjord-jp.herokuapp.com
Content-Length: 44

article[title]=mame&article[body]=Hi!&commit
HTTP/1.1 302 Found
Server: Cowboy
Date: Thu, 30 Jun 2022 02:35:57 GMT
Connection: keep-alive
X-Frame-Options: SAMEORIGIN
X-Xss-Protection: 1; mode=block
X-Content-Type-Options: nosniff
X-Download-Options: noopen
X-Permitted-Cross-Domain-Policies: none
Referrer-Policy: strict-origin-when-cross-origin
Content-Type: text/html; charset=utf-8
Location: http://dummy-bootcamp-fjord-jp.herokuapp.com/articles/1438
Cache-Control: no-cache
X-Request-Id: a4b746be-ba4f-4710-9594-259c13816c2e
X-Runtime: 0.008595
Transfer-Encoding: chunked
Via: 1.1 vegur

7c
<html><body>You are being <a href="http://dummy-bootcamp-fjord-jp.herokuapp.com/articles/1438">redirected</a>.</body></html>
0

Postリクエストの送信先は、データを入力するarticles/newかなと思ったが、それだとエラーになってしまう。
Postリクエストを送った後のRailsの挙動が分からないので、その後の処理がどうなっているのかが分からず想像がつかない。
ここはrailsを勉強してからもう少し理解できれば良いかなと思います。

Postリクエストの内容としては、きちんと送信され、データも保存された。

Pasted Graphic 5.png

リクエスト行の書き方

「メソッド リクエスURI  HTTPバージョン」
・「メソッド」はGETやPOSTといったもの
・「リクエスURI」はURL中の絶対パス以降の部分
・「HTTPバージョン」は、通常「HTTP/1.0」や「HTTP/1.1」といったバージョンが入る。

ヘッダ

ヘッダ

ボディ

PostのデータやHTML文などのやり取りする内容が入る

その他

これはまだ理解出来ていないが、アプリをを作れるレベルまで行った時に読み返したい。
Post/Redirect/Get (PRG) パターン - Qiita

HTTP Cookieの事。
Webサーバーからユーザのコンピュータに送られる情報の一部で、データ伝達の"HTTP Header"と呼ばれる物の中で送信され、Webブラウザ中に内部的に保存されます。
(リクエストとレスポンスの度に"HTTP Header”の中に入れられる)
次に、この同じサーバーにアクセスしたとき、サーバーはHTTP Cookieを読み戻しユーザの認識(同定や認証)に利用します。

セッションクッ キーより保存される期間の長いクッキー。
一回ログインすると一定期間(2週間とか60日とか)の間にそのフォーラムにアクセスすると自 動ログインされるのは、パーシステントクッキーがサーバーに読み戻されていることによります。
セッションクッキーと異なりパーシステントクッキーはWebブラウザを終了してもWebブラウザ内部に保存されています

インターネットメールプロバイダにログインするときなどに使用されています。最初にログインすると、メールを表示させようとする度 にアクセス情報(IDやパスワード)を入力しなくても良いのは、このセッションクッキーのおかげです。また、オンラインバンクの認証もセッションクッキー が使用されています。いずれも、サーバーに対する要求が特定の時間内(たとえば、5分)であれば、ユーザ認証が継続されている事例です。
セッションクッキーはサーバーに対するセッションが終了した時点で(通常、ブラウザを終了した時点で)破棄されます

・クッキーはWebサイトにアクセスしたユーザーの情報を保存しています。

セッションとは

クッキーと同じくサーバー上の一時ディレクトリに保存されたデータのことです。このデータは、ユーザーがWebサイトにいる間、サイト上のすべてのページで利用可能になり、ユーザーがブラウザを閉じるか、サイトを離れると情報が削除されます。

セッションもクッキーと同様にデータを保存していますが、セッションは接続中のユーザーの活動に関連する情報を一時的に保存しています。
例えば、ショッピングサイトを閲覧していて、ある商品をショッピングカートに入れた後、Webサイトを離れ、再度戻ってきたときに、ショッピングカートに商品が入ったままになっているのは、セッションによって情報を保存していたからです。

Webサイトがサポートしてくれる機能の多くは、クッキーとセッションを組み合わせて実現しています。
クッキーは「誰が」の情報を取得し、セッションは「何をしたか?」という情報を取得しています。

・保存場所
クッキー・・クライアント側のマシン(主にブラウザ)にのみ保存される
セッション・・ブラウザだけでなく、サーバーにも情報が保存される

・保存期間
セッション・・ユーザーがブラウザを閉じるか、サイトを離れると情報が削除される
クッキー・・永続クッキーは情報を保持し続ける

・さらに、大きなポイントとしてはセッションは無効にできないが、クッキーは無効にすることができる。

確かセッションはRailsのコードに自分で書くものだったと思う。
それでサーバーにも情報が保存されるものなのかなと思う。これもRailsに入ったらもう少し詳しく調べたい。

参考にしたもの

Cookieとセッション管理 - Qiita
クッキー(Cookie)とセッションとキャッシュの違いは何か?