セキュアコーディング技術
PHP7とjson_decodeとjson_encodeの困った仕様 – 数値型データの問題
PHP7からint/float/arrayの基本的データ型のタイプヒントが導入されます。これには困る問題があるのですが、その問題を更に複雑にするjson_decode関数のデータ型変換問題があります。 JSONデータのデータ型が特定の型に変換される問題はPHPのjson_decode関数に限った問題ではなく、JSONを利用する処理系を作る開発者すべてが注意す…
SQLite3の全てのカラムがテキスト型である問題に対する誤解
以前にSQLite3のデータ型は基本的には全てテキストである、という解説をしました。 安全なAPI過信症候群の処方箋 – execv/SQLite3 編 SQLiteデータ型の仕様とセキュリティ問題 どうもこの問題は強い型を持っている言語には影響がないとの誤解があるようなので解説します。
Memcachedのプロトコル仕様とセキュリティ – Memcachedでもインジェクションが可能
Memcachedはテキストプロトコルとバイナリプロトコルの二種類を持っています。デフォルトはテキストプロトコルです。テキストプロトコルを利用している場合、テキストインターフェース処理の基本を理解した上で利用しないとセキュリティ問題が発生します。こういった処理のセキュリティ対策を行う、確認するには実は標準の方が簡単で明解 – セキュリティ対策の評価方法も参考…
SQLiteデータ型の仕様とセキュリティ問題
SQLiteはファイルベースのオープンソースRDBMSです。オープンソースとしては珍しいパブリックドメインライセンスを採用しています。SQLiteはファイルベースなのでデータベースサーバーが必要なく手軽に利用できます。SQLiteは組み込みデバイスで広く利用され、Android/iOSなどでは標準的なデータベースとして利用されています。モバイルデバイス以外で…
安全なAPI過信症候群 – 普通のRDBMS編
昨日書いた安全なAPI症候群の処方箋 – execv/SQLite3編はSQLiteの仕様がRDBMSとしてエキゾチック過ぎ、さらっと書いたよくあるRDBMSでの「安全なAPI症候群」を全く理解して頂けなかったケースもあるようなのでもう一度書きます。 プリペアードクエリには色々問題もあり、セキュリティ対策としてそれだけ教えるのはNG、と考えている方はプリペ…
PHP/Apache httpdのファイルアップロード/ダウンロード処理
最近、ファイルアップロード対策に関する検索が増えているようなので書きました。PHPの場合、スクリプトがアップロードされ実行されてしまうと致命的です。アップロードされたファイルを公開ディレクトリに保存することは好ましくありあせん。しかし、既にそうなっているアプリケーションの場合、改修が困難な場合もあります。
password_hash()の重要な制限
password_hash関数はcrypt関数のラッパーです。パスワードを簡単かつ安全にハッシュ化するための関数です。現在のPHPマニュアルにはpassword_hash関数の重要な制限が未記載であったため追加しました。
Rails ActriveRecordとSQLインジェクションと実際のアプリケーション
先日はActive RecordのSQLインジェクションパターンを紹介しました。今回は脆弱なコードを見つける事を試みようと思います。脆弱とは言っても攻撃可能であることは意味しません。コーディングとして脆弱であるという意味です。実際に攻撃可能であるかどうかまでは確認していません。
PhalconのZephir言語版JavaScript文字列エスケープ
以前にJavaScript文字列のエスケープ関数を紹介しました。試しにPhalconのZephirで書いてみました。
ActiveRecordのSQLインジェクションパターン
Railsで多用されているActiveRecordのインジェクションパターンを簡単に紹介します。出典はrails-sqli.orgなのでより詳しい解説はこちらで確認してください。特に気をつける必要があると思われるもののみをピックアップしました。
なぜRubyと違い、PHPの正規表現で^$の利用は致命的な問題ではないのか?
Rubyデフォルトの正規表現では^は行の先頭、$は改行を含む行末にマッチします。PHPのPCREとmbregexでは^はデータの先頭、$は改行を含む行末にマッチします。 この仕様の違いはデータのバリデーションに大きく影響します。
間違いだらけのHTTPセッション管理とその対策
HTTPセッション管理はWebセキュリティの中核と言える機能です。Webセキュリティの中核であるHTTPセッション管理に設計上のバグがある事は少なくありません。今回のエントリはPHP Webアプリ開発者ではなく、主にWebフレームワーク側の開発者、つまりPHP本体の方に間違いがあるという話しです。Webアプリ開発者の回避策も紹介します。
PHP本体でタイミング攻撃を防御できるようになります
PHP 5.6からタイミング攻撃に対する対策が導入されます。メジャーなアプリケーションはスクリプトでタイミング攻撃対策が導入されていますが、PHP 5.6から簡単に対策できるようになります。
PHPのOpenSSL関数を利用して暗号化する例
色々やることがあってブログを更新できていませんでした。久々のブログはPHPのOpenSSL関数を使ってAES-256-CBCを使って暗号化する例です。今時のハードウェアとソフトウェアならハードウェアAESが利用できるので普通はAES-256-CBCで構わないでしょう。
HTTPヘッダーインジェクション
テキストインターフェース処理の基本でもう書いてしまいましたが、今回はHTTPヘッダーインジェクションの解説です。