タグ

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

  • 徳丸さんのブログに対するコメント

    (Last Updated On: 2018年8月4日)最初、書いた時はユーザーが一人だけと頭にあったので思いっきり誤解していました。確かに複数ユーザーの場合は真正性に問題があります。修正版の差分をアーカイブを更新しておきました。 題のブログはこちらです。 書籍『Webアプリケーションセキュリティ対策入門』のCSRF脆弱性 トークンの有効範囲は? トークンがDBに保存される場合、トークンの有効範囲が気になるところです。大垣および第二版のソースを見ると、トークンを保存するテーブルの定義は以下の通りです。 CREATE TABLE form_id (sha1 TEXT PRIMARY KEY, created TEXT NOT NULL) sha1がトークン、createdが生成日時を保持します。 シンプルな構造ですが、これだとトークンは、ユーザーやセッションを超えて、アプリケーション全体

    徳丸さんのブログに対するコメント
    kits
    kits 2015/06/30
    記事が消えていた。 http://blog.ohgaki.net/web-app-security-appendix-updated にはリンクが残っている。/ http://blog.ohgaki.net/criticism-for-my-sample-program に修正の記事。
  • 開発者は必修、CWE/SANS TOP 25の怪物的なセキュリティ対策

    (Last Updated On: 2018年11月3日)SANS TOP 25 の解説はもっと後で行うつもりでした。しかし、現在のアプリケーション開発者向け教育に対する疑念のエントリへの反響が大きいようなので書くことにしました。 やるべきセキュリティ対策には優先順位があります。効果が大きい対策から行うべきです。セキュリティ対策は全体的に行うべきものですが、最も効果的な対策を除いて対策を行うようでは全体的な対策など行えません。 CWE/SANS TOP 25とは? SANS TOP 25の正式名称はCWE/SANS TOP 25 Most Dangerous Software Errorsです。名前の通り最も危険なソフトウェア脆弱性のトップ25を挙げ、その対策を解説したセキュリティ対策のガイドラインです。SANS TOP 25は米国のセキュリティ教育・認証・研究機関であるSANSが不定期に

    開発者は必修、CWE/SANS TOP 25の怪物的なセキュリティ対策
    kits
    kits 2013/12/18
    monster mitigation の意味は「怪物『的な』対策」ではなく単に「怪物の緩和」ではないだろうか。
  • エスケープを無くせばOK、と勘違いして失敗した事例 XPath 1.0

    (Last Updated On: 2018年8月24日)昨日のブログでは.NETにはSQLのエスケープAPIが無いので、セキュリティ対策として末転倒な状態になっている事を紹介しました。もう一つXPath 1.0の失敗例を紹介します。 XPath 1.0の定義にはエスケープが定義されていません。参考:XPathクエリ(1) XPath 1.0のリテラル定義(3.7 Lexical Structure) Literal ::= ‘”‘ [^”]* ‘”‘ | “‘” [^’]* “‘” 文字リテラルの定義はコレだけです。つまり文字列は ‘ (シングルクオート) または ”(ダブルクォート) で囲み、それぞれ ‘ と ” が現れてはならない、としか定義されておらずエスケープ処理が定義されていません。 恐らくXPath 1.0を定義した方たちは「エスケープは悪!エスケープは無い方が良い」と考え

    エスケープを無くせばOK、と勘違いして失敗した事例 XPath 1.0
    kits
    kits 2013/12/13
    "' という文字列リテラルは concat('"', "'") と表現する必要あり。/ エスケープした結果の「分かり易さ」は重要ではないように思う。(HTMLとかは結構分かり難いと思う)
  • IPAの「安全なSQLの呼び出し方」が安全になっていた

    (Last Updated On: 2018年8月4日)IPAは「安全なSQLの呼び出し方」(PDF)を以下のURLから公開しています。 http://www.ipa.go.jp/security/vuln/websecurity.html 「安全なSQLの呼び出し方」は危険である、とするエントリを書こうかと思い、内容を確認するとそうでもありませんでした。 訂正:ツイッターで徳丸氏に確認したところ、徳丸氏もエスケープを含めたSQLインジェクション対策が必要であると考えられていた、ことを確認しました。徳丸氏にはセキュリティ専門家として大変不名誉な記述であった事を訂正し、深くお詫びいたします。内容についての修正は、識別子エスケープについてブログに書くとの事でしたのでブログの内容を確認してから修正します。 別冊の「安全なSQLの呼び出し方」は基中の基である「正確なテキストの組み立て」によるセ

    IPAの「安全なSQLの呼び出し方」が安全になっていた
    kits
    kits 2013/12/10
    「出ていなかった旧版に対する批判」との指摘: http://twitmatome.bogus.jp/archives/18681
  • JavaScript文字列のエスケープを回避する方法

    (Last Updated On: 2018年8月13日)JavaScriptの文字列をエスケープのエントリでJavaScript文字列をエスケープ後に直接出力するより、DOMから取得してはどうか?という提案があったのでエントリを作成しました。 まずJavaScript文字列をJavaScript文字列のエスケープで作成したescape_javascript_string関数を利用した場合の例です。 <span onmouseover="alert('<?php echo escape_javascript_string('Hello From <php>')?>');">マウスをのせてね!</span> JavaScriptでDOMの要素から取得する場合、以下のようになります。要素の取得にはjQueryを利用しています。 <script src="//ajax.googleapis.co

    JavaScript文字列のエスケープを回避する方法
    kits
    kits 2013/11/05
    HTML と JavaScript 両方が混ざった状態でのエスケープを考慮するより、HTMLのエスケープのみを考えた方が簡潔かつ安全と思う。
  • JavaScript文字列のエスケープ

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

    JavaScript文字列のエスケープ
    kits
    kits 2013/11/05
    HTML と JavaScript 両方が混ざった状態でのエスケープは複雑過ぎるように思う。
  • セキュリティ専門家でも間違える!文字エンコーディング問題は難しいのか?

    (Last Updated On: 2018年8月13日)一見徳丸さんのブログは分かりやすいように思えますが、それは単純な実験により分かりやすいように見えるだけで複数の間違いがあります。 その間違いとは 意図の取り違い – 誤読 言語の仕様と実装の理解不足 HTTPやPHP仕様の理解不足 セキュリティ対策をすべき場所の理解不足 です。(※0) 徳丸さんは非常勤とは言え、国の出先機関の研究員であるし、その出先機関は職務放棄とも言える文書(「例えば、PHPを使用しない」と勧める文書)を公開している(いた?)のでしっかり反論しておく必用がありますね。IPAのあの文書は職務放棄と言える文書だと思っています。これについても後で意見を述べます。 意図の取り違い – 誤読 最初の間違いは私のブログのエントリ「何故かあたり前にならない文字エンコーディングバリデーション」に対する理解です。特にPHPユーザに

    セキュリティ専門家でも間違える!文字エンコーディング問題は難しいのか?
    kits
    kits 2009/09/17
    なぜ言及記事に直接リンクしないのだろう。
  • JavaScript無しでフォームをコントロール

    (Last Updated On: 2008年9月3日)言われてみれば、そう言えばそんな機能があったね、と思うような機能はよくあります。 JavaScript無しでフォームを制御する方法はHTML4が策定されている時に追加された機能です。 http://www.w3.org/TR/html401/interact/forms.html#h-17.2.1 以下のLABELタグのサンプルは http://www.0x000000.com/?i=635 より拝借しています。 <label for="action"> <body> Etymology of "Foo" 1 April 2001 When used in connection with `bar' it is generally traced to the WW II era Army slang acronym FUBAR (`F

    JavaScript無しでフォームをコントロール
    kits
    kits 2008/09/03
    label要素を使って input type="submit" を有効にすることができる。
  • 1