fuka’s diary

A blog that shares my knowledge.

HTTPクエリーを正しく受け取る

HTTPクエリーを正しく受け取ることは重要です。 これには、ふたつの意味があります。 HTTPクエリーを破損なく受け入れる HTTPクエリーをバリデートし受け入れる 私が攻撃者であれば、例えば画像ファイルを偽装して、SQLやPHP、時には別のコードのインジェク…

Session機構を理解する

この記事では、Session機構の知識を共有します。 Session機構は独自に実装しない場合でも、仕組みを知ることは大切です。これは『良し悪しの議論ではない』ことを前提にした話ですが、PHPが提供するSession機構では以下の機能が提供されません。 ・Session I…

Outlook VBAによるメール作成の基礎

Outlook VBAの情報はそれほど多くないため、メール作成に限定して基礎となる情報を共有します。 メールオブジェクトを生成 Dim mail As MailItem: Set mail = CreateItem(olMailItem) メールのInspectorを表示 mail.Display 送信アカウントを指定 アカウント…

PHPにおけるプリペアドステートメントの使用

プリペアドステートメントとは、SQLの可変部分を変数のように扱う方法です。 可変部分に与えられる値を、安全にSQL構文に組み込むことが可能です。 つまり、SQLインジェクションを防げるわけですね。ただし、いくつか分かりづらい仕様があるため、知識を共有…

PHPでのMIMEタイプ取得にはmime_content_typeを使いましょう

PHPにおけるファイルのMIMEタイプ取得にはmime_content_typeを使いましょう。 一部で非推奨とする誤った情報が根強いようですが、これは2016年までの話です。 今も一部のドキュメントでは非推奨と表示されていますが、それは誤りです。mime_content_typeが取…

オブジェクト指向プログラミングとは何か

オブジェクト指向プログラミングとは何か? ある人は「多態性」、ある人は「多重定義(オーバーロード)」、ある人は「依存性の注入」として、オブジェクト指向プログラミングを説明するでしょう。 継承、仮想・抽象メンバー、オーバーライド、カプセル化な…

PHPにおけるAES暗号化アルゴリズムGCM/CBCモードの使用

PHPではopenssl_encrypt、openssl_decryptを用いて対称暗号化アルゴリズムを使用できます。 クセモノなのが、$options引数と、$iv引数です。 ここを誤ると脆弱性を書き込んでしまうので、知識を共有します。 $options引数 公式マニュアルにある通り、以下の…

本気でVBAからAES-256 CBCを扱う方法を考える

VBAからAES-256 CBCを扱う方法を理解したので共有します。本題の前に・・・時折AESのKeyの値として、MD5で取得した16進数文字列をByte列にしたものを・・・ と言うコードサンプルを見る事があります。 16進数の文字種は0-9a-fの16種類ですから、AES-256のパ…