タグ

ブックマーク / blog.ohgaki.net (16)

  • PHPのJSONのエスケープ

    (Last Updated On: 2023年12月8日) 追記:最近のOWASPガイドの更新でJavaScript文字列はUnicodeエンコードで安全性を確保するよう変更されました。元々このブログでもUnicodeエスケープのまま利用するように書いています。他の言語のユーザーはUnicodeエスケープを利用しましょう。PHPもASCII領域の文字をUnicodeエスケープするようにした方が良いと思います。これは提案して実現するように努力します。 JSONはJavaScriptのオブジェクトや配列を表現する方式でRFC 4627で定義されています。メディアタイプはapplication/json、ファイル拡張子はjsonと定義されています。 PHPにJSON形式のデータに変換するjson_encode関数とjson_decode関数をサポートしています。 JSON関数がサポートされている

    PHPのJSONのエスケープ
    sunaoka
    sunaoka 2015/09/01
    json_encode($val, JSON_HEX_TAG | JSON_HEX_AMP | JSON_HEX_APOS | JSON_HEX_QUOT);
  • 間違いだらけのHTTPセッション管理とその対策

    (Last Updated On: )HTTPセッション管理はWebセキュリティの中核と言える機能です。Webセキュリティの中核であるHTTPセッション管理に設計上のバグがある事は少なくありません。今回のエントリはPHP Webアプリ開発者ではなく、主にWebフレームワーク側の開発者、つまりPHP体の方に間違いがあるという話しです。Webアプリ開発者の回避策も紹介します。 まずセキュリティの基として「入力のバリデーションを行い、正当な入力のみを受け入れる」があります。しかし、PHPに限らず多くのセッション管理機構は当たり前の「入力のバリデーションを行い、正当な入力のみを受け入れる」を行っていません。セッションIDの再生成(リセット)も不完全な物が多いと思います。 参考: 知らないと勘違いする「合成の誤謬」の罠 開発者は必修、SANS TOP 25の怪物的なセキュリティ対策 エンジニア

    間違いだらけのHTTPセッション管理とその対策
    sunaoka
    sunaoka 2014/02/21
  • PHP本体でタイミング攻撃を防御できるようになります

    (Last Updated On: ) PHP 5.6からタイミング攻撃に対する対策が導入されます。メジャーなアプリケーションはタイミング攻撃対策が導入されていますが、PHP 5.6から簡単に対策できるようになります。 タイミングセーフな文字列比較関数はhash_equalsとして実装されました。 http://php.net/manual/es/function.hash-equals.php タイミング攻撃とは タイミング攻撃とは、コンピュータが動作する時間の違いを測って攻撃する、サイドチャネル攻撃(副作用攻撃)と呼ばれる攻撃手法の1つです。HTTPSの圧縮の副作用を利用したサイドチャネル攻撃が有名です。 コンピュータの動作時間、温度、音、電子ノイズ、電力使用量など、アルゴリズム自体の脆弱性を攻撃するのではなく副産物を利用する攻撃方法でサイドチャネル攻撃の一種です。例えば、ブランドSQ

    PHP本体でタイミング攻撃を防御できるようになります
    sunaoka
    sunaoka 2014/02/12
  • セッションアダプション脆弱性がないセッション管理が必要な理由

    (Last Updated On: 2018年8月18日)徳丸さんから「ブログ読みました。サンプルも動かしました。問題は分かるのですが、セッションアダプションがないPHPだと、何が改善されるのかが分かりません。教えて下さい 」とあったのでツイッターで返信するには少し長いのでこちらに書きます。まだ直していない脆弱性を詳しく解説するのはあまりよくないのですが、今なら影響を受けるアプリはほぼないと思うので構わないでしょう。 まず前提として、Webサーバと同様にJavascriptからもクッキーが設定できます。Javascriptインジェクションに脆弱なコードがサイトに1つでもあると、サイト上のセッションアダプション脆弱性をもつアプリへの攻撃が可能になります。この攻撃を緩和する対策もありますが、それはそれ、これはこれなので省略します。 セッションアダプションに脆弱なセッション管理機構で困る代表的な

    セッションアダプション脆弱性がないセッション管理が必要な理由
    sunaoka
    sunaoka 2012/12/11
  • PHPセッションアダプションをスクリプト側で修正する方法

    (Last Updated On: 2018年8月13日)PHPのスクリプトを使ってアダプティブなPHPセッションをアダプティブにしない方法を紹介します。 このブログで紹介していたかどうか覚えていないですが、セッションアダプション対策としてsession_regenerate_id()が導入された時に議論・紹介されているので知っている方も多いと思います。(というより、PHPerの常識ですよね?) まずはセッションアダプションの原理と対策の復習をしておきます。 原理: 未初期化のセッションIDを受け入れる 対策: 初期化済みセッションIDのみ受け入れる session_regenerate_id()は新しいセッションIDを生成して新しいセッションクッキーを作成して、セッションデータを保存するようになっています。session_regenerate_id()を呼んだだけでは、なんらかの方法で複

    PHPセッションアダプションをスクリプト側で修正する方法
    sunaoka
    sunaoka 2012/12/09
  • mod rewriteを使用した簡易WAF

    (Last Updated On: 2018年8月8日)http://www.0x000000.com/?i=567 にmod rewriteを利用した簡易WAF(Web Application Firewall)の定義例が掲載されています。同じようなアイデアをお持ちの方、既に似たような設定を使われている方も多いとは思います。 簡単なWAFですが、実用性も高いです。例えば、ヌル文字やHTML特殊文字のインジェクションは様々な攻撃で利用されます。アプリケーションで対処が忘れられがちなCOOOKIEやREFER、USER_AGENT等に特殊文字が入っていた場合にアクセスを拒否する部分だけもで導入する価値は十分にあると思います。 元ネタのサイトは英語ですが、解説付きです。 これを入れると問題となる場合もあるので、内容を理解してから利用しなければなりません。 RewriteEngine On Op

    mod rewriteを使用した簡易WAF
  • PostgreSQL 8.3の全文検索機能(TSearch2)を日本語で利用する

    (Last Updated On: 2018年8月13日)PostgreSQL 8.3.0から、ユーザから提供されている追加機能(contrib)として利用できた全文検索機能(TSearch2)が体に取り込まれました。 体に取り込まれたため、PostgreSQL 8.3.0以降ではソースから構築する場合に ./configure make make install と実行するだけで全文検索機能が利用できるようになりました。 TSearch2は単語単位で全文検索できます。しかし、日語のように単語に区切りがない場合、単語に分解(形態素解析)してからインデックス化する必要があります。 # N-gramは使えません。 残念ながら日語をそのまま扱える機能はPostgreSQL 8.3では実装されていません.しかし、TSearch2(textsearch)を日語で利用するための追加機能がpg

    PostgreSQL 8.3の全文検索機能(TSearch2)を日本語で利用する
    sunaoka
    sunaoka 2008/04/07
  • Taint mode for PHP 5.2.5

    (Last Updated On: 2018年8月13日)PHPのTaintモードパッチです。最近更新されていたようです。 ftp://ftp.porcupine.org/pub/php/php-5.2.5-taint-20080130.README.html Taintモードはあれば良い程度の機能ですが、フールセーフ機能(フェイルセーフでなくフールセーフ – fool safe)としては便利です。入力バリデーション用のコードは必須ですが、そのようなコードが無い場合やあっても不完全な場合には有用です。 PHP 5.2.5よりCVS HEADとPHP_5_3ブランチ用のパッチを作った方が採用されやすいのですが…. このパッチは関数毎に違うマークを付けるtaintモードなのでかなり大きいです。(+遅い)

    Taint mode for PHP 5.2.5
  • PHPで実装されたベイズフィルタ

    (Last Updated On: )PHPで実装されたベイズフィルタを見かけました。 http://www.atomicmpc.com.au/forums.asp?s=2&c=10&t=4466 ライセンスはGPLライセンスです。 ソースコードを見ると当然ですが半角スペースでトークンに分解しているので日語では使えません。しかし、mecabなどを使用して使えるようにするのはそう難しくありません。もともとベイズフィルタは難しいアルゴリズムではないので読むと直ぐに理解できると思います。PHPで利用できる形態素解析モジュールは幾つかあります。 しばらく前には毎日数百のコメントスパムが送信されてきていました。b2evolutionデフォルト設定でコメントのモデレートが必須化されてから時間が経過してきたので今はかなり減ってきています。必要性は減ってきてはいますが時間があったら改善したい所です。

    PHPで実装されたベイズフィルタ
    sunaoka
    sunaoka 2007/11/29
  • yohgaki's blog - いろいろ変わったXSSがありますが...

    (Last Updated On: 2007年10月12日)私が知らなかっただけかもしれませんが、これにはかなり驚きました。いろんな所で問題が指摘されていますが、ECMAScriptにXML機能を追加したのはどうなんでしょうね…. 確かにかなり便利なのですが以下のコードでスクリプトが実行されることはほとんど知られていないでしょうね。 <script> 123[”+<_>ev</_>+<_>al</_>](”+<_>aler</_>+<_>t</_>+<_>(1)</_>); </script> 好むと好まざる関係なくFirefox 1.5から使えるのでWeb開発者は知っておかなればならないです。 日語訳 http://www.ne.jp/asahi/nanto/moon/specs/ecma-357.html 原文 http://www.ecma-international.org/pu

    yohgaki's blog - いろいろ変わったXSSがありますが...
  • JavaScript文字列のエスケープ

    (Last Updated On: 2013年12月4日) 追記:新しくより安全なバージョンはこちらです。 hoshikuzuさんのページに書いてあるJavaScript文字列のエスケープ方法です。(元ネタのメールアーカイブは文字が欠落) http://d.hatena.ne.jp/hoshikuzu/20071011#p1 1. 「¥」を「¥¥」に置換する 2. 「”」を「¥”」に置換する 3. 「’」を「¥’」に置換する 4. 「/」を「¥/」に置換する 5. 「<」を「x3c」に置換する 6. 「>」を「x3e」に置換する 7. 「0x0D(CR)」を「¥r」に置換する 8. 「0x0A(LF)」を「¥n」に置換する SmartyのJavaScirpt文字列のエスケープ方法です。 CVS版:2007/10/12 case ‘javascript’: // escape quotes

    JavaScript文字列のエスケープ
  • 意図が伝わってないのかな?

    (Last Updated On: 2018年8月13日)「なぜPHPアプリケーションにセキュリティホールが多いのか?」をテーマにした技術評論社のブログ風の記事を書いています。 一番新しい http://gihyo.jp/dev/serial/01/php-security/0008 ですが、自分で防いだつもりのセキュリティホールは実は防いだ事になっていなかった、アプリケーションが多く在りました。というより今でも作り続けられています。原因は「サニタイズ」による脆弱性の回避であるものが多いです。なので「サニタイズ」ではなく「バリデーション」と「適切なエスケープ」によって対策すべきです、と書きたかったのですが「エスケープ」の部分を書いてないですね。バリデーションの時に説明するつもりですが、確かに尻切れとんぼのような感じです。 編集の方からこんな感じなのですがどうなんでしょう?メールが来ていまし

    意図が伝わってないのかな?
  • SET NAMESは禁止

    (Last Updated On: )MySQLには文字エンコーディングを変更する「SET NAMES」SQL文が用意されています。(PostgreSQLも同様のSQL文、SET CLIENT_ENCODINGがあります)この機能はSQLコンソールからは使ってよい機能ですが、アプリケーションからは使ってはならない機能です。SQLインジェクションに脆弱になる場合があります。 Ruby on Railsを読んでいて、ActiveRecordを説明している部分にMySQLの文字エンコーディングを変更する場合の例としてSET NAMESが利用されていました。アプリケーションからはSET NAMESは使ってはならない事を周知させるのは結構時間が必要かなと思いました。 PHPも5.2の途中からMySQLモジュールにlibmysqlの文字エンコーディング設定APIのラッパー関数が追加されていたりする

    SET NAMESは禁止
  • 画像ファイルに PHP コードを埋め込む攻撃は既知の問題

    (Last Updated On: )国内外のメディアで「画像ファイルに攻撃用のPHPコードが含まれていた」と比較的大きく取り上げられています。しかし、この攻撃手法は古くから知られていた方法です。条件は多少厳しくなりますがPerl, Ruby, Pythonでも同様の攻撃は考えられます。PHPの場合は言語仕様的に他の言語に比べ攻撃が容易です。 典型的な攻撃のシナリオは次の通りです。 追記:Tokenizerを使った例に修正しました。 アバダなどの画像ファイルをアップロードできるサイトを探す ローカルファイルインクルードバグを探す 画像ファイルにサイトが利用している言語のコードを埋め込む 攻撃コードを含んだファイルを画像ファイルとしてアップロードする ローカルファイルインクルードバグを利用して攻撃コードを実行する PHPの場合、リモートインクルードバグを攻撃するための攻撃用コードをホストさせ

    画像ファイルに PHP コードを埋め込む攻撃は既知の問題
    sunaoka
    sunaoka 2007/06/24
  • まちがった自動ログイン処理

    (Last Updated On: )問題:まちがった自動ログイン処理の解答です。このブログエントリは最近作られたアプリケーションでは「問題」にしたような実装は行われていないはず、と期待していたのですがあっさり期待を破られたのでブログに書きました。このブログの方が詳しく書いていますけが「Webアプリセキュリティ対策入門」にも正しい自動ログイン処理を書いています。 参考:自動ログイン以外に2要素認証も重要です。「今すぐできる、Webサイトへの2要素認証導入」こちらもどうぞ。HMACを利用した安全なAPIキーの送受信も参考にどうぞ。 間違った自動ログイン処理の問題点 まず間違った自動ログイン処理を実装しているコードの基的な問題点を一つ一つ順番にリストアップします。 クッキーにランダム文字列以外の値を設定している クッキーにユーザ名が保存されている クッキーにパスワードが保存されている ユーザ

    まちがった自動ログイン処理
    sunaoka
    sunaoka 2006/05/13
  • PHPのSession Fixation問題

    (Last Updated On: 2006年10月24日)PHPのセッション管理はセッションの固定化(Session Fixation)に脆弱であることは広く知れらていると思っていました。先日、php-users(ja)のMLに「Hardened PHPプロジェクトのStefanさんのパッチにSQLite Sessionモジュール用のセッションセーブハンドラパッチを追加したパッチを公開しました」と投稿しました。しかし、ダウンロード数等から推測するとセッションの固定化のリスクが正しく認識されていないのではないかと思えます。 セッション固定化のリスクを分かりやすく説明するには具体的な攻撃のシナリオを紹介した方がわかり易いのでいくつか説明します。以下の説明はデフォルト状態のPHPインストールでSession Fixation対策を行っていないのPHPアプリケーションに対して可能な攻撃の一例です

    PHPのSession Fixation問題
    sunaoka
    sunaoka 2006/02/07
  • 1