X

エスケープ

CSSのエスケープ方法

プログラムからCSSファイルにデータを書き込む場合、エスケープしないと不正なCSSになってしまう場合があります。現在のブラウザはCSSでプログラムを実行する仕様が削除されているのでコード実行脆弱性の問題になりませんが、不正なCSSはセキュリティ問題(クリックジャック等)になる場合もあります。 HTML内のCSSの場合、エスケープしないとJavaScriptの…

JSONPathインジェクション

JSONPathはCSSのセレクタやXPathのクエリのような形でJSON形式のデータを選択/クエリする仕様です。最近のRDBMSはJSONPathクエリをサポートしているので、SQLインジェクション対策の一種として必要となる場合もあります。 JSONPathの説明はしないので仕様などはオンラインの評価環境で確認してください。 https://jsonpat…

入力バリデーションに「エスケープやフィルタリングが含まれる」とする驚くべき解説

標準的な入力バリデーションに「エスケープやフィルタリングが含まれる」とする驚くべき解説があります。そのような入力バリデーションを定義した標準的なセキュリティガイドライン/規格は見た事がありません。標準的な入力バリデーションでは何をすべし、とされているのか紹介します。 (さらに…)

ゼロトラストとフェイルファースト

今のプログラムに足りないモノでセキュリティ向上に最も役立つ考え方のトップ2つ挙げなさない、と言われたらどの概念/原則を挙げるでしょうか? 私なら ゼロトラストフェイルファースト を挙げます。 極論すると、この2つ知って実践するだけでセキュアなソフトウェアを作れるようになるからです。この2つだけでは十分ではないですが、これを知って、実践しているだけでも開発者は…

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

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

SQLクエリと識別子エスケープの話

Facebookでこんなやり取りをしました。元々公開設定で投稿した物で、議論させて頂いた浅川さんにも「ブログOK」と許可も頂いたので、そのやり取りの部分だけを紹介します。 テーマは「SQLクエリと識別子エスケープ」です。 とあるブログの結論として "「安全な静的SQLの発行方法」を開発者に啓蒙すればいいだけだ。つまり プリペアドクエリでSQL発行は行うこと …

出力対策の3原則 + 1原則

ソフトウェアの不具合/脆弱性を無くすためには、出力先に対して無害であることを保障する出力対策が重要です。どんな出力でも3つの方法で無害化できます。 このブログでは基本として、セキュアコーディングの概念に基き説明しています。先ずはよくある入力対策と出力対策の区別がついていない誤りから紹介します。 参考:IPAは基礎的誤りを明示し、正しい原則を開発者に啓蒙すべき…

PHPのHTMLエスケープ

いろいろなコンテクスト用のエスケープ方法を書いてきましたが、HTMLコンテクスト用のエスケープ方法エントリは古いままでした。今のPHPのHTMLエスケープを紹介します。 参考:他のエスケープ方法は以下のエントリを参照してください。 https://blog.ohgaki.net/php-string-escape (さらに…)

本当にプリペアードクエリだけを使っていますか?

'SELECT '.pg_escape_idetifier($_GET['col']).' WHERE '.pg_escape_identifier('tbl').' ORDER BY '.pg_escape_idetifier($_GET['col']) SQLクエリにはプリペアードクエリを使いましょう!と言われて久しいです。私もプリペアードクエリを積極的…

DBMSの脆弱なAPI仕様は何時まで放置されるのか?

広く使われているデータベースでもAPIが仕様として脆弱な物が長年放置されています。OracleやMS SQL Serverを利用している方ならよくご存知だと思います。 (さらに…)

SQLインジェクション対策 総”習”編 – 第五回関西DB勉強会

第五回 関西DB勉強会でお話しさせて頂いた SQLインジェクション対策 総”習”編 の公開用資料をSlideShareにアップロードしました。私のセッションを気に入って頂けた方が多かったようで何よりです。 関西DB勉強会、面白かったです。久々にお会いできた方もいました。超満員でもう少しで入りきれないほどでした。また参加できれば、と思っています。 P…

SQL識別子のエスケープ

SQLの識別子(テーブル名やフィールド名)はプリペアードクエリではエスケープできません。最近の開発者はSQLの"パラメーター”には注意を払うようになったので、SQLパラメーターによるSQLインジェクションはかなり少くなってきました。 この結果、相対的にSQL識別子によるSQLインジェクション脆弱性の割合が増えています。実際、私がコード検査を行っているアプリケ…

PhalconのZephir言語版JavaScript文字列エスケープ

以前にJavaScript文字列のエスケープ関数を紹介しました。試しにPhalconのZephirで書いてみました。

OSコマンドのエスケープ – シェルの仕様とコマンドの実装

OSコマンドインジェクションを防ぐための、OSコマンドのエスケープはSQLのエスケープに比べるとかなり難しいです。 難しくなる理由は多くの不定となる条件に依存する事にあります。

そもそもエスケープとは何なのか?

まずエスケープ処理について全て書こう、ということでPHP Securityカテゴリで様々なエスケープ処理について書いてきました。しかし、「エスケープ処理とは何か?」を解説していなかったので解説します。 エスケープ処理は文字列処理の基本中の基本です。 「エスケープは要らない、知る必要もない」という意見を稀に聞きますが、プログラムに於ける文字列処理とその重要性を…