PHP Security
覚えるパスワードの作り方
覚えなくて構わないパスワード(ブラウザなどのパスワードマネージャーに記憶させる最強のパスワード)の作り方は、 https://blog.ohgaki.net/random_password_strings で紹介しました。最強のパスワードを自分で作るのが面倒な方はこのページのランダム文字列から90文字くらいをコピー&ペーストして使ってください。 今回は覚えら…
”形式的検証”と”組み合わせ爆発”から学ぶ入力バリデーション
形式的検証とは 形式的検証(けいしきてきけんしょう)とは、ハードウェアおよびソフトウェアのシステムにおいて形式手法や数学を利用し、何らかの形式仕様記述やプロパティに照らしてシステムが正しいことを証明したり、逆に正しくないことを証明することである 英語ではFormal Verificationとされ formal verification is the act…
X-Content-Type-Options: nosniff はIE以外にも必要
往年のWeb開発者であれば X-Content-Type-Options: nosniff はIE専用のオプションHTTPヘッダーだと理解している方が多いと思います。 この理解は正しかったのですが、現在は正しくありません。nosniffはChromeやFirefoxの動作にも影響与えます。このため、IEをサポートしないサイトであっても X…
覚えないパスワードは生成する物 〜 余計な文字数制限などは有害 〜
Webサイトにはパスワードの登録に余計な制限をかけているサイトが少なからずあります。特に最悪なのはたった20文字程度のパスワードしか許可しないサイトです。 Webサイトのパスワードは基本的には覚える必要がありません。安全性を第一に考えると十分過ぎるくらいの長さのランダムパスワードを設定する/設定できるようにすると良いです。 参考:覚える場合のパスワードの作り…
hash_hkdf()でわざわざバイナリキー/バイナリSaltを使うことに意味はない
PHP 7.1で追加された hash_hkdf() は出鱈目なシグニチャを持っています。バイナリキーを使うことを想定して、わざわざ既存のハッシュ関数とは異なり、バイナリハッシュ値だけを返せるようになっています。 暗号化がプログラム内で完結する、といった極一部の例外を除きhash_hkdf()でわざわざバイナリキーを使う意味はありません。 CSRFキーを守る、…
Computer Programming Fundamentals and Principles – Input Validation
I had discussion on PHP dev mailing list. It appeared that not few developers misunderstand "What is Input Validations". Therefore, I summarize computer programming fundamentals an…
validate-phpのPHPスクリプト版
入力バリデーションCモジュール、Validate PHPモジュールのスクリプト版を紹介します。既存のバリデーション用ライブラリとは一味違います。 (さらに…)
「脆弱性を局所的に潰す」はアンチプラクティス
本物の「セキュアコーディング」(セキュアプログラミング)を知ればもう議論など必要ない、と思っています。本物の「セキュアコーディング」を「知ろうとしない」と幾らでもアンチプラクティスを作ってしまいます。 議論は終り、と思っていたのですがそうも行かないようなので紹介します。セキュアコーディングの概念を全く知ろうとしないで、セキュリティを作るのは「ただの無駄」です…
エンジニアなら理解る文字エンコーディングバリデーションの必要性
入力バリデーションで文字列の妥当性を検証(保証)しないと、不正文字問題の解決はできません。 よく「文字エンコーディングバリデーションは入力バリデーションしなければならない」と紹介はするのですが、その理由を詳しく解説していませんでした。これは文字エンコーディング攻撃の仕組みを理解してれば分かる事なのでしていませんでした。 しかし、文字エンコーディング攻撃の仕組…