カテゴリー: Computer

  • PHP文字列のエスケープ

    PHP文字列をテキストとして出力したい場合もあります。PHPの文字列型はバイナリセーフなのでどのようなデータでも保存可能ですが、プログラム中でPHP変数をPHPのテキスト(リテラル)として出力するにはaddslashes()によるエスケープ処理が必要です。

    【重要】エスケープ/API/バリデーション1は出力先に合った方法でないと意味がないです。一口にHTMLと言っても複数の”コンテクストがあります。

    • JavaScript(識別子、変数など)、CSS、タグ属性名、タグ属性値(URIコンテクストに特に注意。BASE64、JavaScriptを使う場合もある)

    があります。
    SQLクエリと言っても

    • 引数(更にLIKE、正規表現、JSON、XMLなどに別れる)、識別子、SQL語句

    などがあります。全てのテキストインターフェースにコンテクスト2があります。
    それぞれの”コンテクスト
    に適切なエスケープ/API/バリデーションを利用しなければ意味がありません

    (さらに…)
  • 根本的なセキュリティ対策とは?

    何年間も下書きのまま塩漬けになっていたエントリを多少修正して公開します。

    プログラミングではホワイトリスティングが基本ではプログラミング/システム開発とセキュリティに対する基本的な考え方をまとめて説明していませんでした。手短にこれらの基本的な考え方・解決策を紹介します。

    このエントリでは「アプリケーション開発における根本的なセキュリティ対策」を考えています。

    (さらに…)

  • PHP 5.6の新機能

    PHP Advent Calender 2013、3日目の参加エントリです。前日のPHP の配列を使った手品とその種明かしに続き3日目です。PHPの配列(ハッシュ)のキーはバイナリセーフなので何でも入れられる、ということはあまり知られていないですよね。面白い話だったと思います。

    私のネタには面白さはありません。予めご了承ください :-)

    さて今日のテーマのPHP5.6新機能です。PHPプロジェクトのgitレポジトリでは既にPHP5.6用のブランチが作成されています。PHP 5.6は来春リリース予定です。

    大ニュース(?)だったので多くの方はご存知だと思いますが、PHPは毎年新しいマイナーバージョンをリリースします。メンテナンスされるのは2つのバージョンのみです。つまりPHP 5.6がリリースされるとPHP 5.4はEOL(メンテナンス停止。+1年のセキュリティフィックスのみ)になります。来春にPHP 5.3は完全終了です。皆さん、準備はできているでしょうか?(まだまだ色々機能を付けなければなりませんが、個人的にも困るのでアップグレードを容易にするPROVE for PHPというツールを開発しています。よろしければ試用してみてください。)

    前置きが長くなりましたがPHP 5.6の新機能を紹介します。

    (さらに…)

  • スクリプトアップロード対策(追加)

    スクリプトアップロード対策は既に書きましたが、書き漏らしていたので追加します。
    (さらに…)

  • WordPressの脆弱性調査プロジェクト Day of bugs in WordPress3 始まる

    Full Disclosureに以下のようなメールが投稿されていました。

    Day of bugs in WordPress3が始まるようです。
    (さらに…)

  • ブログアプリをb2evolutoinからWordPressに移行しました

    昨日までブログアプリはb2evolutionでしたが、今日からWordpressに変わりました。

    (さらに…)

  • CasperJS/PhantomJSでシンタックスエラー行を取得する方法

    CasperJSやPhantomJSを使っていてシンタックスエラーがあると

    [yohgaki@localhost ]$ casperjs test.js
    SyntaxError: Parse error
    

    と表示するだけでエラー行を返してくれません。

    (さらに…)

  • Linux上のCasperJS/PhantomJS/SlimerJSでShift JIS/EUCを取り扱う方法

    Linux上のCasperJS/PhantomJS/SlimerJSからShift_JIS/EUC-JPのページを取り扱う事が出来なくて困っていたのですが、解決策が分かりました。

    (さらに…)

  • PHPのJSONのエスケープ

    追記:最近のOWASPガイドの更新でJavaScript文字列はUnicodeエンコードで安全性を確保するよう変更されました。元々このブログでもUnicodeエスケープのまま利用するように書いています。他の言語のユーザーはUnicodeエスケープを利用しましょう。PHPもASCII領域の文字をUnicodeエスケープするようにした方が良いと思います。これは提案して実現するように努力します。

    JSONはJavaScriptのオブジェクトや配列を表現する方式でRFC 4627で定義されています。メディアタイプはapplication/json、ファイル拡張子はjsonと定義されています。

    PHPにJSON形式のデータに変換するjson_encode関数json_decode関数をサポートしています。

    JSON関数がサポートされている話は簡単!となれば良いのですが、 いろいろ考慮しなければならない事があります。

    TL;DR; PHPのjson_encode()を安全に利用する方法

    json_encode()を利用する場合

    $json = json_encode($data, JSON_HEX_TAG | JSON_HEX_AMP | JSON_HEX_APOS | JSON_HEX_QUOT);

    と利用します。これでもまだ最適なエンコード方式とは言えませんが、デフォルトとして最低限必要なオプションが

    JSON_HEX_TAG | JSON_HEX_AMP | JSON_HEX_APOS | JSON_HEX_QUOT

    です。

    JSONデータの文字エンコーディングは基本UTF-8です。UTF-8文字データは”予めバリデーションしておく”必要があります

    (さらに…)
  • PHP最速フレームワークPhalconのインストール

    Phalconを初めて知ったのはもう忘れるくらい昔の話です。今でも活発に開発が行われており、かなり使えるフレームワークに仕上がっています。

    Phalconは他のどのPHPフレームワークと違う特徴があります。PhalconはPHPのフレームワークですが、PHPで書かれていません。C言語で書かれています。つまり、PHPのネイティブモジュールとして動作するPHPフレームワークです。

    (さらに…)

  • PHPの比較とBOOL/NULL型の話

    先日、10年以上勘違いをしていたことがPHPの開発者MLで議論して発覚したので、その大恥を披露します。

    PHPの比較とBOOL/NULL型の話です。

    (さらに…)

  • 日経Linux12月号

    先月の11月号にOSSEC HIDSの記事を書いたので、次の号の日経Linux12月号も頂きました。
    100の初心者から上級者向け(OpenStackなど)Tipsが載っています。

    GPS将棋サーバーを作る、ownMdm (MDM: Mobile Device Management)でAndroidスマホのロック&位置取得、DAPPサーバー/DLNAサーバーを導入する、など役立つTIPSが載っています。付録のDVDに記事で利用しているUbuntuが入っているようなので初心者でも直ぐ楽しめるが良いですね。

    この他にも電子工作で室温を計測し、グラフ化する記事もあります。これは自宅の温度管理(必要なのかは別にしてただ面白い)やサーバールームがある会社さんではサーバールームの温度管理などにも使えます。学生時代以来、電子工作はしていませんでしたが久々にやってみたくなりました。

  • PHPのスクリプトを色々な環境で試すサービス

    PHPで開発したり、記事を執筆する時には色々な環境で試したい場合があります。自分の環境で試すのも良いですが、Webサイトにコピー&ペーストで試せると便利です。あまり知られていない(?)ようなので紹介します。

    (さらに…)

  • RailsのJavaScript文字列エスケープ

    RailsはJavaScript文字列エスケープメソッドをサポートしています。JavaScript文字列エスケープのエントリで様々な議論があったようです。弊社ではRailsアプリのソースコードも検査しているので、参考としてRailsのソースコードを確認したことを追記をしたました。Rails開発者に直して頂きたいので独立したエントリにしました。

    参考:

    (さらに…)