Programming
SQLクエリと識別子エスケープの話
Facebookでこんなやり取りをしました。元々公開設定で投稿した物で、議論させて頂いた浅川さんにも「ブログOK」と許可も頂いたので、そのやり取りの部分だけを紹介します。 テーマは「SQLクエリと識別子エスケープ」です。 とあるブログの結論として "「安全な静的SQLの発行方法」を開発者に啓蒙すればいいだけだ。つまり プリペアドクエリでSQL発行は行うこと …
hash_hkdf()でわざわざバイナリキー/バイナリSaltを使うことに意味はない
PHP 7.1で追加された hash_hkdf() は出鱈目なシグニチャを持っています。バイナリキーを使うことを想定して、わざわざ既存のハッシュ関数とは異なり、バイナリハッシュ値だけを返せるようになっています。 暗号化がプログラム内で完結する、といった極一部の例外を除きhash_hkdf()でわざわざバイナリキーを使う意味はありません。 CSRFキーを守る、…
validate-phpのPHPスクリプト版
入力バリデーションCモジュール、Validate PHPモジュールのスクリプト版を紹介します。既存のバリデーション用ライブラリとは一味違います。 (さらに…)
「脆弱性を局所的に潰す」はアンチプラクティス
本物の「セキュアコーディング」(セキュアプログラミング)を知ればもう議論など必要ない、と思っています。本物の「セキュアコーディング」を「知ろうとしない」と幾らでもアンチプラクティスを作ってしまいます。 議論は終り、と思っていたのですがそうも行かないようなので紹介します。セキュアコーディングの概念を全く知ろうとしないで、セキュリティを作るのは「ただの無駄」です…
エンジニアなら理解る文字エンコーディングバリデーションの必要性
入力バリデーションで文字列の妥当性を検証(保証)しないと、不正文字問題の解決はできません。 よく「文字エンコーディングバリデーションは入力バリデーションしなければならない」と紹介はするのですが、その理由を詳しく解説していませんでした。これは文字エンコーディング攻撃の仕組みを理解してれば分かる事なのでしていませんでした。 しかし、文字エンコーディング攻撃の仕組…
IPAは基礎的誤りを明示し、正しい原則を開発者に啓蒙すべき
セキュアコーディングの第1原則は「入力をバリデーションする」です。セキュアコーディングの第1原則はソフトウェアセキュリティの一丁目一番地と言えるセキュリティ対策です。 入力バリデーションを第一のセキュリティ対策としているガイドライン: CERT Top 10 Secure Coding Practices OWASP Secure Coding ‐ Quic…
ベストプラクティスもどきのアンチプラクティス TOP 10
ここ十数年で見聞きした、脆弱なアプリを作ってきたベストプラクティスもどきのアンチプラクティス、をリストアップしてみます。 限定された条件ではベストプラクティスと言える物でも、一般化するとアンチプラクティスになる物は多いです。 コード検査をしていると良く分るのですが、アンチプラクティスは強力な破壊力を持っています。ここに書いているアンチプラクティスを無くすだけ…