Programming
ホワイトリスト派とブラックリスト派 〜 セキュアコーディングが行われない理由
セキュアコーディングの原則1は「信頼できない入力を全てバリデーションする」です。この原則は国際情報セキュリティ標準でも当たり前の要求事項となっています。しかし、残念ながら「信頼できない入力を全てバリデーションする」が正しく実装されているアプリケーションはほとんどありません。 独自の定義や自分勝手なセキュアコーディング解釈をしているケースが散見されます。ここで…
PHPとXML eXternal Entity(XXE)対策
2017年版OWASP TOP 10がリリースされました。新しくA4としてXXE、A10としてInsufficient Logging & Monitoringが入りました。今回はXXE対策を紹介ます。XXE対策は簡単です。 XXEは「リクエストのインジェクション」と考えると解りやすく、「リクエストのインジェクション」と理解すれば他の類似攻撃パターン…
PostgreSQL 10のICUコレーションとJIS X 4061
PostgreSQL Advent Calendar 9日目用のエントリです。 PostgreSQL 10のICUコレーション(照合順序)サポートの概要と基本的な使い方は以下のエントリに記載しています。ICUコレーションの使い方は以下を参照してください。 https://blog.ohgaki.net/postgresql-10-icu-locale-col…
実は知られていない?リスク対策の原則?
ISO 31000(リスクマネジメント標準規格)はa)からk)まで、11のリスク管理の原則を定めています。 ITエンジニアであればISO 27000(情報セキュリティマネジメント標準規格)を一度は読んだことがあると思います。少なくとも名前くらいは知っていると思います。リスク管理の基礎/基本を理解していればISO 27000だけでも十分ですが、ちょっと自信がな…
4種類の信頼境界とセキュリティ構造 – 構造設計なしのセキュリティ対策?
セキュリティ対策には設計図があります。少なくともアーキテクチャー図があります。しかし、何故かソフトウェアの場合は設計図もアーキテクチャー図も書けないセキュリティ対策が当たり前になっています。国際情報セキュリティ標準やセキュリティガイドラインを普通に理解すれば解ること、セキュリティ対策の基礎の基礎にも関わらず、です。 これは一般開発者の問題というより、セキュリ…
ソフトウェアセキュリティのアンチパターン
アンチパターンを知ることにより失敗を防ぐ。これはデータベース設計やソフトウェア設計で多く利用されている手法です。今回はソフトウェアセキュリティのアンチパターンを紹介します。 このエントリは不定期にメンテナンスするつもりです。 (さらに…)
PHP用入力バリデーションモジュール – validate
ブログで紹介するのを忘れていました。PHP用の入力バリデーションモジュール validateを作りました。 https://github.com/yohgaki/validate-php PHP開発MLでの議論用に作ったので、作りかけと言える状態ですが、一応動作し使えます。 関数名はvalidate()の方が良いのでは?という意見があったので、名前は変更する…
Python 2.7.14から学ぶセキュリティの基本
Python 2.7.14が2017/9/16にリリースされました。Pythonの開発はバージョン3系に移行しており、2系はセキュリティ修正のみのリリースになっています。とは言ってもモジュールの変更を見るとバグフィックスやドキュメント修正も含まれているようです。 Python 2.7.14のリリースはソフトウェアセキュリティの基本を学ぶには良い題材になります…
セキュリティ対策が論理的に正しいか検証する方法
全てのセキュリティ対策は緩和策だと考えるべきです。これは個々の対策が完全であるか検証することが容易ではないからです。例えば、SQLインジェクション1つとっても本当に完全であるか?検証することは容易ではありません。プログラムが本当に思っているように動作するのか?検証する研究は、まだまだ研究段階です。 しかし、容易ではないからといって諦める訳にもいきません。不完…