PHP Security
今さら聞けない「コード」と「データ」の話
ビルドを繰り返して時間があったので、ついついとても長いデータの話を書いてしまいました。今さら聞けない「コード(機能)」と「データ」の話として、もっと単純化してみます。 当然の話なのですが、現実には当たり前ではなかったりします。 「データ」のセキュリティを考慮しないセキュリティ対策はあり得ないのですが、多くのプログラムは「コード(機能)」のセキュリティに偏重し…
命令と引数を分離すれば安全、と考えてしまう”とんでもない誤解”はどこから生まれるのか?
SQL文やコマンド実行には命令と引数を分離するAPIがあります。便利なAPIなのですが、安全性について根本的な勘違いが多いです。 プリペアードクエリ系のAPIさえ使っていれば安全 execv系のAPIさえ使っていれば安全 これらは大きな勘違いです。 データ処理の安全性は”出力先”の処理に依存する SQLのデータもコマンド実行のデータも、そのデータ出力の安全性…
コマンド実行時、コマンドと引数を分離すれば完璧?
プログラムを作っているとOSコマンドを実行したくなる時があります。OSコマンドの実行に問題があり、不正なコマンドをインジェクションされると大変な事になります。 どのようなセキュリティガイドラインでも「OSコマンドの実行に注意する」と大抵書かれています。 多くの場合、「コマンド実行時、コマンドと引数を分離すれば安全に実行できるAPIを利用すれば安全に実行できる…
PHPの危い関数リスト
一応、PHPの危い関数リスト、は存在します。例えば、以下のような物があります。 StackOverflow DangerousPHPFunction 後者は主にホスティング環境(?)でリスクがある関数の一覧を作るプログラムのようです。 ファイルを操作する関数、コマンドやスクリプトを実行する関数などのリスクは自明だと思います。少し趣向を変え、間違えて使うと危い…
構造化設計とセキュアコーディング設計の世界観は二者択一なのか?
https://blog.ohgaki.net/programming-view-of-the-world で構造化プログラミング/オブジェクト指向プログラミングの世界観(パラダイム)では、抽象化を行い問題を関数やオブジェクトの中に閉じ込める。つまり、プログラムの内部奥深くに”問題”を閉じ込めようとする。 セキュアコーディングの世界観では、”正しくないデータ…
PHPでCSRF対策を自動的に行う方法
PHPでWebページにCSRF対策を追加するのは簡単です。全てのページにCSRF対策を追加する場合、ファイルを1つインクルードする以外、ほとんど何も行う必要がありません。 (さらに…)
JavaScriptでインジェクションリスクがある関数/機能など
Webブラウザに対するJavaScriptコードのインジェクションは サーバー側のコードが原因(サーバー側のPHP、Ruby、Python、JavaScriptが原因) クライアント側のコードが原因(クライアント側のJavaScriptが原因) サーバーとクライアント(上記の両方) で起きる可能性があります。ここでは主にクライアント側が関係するケースで注意し…
プログラミングの「世界観」
rustcを通らないコードは間違っているに以下のような記述があります。 「そのコードがRust wayではない」という点で「間違っている」。microなスタイルからmacroな設計まで、ありとあらゆる点でRust的なコードであることを暗黙的ではあるが極めて強く要求する。それがRustというプログラミング言語だ。 Rustはコンパイル時点で可能な限りの正しく実…