X

PHP Security

データのコンテクスト – セキュリティの基礎

コンテクストを知る、はデータを安全に扱う為に必須の基礎知識です。 よくある致命的な脆弱性を作る考え方は コンテクストなんてどうでもよい。このAPIを使えば良い。 です。セキュリティ対策ではコンテクストが何であるのか?を正しく理解することが重要です。ここではコンテクストについて紹介します。 (さらに…)

プログラミングを覚えたら先ず知るべきコーディングプラクティス

プログラミングを覚えたら先ず知るべきコーディングガイドラインを紹介します。このブログではこれらのガイドラインを時々紹介していましたが、まとめて紹介するのは初めてだと思います。これから紹介するガイドラインはセキュアプログラミング/防御的プログラミング/セキュアコーディングと呼ばれる考え方に基づいたガイドラインです。

「フェイルセーフ」とは何なのか?

「フェイルセーフ」よく聞く言葉です。最近では「フェイルセキュア」1と言われることもありますが、基本概念は同じです。よく聞く言葉&簡単な概念ですが、割と広く誤解されている概念の1つに見えます。 フェイルセーフを一言で言うと 何かに失敗しても致命的な問題に至らないよう安全に失敗させる これがフェイルセーフです。可能ならば「失敗/故障しても、失敗/故障の影響を受け…

NHKのスマホセキュリティ対策と今のWebアプリセキュリティ対策は基本構造が同じ

NHKが紹介したスマホのセキュリティ対策には問題があると指摘がある、と少し話題になっていました。 ブログで指摘されているNHKが紹介した対策ページの問題点の概要は以下の通りです。 Androidの設定から「提供元不明のアプリ」のチェックボックスをオンにしてはならない、必ずオフにする、の説明が無かった。 セキュリティベンダー広報担当者の説明を長々と回りく引用し…

何故こうなった?プログラムの動作原理を無視したセキュリティ対策

正しく動作するプログラムには 正しい/妥当なデータ 正しいコード の両方が必要です。 仕様から間違っている場合を除けば、セキュリティ問題はプログラムの誤作動によって起こります。データかコード、どちらかの問題によって発生します。 当たり前の常識ですが、これを無視したセキュリティ対策がまかり通っている、それが現在の状況です。何故こうなってしまったのでしょう? 参…

PHPのserialize()/unserialize()を安全に利用する方法

serialize()でシリアライズしたデータを外部に送信/保存1し、それをunserialize()すると危険です。 アンシリアライズは複雑なメモリ操作が必要で、PHPに限らず、何度もメモリ破壊攻撃の脆弱性が見つかっています。このため、外部入力データのアンシリアライズは行うべきではありません。現在のPHPプロジェクトでは、RubyやPythonと同じく、ア…

PHPセッションとSameSiteサポート – CSRF, XSS対策

PHPのセッションID用クッキーと他のクッキー関数にSameSiteサポートが追加されます。 https://wiki.php.net/rfc/same-site-cookie これによりクロスサイト・リクエスト・フォージェリ攻撃(CSRFやXSS)などを緩和できます。 (さらに…)

APIを過信するとおかしな事になる例 – SAML認証成り済まし

今年の2月にSAMLライブラリの脆弱性が報告されていたことを覚えている人も居ると思います。 この脆弱性はXMLコメント(<!-- -->)の取り扱いの違いによって、本来のユーザーではない攻撃者を認証してしまう事が問題であったとしています。 攻撃用の文字列サンプルは以下のような物です。 <NameID>user@example.com&…

入力バリデーションが甘いソースコードの検査は本当に大変

入力バリデーションが甘いアプリケーションのソースコードの検査は大変です。何が大変なのか、簡単に紹介します。 ついでに入力バリデーションが甘いアプリケーションの脆弱性診断はかなり簡単でであることも簡単に紹介します。 (さらに…)

出力対策の3つの役割 – フェイルセーフ頼みはNG

出力対策だけ行なえばOK!と考えてしまう原因は出力対策に3つの役割があることに気付かないからでは?と思ってこのエントリを書いています。 出力対策は”必須である場合”と”フェイルセーフ対策”である場合があります。 出力対策の基本はこちらです。 https://blog.ohgaki.net/3-principles-for-output-handling (さ…