タグ

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

  • IPAは基礎的誤りを明示し、正しい原則を開発者に啓蒙すべき

    Last Updated on: 2018年11月9日セキュアコーディングの第1原則は「入力をバリデーションする」です。セキュアコーディングの第1原則はソフトウェアセキュリティの一丁目一番地と言えるセキュリティ対策です。 入力バリデーションを第一のセキュリティ対策としているガイドライン: CERT Top 10 Secure Coding Practices OWASP Secure Coding ‐ Quick Reference Guide CWE/SANS Top 25 Monster Mitigations IPA セキュアプログラミング講座(NEW 2017年~) セキュアプログラミング/セキュアコーディングを要求するセキュリティ認証: ISMS – 国際情報セキュリティ標準 ISO 27000 の認証規格 PCI DSS – クレジットカード情報を取り扱う場合の認証規格 90年

    IPAは基礎的誤りを明示し、正しい原則を開発者に啓蒙すべき
    advblog
    advblog 2018/03/22
  • PHPバイトコードキャッシュの性能 – Opcache

    Last Updated on: 2018年8月13日PHPの性能はバイトコードキャッシュにより数倍向上するのですが、久しぶりにopcacheをキーワードに検索してみると「それほど効果がない」と誤った評価をしているページもあったので、Opcacheによりどのくらい速くなるか簡単なベンチマークをします。 テスト環境 CPU – Intel(R) Core(TM) i7-4770S CPU @ 3.10GHz メモリ – DDR3 32GB OS – Fedora 23 x86_64(4.3.4-300.fc23.x86_64) Webサーバー – Fedora 23 httpd パッケージ(httpd-2.4.18-1.fc23.x86_64) PHP – Fedora 23 PHP 5.6.17 パッケージ(php-5.6.17-1.fc23.x86_64) Opcache – Fedor

    PHPバイトコードキャッシュの性能 – Opcache
    advblog
    advblog 2016/02/12
  • 正規表現を使ったDoS – ReDoS

    (Last Updated On: )いつかは忘れるくらい前に正規表現のアルゴリズム自体を利用してDoS攻撃を行うReDoSが発表されていました。今まであまり気にしていなかったのですが、検索しても日語のページが出てこないようでした。詳しく知るためのリンクなどを紹介します。 少し検索して出て来た日語ページはHPのページでしたが、たまたまインデックスされていたページがヒットしたようでした。また記載されている情報は不十分でした。(ページ下のコピーライトからFortifyの情報のようです) 日語のページで良いものは無いようなので、ReDoSの英語ページ/PDFを紹介します。 Wikipedia OWASP CHECKMARX  2015 (PDF) CHECKMARX 2009 (PDF) 3つ目のCHECKMARXのPDFは解りやすいと思います。OWASPのページはCHECKMARXの資料

    正規表現を使ったDoS – ReDoS
    advblog
    advblog 2015/09/10
  • yohgaki's blog - 画像ファイルにJavaScriptを隠す

    Last Updated on: 2014年12月5日前回のエントリでイメージファイルにスクリプトを埋め込んで攻撃する方法について記載しましたが、最近イメージファイルにスクリプトを埋め込む事例が話題になったためか ha.ckersにJavaScriptをイメージファイルに隠す方法が紹介されています。 http://ha.ckers.org/blog/20070623/hiding-js-in-valid-images/ <script src="http://cracked.example.com/cracked.gif"> などとXSS攻撃を拡張する手段に利用可能です。サンプルとしてFlickerにJavaScriptを埋め込んだイメージファイルがアップされています。 このイメージファイルは上手く細工しているので画像としても表示され、JavaScriptも実行できます。 Flickerは

    yohgaki's blog - 画像ファイルにJavaScriptを隠す
    advblog
    advblog 2015/09/09
  • 入力バリデーションがセキュリティ対策かどうかは、”どうでもいい”!?

    Last Updated on: 2018年8月8日徳丸さんとの議論は終わっている いるので議論することはありません。しかし、 ここが変だよ、グローバルスタンダードの脆弱性対策~入力値の考え方~ というおかしなスライドが目に入ったのでコメントしておきます。今現在で2万近くのビュー回数もあると放っておけません。 ”セキュリティ専門家”という肩書を持つ方が非論理的/非科学的な独自のセキュリティ理論を展開されるようでは、誤解してしまった開発者がセキュアでないコードを書いてしまいます。どのように非論理的/非科学的なのか簡単にコメントします。 問題のスライド 問題のスライドはこちらです。 http://www.slideshare.net/ockeghem/owasp-japan20120327 色々あるのですが、特にp27です。 それ(入力バリデーション)が「セキュリティ対策」かどうかは、”どうで

    入力バリデーションがセキュリティ対策かどうかは、”どうでもいい”!?
    advblog
    advblog 2015/06/16
  • ほぼ全てのインジェクション攻撃を無効化/防止する入力バリデーション 〜 ただし出力対策も必須です 〜

    Last Updated on: 2019年2月18日入力バリデーションはセキュリティ対策として最も重要なセキュリティ対策です。なぜセキュリティ対策であるのか?を理解していない方も見かけますが「ほぼ全てのインジェクション攻撃を無効化/防止する入力バリデーション」の効果と拡張方法を見れば解るのではないでしょうか? ソフトウェア開発者が知っておくべきセキュリティの定義/標準/ガイドで紹介しているセキュリティガイドラインでは入力バリデーションが最も重要なセキュリティ対策であるとしています。 厳格な入力バリデーションを行うと、開発者が意識しなくても、非常に多くの脆弱性を利用した攻撃を防止できます。今回は比較的緩い入力バリデーション関数でも、ほとんどのインジェクション攻撃を防止できることを紹介します。 重要:セキュア/防御的プログラミングでは入力と出力のセキュリティ対策は”独立”した対策です。どちら

    ほぼ全てのインジェクション攻撃を無効化/防止する入力バリデーション 〜 ただし出力対策も必須です 〜
    advblog
    advblog 2015/06/15
  • ソフトウェア開発者が知っておくべきセキュリティの定義/標準/ガイド

    (Last Updated On: )単純にこういった定義や標準があります、と紹介してもなかなか原文を参照することは敷居が高いです。このブログでも色々紹介できてきたので、ソフトウェア開発者が知っておくべきセキュリティの定義/標準/ガイドなどをまとめて紹介します。 セキュリティ対策の定義 そもそも定義を間違えていたら、ボタンの掛け違いは止まりません。まず、正しい定義を理解しなけばなりません。ソフトウェアのセキュリティといっても、他のセキュリティ対策の定義と基は同じです。ISO 27000では広範囲なITセキュリティの対策を定義しています。勿論、用語の定義もあります。 ISO 27000のセキュリティ対策の定義 標準と基概念から学ぶ正しいセキュリティの基礎知識 ざっくり言うと、基的にはセキュリティ対策の質は緩和策である、と理解していれば良いでしょう。 ISO 27000は多数の企業が導

    ソフトウェア開発者が知っておくべきセキュリティの定義/標準/ガイド
    advblog
    advblog 2015/06/02
  • PHPに無いセキュリティ機能 – PHPカンファレンス関西2015

    (Last Updated On: )PHPカンファレンス関西に参加してきました。私のセッションの資料をPDFまたはSlideshareで見れるようにしました。 PHPにないセキュリティ機能(PDF) ここに書いたPHPに無い機能ですが、他の言語/フレームワークでも無い物の多いです。PHPに限った話しではありません。言語/ライブラリに潜む脆弱性もPHPに限った話しではありません。他の言語やPHP+フレームワークで利用されている方も十分注意してください。 このスライドを見れば何故私が「出力のセキュリティ対策としてエスケープ(エンコード)を第一に考えるべき」と解説しているのか解ると思います。 「入力をセキュリティ対策としてバリデーションしない」「出力のエスケープをセキュリティ対策として考えない」これらは攻撃者と一部のセキュリティ業者を喜ばせるだけで、開発者とシステムの利用者を不幸にするだけです

    PHPに無いセキュリティ機能 – PHPカンファレンス関西2015
    advblog
    advblog 2015/05/31
  • SHA1でハッシュ化したパスワードは危険になった

    Last Updated on: 2018年4月3日パスワードを平文で保存するのは論外で、MD5やSHA1でハッシュ化するのは当たり前です。しかし、SHA1を2000倍早くクラックする方法などが発見され「SHA1は脆弱だ」(ちなみにMD5はもっと危険)とされてからしばらく経ちます。アメリカ政府や大手企業はSHA1は使わない、としています。 Slashdot.orgにまた載っているので更に高速化できた、ということか? 参考: RainbowテーブルによるMD5ハッシュのクラック(英語) RainbowテーブルによるSHA1ハッシュのクラック(英語) 前のエントリ PostgreSQLでSHA1 でPostgreSQLでSHA1を使う方法の一つを紹介していますが可能であればSHA512など、より強いハッシュ関数を利用したり、Saltを利用する、等の方法を採用した方が良いと思います。 備考:良い

    SHA1でハッシュ化したパスワードは危険になった
    advblog
    advblog 2015/04/21
  • PHP7とjson_decodeとjson_encodeの困った仕様 – 数値型データの問題

    Last Updated on: 2018年8月13日PHP7からint/float/arrayの基的データ型のタイプヒントが導入されます。タイプヒントには困った問題があります。その問題を更に複雑にするjson_decode関数のデータ型変換問題があります。 JSONデータの数値型データ※が特定の型に変換される問題はPHPのjson_decode関数に限った問題ではなく、JSONを利用する処理系を作る全ての開発者が注意すべき問題です。 ※正確には数値型データと書くより「数値型リテラル」と記述するべきですが、「数値型データ」とします。 大きな数値さえ使わなければ気にしなくても問題にならないですが、json_decodeはJSONの整数/浮動小数点形式データをPHPのint型、float型に自動変換します。 JSON RFCの内容 JSONを定義するRFC 7195によると This spe

    PHP7とjson_decodeとjson_encodeの困った仕様 – 数値型データの問題
    advblog
    advblog 2015/04/09
  • PHP7の現状

    (Last Updated On: )PHP7が今年の秋リリースされる予定です。まだまだ多くの変更が行われる予定ですが、現状を簡単にまとめてみたいと思います。代表的な物のみ取り上げています。 ご存知ない方の為に書いておきます。現在リリースされているPHPPHP5です。次のPHPPHP7になり、PHP6はリリースされません。PHP6をUnicodeをネイティブ文字列としてサポートするバージョンとして開発されましたが、文字エンコーディングチェックを内部で自動的に行おうとするなど、無駄が多く遅いため破棄されました。(文字エンコーディングのバリデーションは来アプリでするものです)このため、PHP6はスキップされ次のPHPPHP7になります。 追記:PHP7.0は既にリリースされています。概要はPHP 7.0の概要・新機能・互換性、詳しくはマイグレーションドキュメントをご覧ください。 PHP

    PHP7の現状
    advblog
    advblog 2015/01/26
  • 間違いだらけのHTTPセッション管理とその対策

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

    間違いだらけのHTTPセッション管理とその対策
    advblog
    advblog 2014/02/20
  • 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本体でタイミング攻撃を防御できるようになります
    advblog
    advblog 2014/02/12
  • PHP 5.6の新機能

    (Last Updated On: 2018年8月13日)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(メンテナン

    PHP 5.6の新機能
    advblog
    advblog 2013/12/03
  • JavaScript: / の \ によるエスケープのみによるセキュリティ対策は禁止

    (Last Updated On: )RFC 4696をもう一度読みなおしてみると/もエスケープ可能文字に定義してありました。JavaScriptのエスケープシークエンスの処理の部分も間違っていたので全面的に書き直します。 RFC 4696(JSON)の定義では string = quotation-mark *char quotation-mark char = unescaped / escape ( %x22 / ; ” quotation mark U+0022 %x5C / ; \ reverse solidus U+005C %x2F / ; / solidus U+002F %x62 / ; b backspace U+0008 %x66 / ; f form feed U+000C %x6E / ; n line feed U+000A %x72 / ; r carriag

    JavaScript: / の \ によるエスケープのみによるセキュリティ対策は禁止
    advblog
    advblog 2013/11/17
  • 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のエスケープ
    advblog
    advblog 2013/11/16
  • PHP最速フレームワークPhalconのインストール

    Framework / Memory Usage (mean, megabytes per request) [lessis better]Memory Usage(MB)ZendSymfonyYiiLaravelKohanaCodeIgniterFuelPhalcon0.40.81.21.62.0 参考 Phalcon PHPとSails Node.jsのベンチマーク Phalcon 1.3 と 2.0のベンチマーク Phalconモジュールのインストール ここではCentOS/Scientific Linuxでのインストール例を紹介しますが、マニュアルにはWindows/OSXなどのインストール手順も記載されています。PhalconはC言語で記載されているのでPHPがビルドできる環境でなければなりません。つまり、CentOSなどであればgccなどのビルドツール、php-develなどの

    PHP最速フレームワークPhalconのインストール
    advblog
    advblog 2013/11/14
  • JavaScript文字列のエスケープ

    これらの中で注目すべきは ‘ と ” と \ です。シングルクォート、ダブルクオートは文字リテラルを作成する為に利用され、\ でエスケープできることです。つまり、文字リテラルの最後に \ が現れると文字列の終端が無くなります。単独で不正なJavaScriptの挿入が可能になる訳ではありませんが、プログラムの構造が破壊される事を意味します。 PHPにはJavaScript文字列用のエスケープ関数が用意されていません。htmlspecialchars()やhtmlentities()で代用している場合も多いと思います。しかし、これらの関数ではJavaScript文字列のエスケープを十分に行う事ができません。 JavaScriptプログラムの構造が破壊される例 <?php $msg1 = 'test string\\'; $msg2 = ');alert(document.cookie); //

    JavaScript文字列のエスケープ
    advblog
    advblog 2013/11/03
  • セッションアダプション脆弱性がないセッション管理が必要な理由

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

    セッションアダプション脆弱性がないセッション管理が必要な理由
    advblog
    advblog 2012/12/10
  • PHP 5.4の文字エンコーディング設定

    Last Updated on: 2018年8月13日PHP 5.4 RC1が公開されています。PHP 5.4のリリースが近いです。PHP 5.3の–enable-zend-multibyeの問題でバグレポートをした関係でinternals MLでメールのやり取りをして分った事とその他をまとめておきます。主にSJISを使う場合の注意点です。間違い・勘違いもあるかも知れないので気が付いたらコメントを下さい。 PHP 5.4はデフォルトの内部エンコーディングがISO-8859-1になる SJISでコードを書く場合はzend.script_encoding=SJISを書く SJISでコードを書く場合は内部エンコーディングをSJIS(mbstring.internal_encoding=SJIS)に設定する SJISで出力する場合はmbstring.http_output=SJIS (output

    PHP 5.4の文字エンコーディング設定
    advblog
    advblog 2011/11/05