体系的に学ぶ 安全なWebアプリケーションの作り方 第2版 メモ
同一オリジンポリシー
同一オリジンのポリシー(の仕組み)のこと。
同一 + オリジン + ポリシーと捉えてみる
同一...同じであること
オリジン...スキーム、ホスト、ポート番号の組み合わせのこと
ポリシー...政策。政略。方針。ここでの意味は仕組みのように解釈した
つまり、同一(のオリジン)でなければ、ある行為に対して、何かしらの対応をする仕組みということ
ある行為とは
HTTP Requestなど。
何かしらの対応とは
Responseをそのまま返さないようにするなど。
何が良いのか?
悪意のあるリソースにアクセスできないようにしたり、逆にアクセスされないようにする事ができる。
Cookieの属性
GPT-4
code: plaintext
Name: Cookieの名前です。これは一意の識別子として使用されます。
Value: Cookieの値です。これはサーバーがユーザーのブラウザに保存する情報を含みます。
Domain: このCookieが有効なドメインを指定します。デフォルトでは、Cookieは作成されたサイトのみに送信されます。
Path: このCookieが有効なパスを指定します。これは、特定のパートのページだけでCookieを使用するときに便利です。
Expires/Max-Age: これはCookieが有効期限を設定します。Expiresは具体的な日付を指定します。Max-Ageは、Cookieが作成されてから消去されるまでの秒数を指定します。
Secure: この属性が設定されている場合、CookieはHTTPSを介してのみ送信されます。
HttpOnly: この属性が設定されている場合、CookieはJavaScriptからアクセスできなくなります。これは、クロスサイトスクリプティング(XSS)攻撃を防ぐのに役立ちます。
SameSite: この属性は、ブラウザがクロスサイトリクエストとともにCookieを送信する方法を制御します。Strict、Lax、Noneの3つの設定があります。StrictはブラウザがCookieを同一サイトリクエストとともにのみ送信することを意味します。Laxは、ナビゲーションがトップレベルのナビゲーションである場合にのみクロスサイトリクエストとともにCookieを送信します。NoneはブラウザがすべてのクロスサイトリクエストとともにCookieを送信することを意味します。
ヌルバイト攻撃
ヌル文字を入れることでその文の「終了」をプログラムに認識させ、その後に任意のスクリプトなどを実行させられる攻撃。
ヌル文字とは
\0
こんなやつ。
データや文字列の終端を示す特殊な文字。
Rubyでは文字列として扱えるが、過去に外部のライブラリなどと実行される際脆弱性があった。
Ruby は NUL 文字を通常の文字と同様に String の一部として取り扱うことができますが、一方で、OS や各種ライブラリでは NUL 文字は文字列の終端として取り扱われるケースが多々あります。 従って、Ruby インタプリタと外部のライブラリ等とのやり取りに際しては、都度、NUL 文字を適切に取り扱う必要が発生します。 しかし、IO#open などのファイルオープン系メソッドにおいて、NUL 文字を処理しないままファイル名をライブラリに引き渡していたため、以下の例のように意図しない名前のファイルを生成することが可能となっていました。
不当な NUL 文字挿入によって意図しないファイルが生成されうる脆弱性について (CVE-2012-4522)
文字に関しては様々な注意が挙げられるが、最大数や最少数、最大値や最小値に注意すること
特にシングルクォートについては注意をしておく
code: sql
SELECT * FROM users WHERE username = '' OR '1'='1' AND password = '' OR '1'='1';
こんなことができてしまう〜
そもそもプリペアドステートメントなどを使おう
CSRF
攻撃用のWebページを作成する。(罠ページ)それを利用して、システムに意図しないリクエストを行う。
XSSはスクリプトを仕込む不正だが、CSRFは例えばログイン中のユーザーの権限で物品の購入を行わせるなど不正なリクエストを実行させてしまう。