SlideShare a Scribd company logo
1 of 46
これからHTML5を書く人のための
     セキュリティ
     Yoshinori Matsumoto
         2012/07/21
目次

  • 自己紹介
  • これから書き始める人の悩み
  • ついついやってしまうセキュリティホール
  • HTML5まわりで起こるセキュリティ対策
  • まとめ
  • 参考文献
HTML5など勉強会 #05 2012/07/21 @ym405nm http://ym405nm.info
自己紹介
• 名前:松本 悦宜(よしのり)
• Twitter : @ym405nm
• 会社:神戸デジタル・ラボ
• 業務:Webプログラマー、セキュリティエンジニ
   ア、セキュリティコンサルタント

   セキュリティ          JavaScript   HTML5 Android   Web
       神戸ITフェスティバル                讃岐うどん   小ネタ
HTML5など勉強会 #05 2012/07/21 @ym405nm http://ym405nm.info
自己紹介

  • セキュリティ診断
                 事例 : ECサイト
                  管理者アカウントがのっとられないか
                  商品在庫・値段が改ざんされないか
                  顧客情報が漏洩しないか
                  攻撃の踏み台にされないか


                            擬似的に攻撃して検証

HTML5など勉強会 #05 2012/07/21 @ym405nm http://ym405nm.info
これから書き始める人の
     悩み

  これからHTML5を書き始める人の悩みは何ですか?
これから書き始める人の悩み

  • そうだ、Webアプリをつくろう!
 •サーバサイド
 •DOMツリー
 •JavaScript
 •Ajax
                   理解することがいっぱいある
 •新要素
 •ブラウザ依存
 •スマホ対応  
 など
HTML5など勉強会 #05 2012/07/21 @ym405nm http://ym405nm.info
これから書き始める人の悩み

  • そうだ、Webアプリをつくろう!
 •セキュリティ??
   クロスサイトスクリプティング、SQLインジェクショ
   ン、クロスサイトリクエストフォージェリ、バッファ・
   オーバーフロー、OSコマンドインジェクション、クロ
   スサイトトレーシング、ブルートフォースアタック

              セキュリティなんてやってられへん!!

HTML5など勉強会 #05 2012/07/21 @ym405nm http://ym405nm.info
これから書き始める人の悩み

  • 重要なサイトならともかくすべてのセキュリ
    ティチェックを行うのは大変!

  • かといって全く対策しないのも・・・
  • セキュリティにも優先順位があるはず
              重要なセキュリティ対策と

              HTML5を書くときの注意点をご紹介
HTML5など勉強会 #05 2012/07/21 @ym405nm http://ym405nm.info
ついついやってしまう
 セキュリティホール

   Webサイトのセキュリティに関して、
    よく検出されるセキュリティホール
      対策しようと思っていても、
      ついつい忘れてしまうけど、
   悪用されると結構あぶない2例をご紹介
XSS

  • XSS (Cross Site Scripting)
  • 勝手に攻撃者がJavaScriptを実行してしまう
    手法

  • 攻撃者が作ったコードが他の人のブラウザで
    も実行される

  • サイト改ざん、他サイトへの誘導
HTML5など勉強会 #05 2012/07/21 @ym405nm http://ym405nm.info
XSS
  • サンプルをお見せします!
   簡易おみくじ

                           テキストボックスに名前を入れ
                           て、送信ボタンを押すと、

                           フォームの下に名前とおみくじ結
                           果が出力される




HTML5など勉強会 #05 2012/07/21 @ym405nm http://ym405nm.info
ちょこっとソースでも。。。

<form method="post" action="">
<p>名前 : <input type="text" name="name" value=""></p>
<input class="btn btn-primary" type="submit" value="submit">
</form>
	
<?php
	 if(!empty($_POST['name'])){
	 	 $omikuji = array('大吉','中吉','末吉','凶');
	   	 $result = $omikuji[ rand(0, count($omikuji)-1) ];
	   	
	   	 echo "<hr>";	
	   	 printf("<h2>%s さんは %s です!</h2>",$_POST['name'],$result);
	 }
?>
                                     投稿した値が
                                    そのまま表示される
原因
   投稿した値が                     タグを入れると
  そのまま表示される                HTMLとして認識される


<span style= color:red >
まつもと
</span>


ここにJavaScriptを仕込むと
   それが実行される

          サイト改ざん、悪意のあるサイト誘導
対策
      HTMLとして特別な意味をもつ記号を、
        エスケープ処理をして無効にする


PHPでの対策例
  htmlspecialchars($_POST['name'],ENT_QUOTES,'UTF-8');


     変換前                               変換後
                                &lt;span
<span
                                style=&quot;color:red
style="color:red;">
                                ;&quot;&gt;まつもと
まつもと</span> さんは
                                &lt;/span&gt; さんは
凶 です!
                                凶 です!
SQLインジェクション


  • 攻撃者がSQL文を改ざんして、勝手に好きな
    SQL文を追加する

  • 顧客情報やコンテツ情報がSQLに入っている
    と大きな被害になる

  • 情報漏えい、サイト改ざん
HTML5など勉強会 #05 2012/07/21 @ym405nm http://ym405nm.info
SQLインジェクション
    ログインフォーム




                            SELECT * FROM USERS
                      WHERE ID=”___” and PASS = “___”
           ID, PASS                SQL文

         ログイン可否                     結果
                        server                   DB

HTML5など勉強会 #05 2012/07/21 @ym405nm http://ym405nm.info
SQLインジェクション
    ログインフォーム



                                  改ざんPASS = “___”
                            SELECT * FROM USERS
                      WHERE ID=”___” and

                                 ログインできる
          攻撃コード                    SQL文

          ログインOK                    結果
                        server                 DB

HTML5など勉強会 #05 2012/07/21 @ym405nm http://ym405nm.info
HTML5まわりで起こる
  セキュリティ対策
    HTML5活用するサイトをつくるときに、
   頭にいれておきたいセキュリティ対策を4例紹介
        簡単に直せるけど、重要な
その1
     XSS対策


  • やっぱりXSS対策は重要
  • JavaScriptを実行されないようにエスケープ
    することが大事

  • これはHTML5の新しい要素でも一緒のこと

HTML5など勉強会 #05 2012/07/21 @ym405nm http://ym405nm.info
その1
 URLで指定した動画ファイルを再生するとしたら。。。

       http://server.com/video?file=html5.mov

                         HTML




                         ページ
HTML5など勉強会 #05 2012/07/21 @ym405nm http://ym405nm.info
その1
 URLで指定した動画ファイルを再生するとしたら。。。

       http://server.com/video?file=html5.mov




         <video src=”html5.mov”></video>




HTML5など勉強会 #05 2012/07/21 @ym405nm http://ym405nm.info
その1
 URLで指定した動画ファイルを再生するとしたら。。。

 http://server.com/video?file= ><script>alert(1)</script>




     <video src=””><script>alert(1)</script>
                       ”></video>



HTML5など勉強会 #05 2012/07/21 @ym405nm http://ym405nm.info
その2

  新しいフォーム


  • HTML5でブラウザがやってくれる便利な機
    能たち

  • ブラウザがやってくれることは改ざんされる
    ものと認識する



HTML5など勉強会 #05 2012/07/21 @ym405nm http://ym405nm.info
その2


                          送信




HTML5など勉強会 #05 2012/07/21 @ym405nm http://ym405nm.info
その2


    <input type=”text” required>

                            required属性を指定するこ
                            とで、空欄では送信できず
                            エラーメッセージを表示する




HTML5など勉強会 #05 2012/07/21 @ym405nm http://ym405nm.info
その2


   <input type=”email”>

                          type属性にemailを指定する
                          と、メールアドレスでない値
                          はエラーが表示される




HTML5など勉強会 #05 2012/07/21 @ym405nm http://ym405nm.info
その2



 HTML5の新機能を使えば、ブラウザがバリデート
 を行ってくれるのでサーバサイドでバリデートす
 る必要はない!!
                                 DANGER



HTML5など勉強会 #05 2012/07/21 @ym405nm http://ym405nm.info
その2


            Chek      HTTPリクエスト

      Browser         HTTPレスポンス                server

                 HTTPリクエスト

                              HTTPレスポンス
           攻撃者           攻撃者が直接HTTPリクエストを作成
                         した場合、値のブラウザが行う値の
                       チェックをすり抜ける
HTML5など勉強会 #05 2012/07/21 @ym405nm http://ym405nm.info
その2


            Chek      HTTPリクエスト

      Browser         HTTPレスポンス         Chek server

                 HTTPリクエスト

                              HTTPレスポンス
           攻撃者           どんなリクエストを送られてもいい
                         ように、サーバサイドでチェックをし
                       ておく
HTML5など勉強会 #05 2012/07/21 @ym405nm http://ym405nm.info
その3
       Ajax


  • Ajaxによりユーザビリティが大幅向上!
  • Ajax使うと、JavaScriptで値をやりとりする
    ことが増える

  • JavaScriptコードを乗っ取られる危険性も

HTML5など勉強会 #05 2012/07/21 @ym405nm http://ym405nm.info
その3

       HTML

        Java            Ajax
       Script

                         ここで通信をする値に関しても
   サンプル                  チェックをすることが必須




HTML5など勉強会 #05 2012/07/21 @ym405nm http://ym405nm.info
その3
       サンプル




     jQuery
 $("#sample1button").on("click",function(){
      $.get("sample1.php",{query: $("#sample1text").val()},function(data){
 	    // callback
     });     通信先           リクエストパラメータ コールバック
 });
                                        処理


HTML5など勉強会 #05 2012/07/21 @ym405nm http://ym405nm.info
その3
       値のチェックしてる?
$("#sample1button").on("click",function(){
    $.get("sample1.php",{query: $("#sample1text").val()},function(data){
	       $("#sample1").html(data);
    });
});             投稿した値が
               そのまま表示される
                        送られてきたデータに
                       JavaScriptの攻撃コードがあったら
                       実行される



HTML5など勉強会 #05 2012/07/21 @ym405nm http://ym405nm.info
その3
      値のチェックしてる?

$("#sample1button").on("click",function(){
    $.get("sample1.php",{query: $("#sample1text").val()},function(data){
	       $("#sample1").text(data);
    });
});
            textメソッドを使用する


                       HTMLのタグを無効にする




HTML5など勉強会 #05 2012/07/21 @ym405nm http://ym405nm.info
その3
     JSON 正しく使えてる?

$("#sample3button").on("click",function(){
    $.get("sample3.php",{query: $("#sample3text").val()},function(data){
        e = eval("("+data+")");
        $("#sample3").text(e["res"]);
    });
});    テキストデータで来たJSON形式を
        オブジェクト形式に変換する

           データに JavaScript の関数が入っていた場合、
           eval関数によって実行される恐れがある



HTML5など勉強会 #05 2012/07/21 @ym405nm http://ym405nm.info
その3
      JSON 正しく使えてる?

• JavaScriptでしっかりJSONを受け取る
$("#sample4button").on("click",function(){
    $.getJSON("sample4.php",{query: $("#sample4text").val()},function(data){
	 $("#sample4").text(data["res"]);
    });
});


                            jQuery には getJSON とよばれる
                            メソッドが用意されている



HTML5など勉強会 #05 2012/07/21 @ym405nm http://ym405nm.info
その3
    JSON 正しく使えてる?

• JSONデータを扱うときは、テキストデータで
  はなくJSON形式

    Content-Type: application/json; charset=UTF-8



                     HTTPレスポンスでしっかり指定する



HTML5など勉強会 #05 2012/07/21 @ym405nm http://ym405nm.info
その3
    JSON 正しく使えてる?

• テキストデータに解釈されないように注意する
     X-Content-Type-Options: nosniff




                    IE が HTML ファイル以外を HTML と
                    認識するのを防ぐ



HTML5など勉強会 #05 2012/07/21 @ym405nm http://ym405nm.info
その3
    JSON 正しく使えてる?

• HTMLと同様に特定の記号には注意する
   echo json_encode($res);

     json_encode 関数は
     「 」等を自動的にエスケープする




HTML5など勉強会 #05 2012/07/21 @ym405nm http://ym405nm.info
その4

    iframe vs IE


  • 新しいブラウザを頼り過ぎない
  • 新しいブラウザといえども、今後もセキュリ
    ティ問題は出続けます




HTML5など勉強会 #05 2012/07/21 @ym405nm http://ym405nm.info
その4



               <iframe src=”http://server.com”>
    HTML


   iframe




HTML5など勉強会 #05 2012/07/21 @ym405nm http://ym405nm.info
その4


              <a>
                <iframe src=”http://server.com”>
    HTML      </a>

   iframe      IEではiframe全体にリンクが貼れる


                     攻撃者サイト内で悪用される



HTML5など勉強会 #05 2012/07/21 @ym405nm http://ym405nm.info
その4

  X-Frame-Options: SAMEORIGIN

     同一サイト以外からは ifame内では呼び出されない


 参考            HTTP/1.1 302 Found
               Cache-Control: private
 google.com    Content-Length: 222
               Content-Type: text/html; charset=UTF-8
               Date: Fri, 20 Jul 2012 15:14:42 GMT
               Location: https://www.google.co.jp/
               Server: gws
               X-Frame-Options: SAMEORIGIN
               x-xss-protection: 1; mode=block
               X-Firefox-Spdy: 1

HTML5など勉強会 #05 2012/07/21 @ym405nm http://ym405nm.info
まとめ


  • HTML5で新しくできること、新しく理解すべ
    きことはたくさんある

  • セキュリティもそのなかの1つ
  • 重要なところや、よく使うとこを中心に対策
    とる必要がある


HTML5など勉強会 #05 2012/07/21 @ym405nm http://ym405nm.info
参考文献

 体系的に学ぶ 安全なWebアプリケーションの作り方 脆弱性が生まれる原理と対策の実践
 徳丸浩 ソフトバンククリエイティブ


 HTML5 Security Cheatsheet
 http://html5sec.org/


 PHPのイタい入門書を読んでAjaxのXSSについて検討した(1)
 http://d.hatena.ne.jp/ockeghem/20110905/p1


 X-Content-Type-Options: nosniff つかわないやつは死ねばいいのに!
 http://d.hatena.ne.jp/hasegawayosuke/20110106/p1


 サンプルコード
 https://github.com/ym405nm/html5sec-demo



HTML5など勉強会 #05 2012/07/21 @ym405nm http://ym405nm.info
おわりに


  • Webアプリを作るのは楽しいですよね
  • 気軽に作るアプリもいくつか気にしておくセ
    キュリティがある

  • Webアプリ OR HTMLを書きながらセキュリ
    ティを学ぶ勉強会もしたいですね


HTML5など勉強会 #05 2012/07/21 @ym405nm http://ym405nm.info

More Related Content

Viewers also liked

社会ネットワーク勉強会第3回発表
社会ネットワーク勉強会第3回発表社会ネットワーク勉強会第3回発表
社会ネットワーク勉強会第3回発表shigex Kondou
 
Git, Github超入門
Git, Github超入門Git, Github超入門
Git, Github超入門Tomoki Saito
 
今日から始めるGithub
今日から始めるGithub今日から始めるGithub
今日から始めるGithublion-man
 
Slideshareで見つけた「読みやすい・見やすいスライド」に共通する4つのポイント
Slideshareで見つけた「読みやすい・見やすいスライド」に共通する4つのポイントSlideshareで見つけた「読みやすい・見やすいスライド」に共通する4つのポイント
Slideshareで見つけた「読みやすい・見やすいスライド」に共通する4つのポイントTaichi Hirano
 
人と向き合うプロトタイピング
人と向き合うプロトタイピング人と向き合うプロトタイピング
人と向き合うプロトタイピングwariemon
 
0528 kanntigai ui_ux
0528 kanntigai ui_ux0528 kanntigai ui_ux
0528 kanntigai ui_uxSaori Matsui
 
ビジネスマン必見!キレイな提案書を作るためのデザインの基礎知識
ビジネスマン必見!キレイな提案書を作るためのデザインの基礎知識ビジネスマン必見!キレイな提案書を作るためのデザインの基礎知識
ビジネスマン必見!キレイな提案書を作るためのデザインの基礎知識Tsutomu Sogitani
 
女子の心をつかむUIデザインポイント - MERY編 -
女子の心をつかむUIデザインポイント - MERY編 -女子の心をつかむUIデザインポイント - MERY編 -
女子の心をつかむUIデザインポイント - MERY編 -Shoko Tanaka
 

Viewers also liked (11)

社会ネットワーク勉強会第3回発表
社会ネットワーク勉強会第3回発表社会ネットワーク勉強会第3回発表
社会ネットワーク勉強会第3回発表
 
Git, Github超入門
Git, Github超入門Git, Github超入門
Git, Github超入門
 
スクラム再入門
スクラム再入門スクラム再入門
スクラム再入門
 
今日から始めるGithub
今日から始めるGithub今日から始めるGithub
今日から始めるGithub
 
ネットワーク構築訓練 入門
ネットワーク構築訓練 入門ネットワーク構築訓練 入門
ネットワーク構築訓練 入門
 
Slideshareで見つけた「読みやすい・見やすいスライド」に共通する4つのポイント
Slideshareで見つけた「読みやすい・見やすいスライド」に共通する4つのポイントSlideshareで見つけた「読みやすい・見やすいスライド」に共通する4つのポイント
Slideshareで見つけた「読みやすい・見やすいスライド」に共通する4つのポイント
 
人と向き合うプロトタイピング
人と向き合うプロトタイピング人と向き合うプロトタイピング
人と向き合うプロトタイピング
 
WordPressのCDN化
WordPressのCDN化WordPressのCDN化
WordPressのCDN化
 
0528 kanntigai ui_ux
0528 kanntigai ui_ux0528 kanntigai ui_ux
0528 kanntigai ui_ux
 
ビジネスマン必見!キレイな提案書を作るためのデザインの基礎知識
ビジネスマン必見!キレイな提案書を作るためのデザインの基礎知識ビジネスマン必見!キレイな提案書を作るためのデザインの基礎知識
ビジネスマン必見!キレイな提案書を作るためのデザインの基礎知識
 
女子の心をつかむUIデザインポイント - MERY編 -
女子の心をつかむUIデザインポイント - MERY編 -女子の心をつかむUIデザインポイント - MERY編 -
女子の心をつかむUIデザインポイント - MERY編 -
 

Similar to これからHTML5を書く人のためのセキュリティ - HTML5など勉強会

すぐできるWeb制作時のセキュリティTips
すぐできるWeb制作時のセキュリティTipsすぐできるWeb制作時のセキュリティTips
すぐできるWeb制作時のセキュリティTipsyoshinori matsumoto
 
Concentrated HTML5 & Attractive HTML5
Concentrated HTML5 & Attractive HTML5Concentrated HTML5 & Attractive HTML5
Concentrated HTML5 & Attractive HTML5Sho Ito
 
体系的に学ばないXSSの話
体系的に学ばないXSSの話体系的に学ばないXSSの話
体系的に学ばないXSSの話Yutaka Maehira
 
お父さんのための実用JavaScriptプログラミング~入門篇~
お父さんのための実用JavaScriptプログラミング~入門篇~お父さんのための実用JavaScriptプログラミング~入門篇~
お父さんのための実用JavaScriptプログラミング~入門篇~Che Renkov
 
イマドキのフロントエンドエンジニアの道具箱
イマドキのフロントエンドエンジニアの道具箱イマドキのフロントエンドエンジニアの道具箱
イマドキのフロントエンドエンジニアの道具箱Fumio SAGAWA
 
Attractive HTML5
Attractive HTML5Attractive HTML5
Attractive HTML5Sho Ito
 
今日こそわかる、安全なWebアプリの作り方2010
今日こそわかる、安全なWebアプリの作り方2010今日こそわかる、安全なWebアプリの作り方2010
今日こそわかる、安全なWebアプリの作り方2010Hiroshi Tokumaru
 
Application Architecture for Enterprise Win Store Apps with DDD Pattern
Application Architecture for Enterprise Win Store Apps with DDD PatternApplication Architecture for Enterprise Win Store Apps with DDD Pattern
Application Architecture for Enterprise Win Store Apps with DDD PatternAtsushi Kambara
 
jQuery Validation x ASP.NET MVC で遭遇した不具合 & 対抗ハック
jQuery Validation x ASP.NET MVC で遭遇した不具合 & 対抗ハックjQuery Validation x ASP.NET MVC で遭遇した不具合 & 対抗ハック
jQuery Validation x ASP.NET MVC で遭遇した不具合 & 対抗ハックJun-ichi Sakamoto
 
Phpcon tokyo 20120_bigginer
Phpcon tokyo 20120_bigginerPhpcon tokyo 20120_bigginer
Phpcon tokyo 20120_bigginerHideo Kashioka
 
ASP.NET シングル ページ アプリケーション (SPA) 詳説
ASP.NET シングル ページ アプリケーション (SPA) 詳説ASP.NET シングル ページ アプリケーション (SPA) 詳説
ASP.NET シングル ページ アプリケーション (SPA) 詳説Akira Inoue
 
「html5 boilerplate」から考える、これからのマークアップ
「html5 boilerplate」から考える、これからのマークアップ「html5 boilerplate」から考える、これからのマークアップ
「html5 boilerplate」から考える、これからのマークアップYasuhito Yabe
 
第9回勉強会 Webセキュリティー
第9回勉強会 Webセキュリティー第9回勉強会 Webセキュリティー
第9回勉強会 Webセキュリティーhakoika-itwg
 
オフラインWebアプリの再到来で今、再び注目されるAPIの本命 ーJavaScript SQL-like database
オフラインWebアプリの再到来で今、再び注目されるAPIの本命 ーJavaScript SQL-like databaseオフラインWebアプリの再到来で今、再び注目されるAPIの本命 ーJavaScript SQL-like database
オフラインWebアプリの再到来で今、再び注目されるAPIの本命 ーJavaScript SQL-like databaseyoshikawa_t
 
ウェブアーキテクチャの歴史と未来
ウェブアーキテクチャの歴史と未来ウェブアーキテクチャの歴史と未来
ウェブアーキテクチャの歴史と未来Kazuho Oku
 
Pro aspnetmvc3framework chap15
Pro aspnetmvc3framework chap15Pro aspnetmvc3framework chap15
Pro aspnetmvc3framework chap15Hideki Hashizume
 
XXE、SSRF、安全でないデシリアライゼーション入門
XXE、SSRF、安全でないデシリアライゼーション入門XXE、SSRF、安全でないデシリアライゼーション入門
XXE、SSRF、安全でないデシリアライゼーション入門Hiroshi Tokumaru
 
Webシステムとちょっと便利なツール
Webシステムとちょっと便利なツールWebシステムとちょっと便利なツール
Webシステムとちょっと便利なツールMasashi Shinbara
 
第19回html5とか勉強会 pjax
第19回html5とか勉強会 pjax第19回html5とか勉強会 pjax
第19回html5とか勉強会 pjaxKensaku Komatsu
 

Similar to これからHTML5を書く人のためのセキュリティ - HTML5など勉強会 (20)

すぐできるWeb制作時のセキュリティTips
すぐできるWeb制作時のセキュリティTipsすぐできるWeb制作時のセキュリティTips
すぐできるWeb制作時のセキュリティTips
 
Concentrated HTML5 & Attractive HTML5
Concentrated HTML5 & Attractive HTML5Concentrated HTML5 & Attractive HTML5
Concentrated HTML5 & Attractive HTML5
 
体系的に学ばないXSSの話
体系的に学ばないXSSの話体系的に学ばないXSSの話
体系的に学ばないXSSの話
 
お父さんのための実用JavaScriptプログラミング~入門篇~
お父さんのための実用JavaScriptプログラミング~入門篇~お父さんのための実用JavaScriptプログラミング~入門篇~
お父さんのための実用JavaScriptプログラミング~入門篇~
 
JSON吸って吐く機械
JSON吸って吐く機械JSON吸って吐く機械
JSON吸って吐く機械
 
イマドキのフロントエンドエンジニアの道具箱
イマドキのフロントエンドエンジニアの道具箱イマドキのフロントエンドエンジニアの道具箱
イマドキのフロントエンドエンジニアの道具箱
 
Attractive HTML5
Attractive HTML5Attractive HTML5
Attractive HTML5
 
今日こそわかる、安全なWebアプリの作り方2010
今日こそわかる、安全なWebアプリの作り方2010今日こそわかる、安全なWebアプリの作り方2010
今日こそわかる、安全なWebアプリの作り方2010
 
Application Architecture for Enterprise Win Store Apps with DDD Pattern
Application Architecture for Enterprise Win Store Apps with DDD PatternApplication Architecture for Enterprise Win Store Apps with DDD Pattern
Application Architecture for Enterprise Win Store Apps with DDD Pattern
 
jQuery Validation x ASP.NET MVC で遭遇した不具合 & 対抗ハック
jQuery Validation x ASP.NET MVC で遭遇した不具合 & 対抗ハックjQuery Validation x ASP.NET MVC で遭遇した不具合 & 対抗ハック
jQuery Validation x ASP.NET MVC で遭遇した不具合 & 対抗ハック
 
Phpcon tokyo 20120_bigginer
Phpcon tokyo 20120_bigginerPhpcon tokyo 20120_bigginer
Phpcon tokyo 20120_bigginer
 
ASP.NET シングル ページ アプリケーション (SPA) 詳説
ASP.NET シングル ページ アプリケーション (SPA) 詳説ASP.NET シングル ページ アプリケーション (SPA) 詳説
ASP.NET シングル ページ アプリケーション (SPA) 詳説
 
「html5 boilerplate」から考える、これからのマークアップ
「html5 boilerplate」から考える、これからのマークアップ「html5 boilerplate」から考える、これからのマークアップ
「html5 boilerplate」から考える、これからのマークアップ
 
第9回勉強会 Webセキュリティー
第9回勉強会 Webセキュリティー第9回勉強会 Webセキュリティー
第9回勉強会 Webセキュリティー
 
オフラインWebアプリの再到来で今、再び注目されるAPIの本命 ーJavaScript SQL-like database
オフラインWebアプリの再到来で今、再び注目されるAPIの本命 ーJavaScript SQL-like databaseオフラインWebアプリの再到来で今、再び注目されるAPIの本命 ーJavaScript SQL-like database
オフラインWebアプリの再到来で今、再び注目されるAPIの本命 ーJavaScript SQL-like database
 
ウェブアーキテクチャの歴史と未来
ウェブアーキテクチャの歴史と未来ウェブアーキテクチャの歴史と未来
ウェブアーキテクチャの歴史と未来
 
Pro aspnetmvc3framework chap15
Pro aspnetmvc3framework chap15Pro aspnetmvc3framework chap15
Pro aspnetmvc3framework chap15
 
XXE、SSRF、安全でないデシリアライゼーション入門
XXE、SSRF、安全でないデシリアライゼーション入門XXE、SSRF、安全でないデシリアライゼーション入門
XXE、SSRF、安全でないデシリアライゼーション入門
 
Webシステムとちょっと便利なツール
Webシステムとちょっと便利なツールWebシステムとちょっと便利なツール
Webシステムとちょっと便利なツール
 
第19回html5とか勉強会 pjax
第19回html5とか勉強会 pjax第19回html5とか勉強会 pjax
第19回html5とか勉強会 pjax
 

More from yoshinori matsumoto

はじめてのマーケットプレイス
はじめてのマーケットプレイスはじめてのマーケットプレイス
はじめてのマーケットプレイスyoshinori matsumoto
 
防御から謝罪まで・・・WordPressにヤマを張るっ!
防御から謝罪まで・・・WordPressにヤマを張るっ!防御から謝罪まで・・・WordPressにヤマを張るっ!
防御から謝罪まで・・・WordPressにヤマを張るっ!yoshinori matsumoto
 
攻撃者からみたWordPressセキュリティ
攻撃者からみたWordPressセキュリティ攻撃者からみたWordPressセキュリティ
攻撃者からみたWordPressセキュリティyoshinori matsumoto
 
Word press セキュリティ show!!
Word press セキュリティ show!!Word press セキュリティ show!!
Word press セキュリティ show!!yoshinori matsumoto
 
Android解析勉強会 #2 広告収入モジュール編
Android解析勉強会 #2 広告収入モジュール編Android解析勉強会 #2 広告収入モジュール編
Android解析勉強会 #2 広告収入モジュール編yoshinori matsumoto
 
第1回Androidアプリ解析勉強会XXX解析チーム
第1回Androidアプリ解析勉強会XXX解析チーム第1回Androidアプリ解析勉強会XXX解析チーム
第1回Androidアプリ解析勉強会XXX解析チームyoshinori matsumoto
 
この秋何かつくる人のためのセキュリティ事情
この秋何かつくる人のためのセキュリティ事情この秋何かつくる人のためのセキュリティ事情
この秋何かつくる人のためのセキュリティ事情yoshinori matsumoto
 
イベント管理サイト応用するよ
イベント管理サイト応用するよイベント管理サイト応用するよ
イベント管理サイト応用するよyoshinori matsumoto
 
OSSで地域貢献 - 加古川起源説 -
OSSで地域貢献 - 加古川起源説 -OSSで地域貢献 - 加古川起源説 -
OSSで地域貢献 - 加古川起源説 -yoshinori matsumoto
 
セキュリティビジュアライゼーション - LT Spiral #04
セキュリティビジュアライゼーション - LT Spiral #04セキュリティビジュアライゼーション - LT Spiral #04
セキュリティビジュアライゼーション - LT Spiral #04yoshinori matsumoto
 
春のチキチキjQuery祭り - 姫路IT系勉強会
春のチキチキjQuery祭り - 姫路IT系勉強会春のチキチキjQuery祭り - 姫路IT系勉強会
春のチキチキjQuery祭り - 姫路IT系勉強会yoshinori matsumoto
 

More from yoshinori matsumoto (15)

はじめてのマーケットプレイス
はじめてのマーケットプレイスはじめてのマーケットプレイス
はじめてのマーケットプレイス
 
防御から謝罪まで・・・WordPressにヤマを張るっ!
防御から謝罪まで・・・WordPressにヤマを張るっ!防御から謝罪まで・・・WordPressにヤマを張るっ!
防御から謝罪まで・・・WordPressにヤマを張るっ!
 
攻撃者からみたWordPressセキュリティ
攻撃者からみたWordPressセキュリティ攻撃者からみたWordPressセキュリティ
攻撃者からみたWordPressセキュリティ
 
Word press セキュリティ show!!
Word press セキュリティ show!!Word press セキュリティ show!!
Word press セキュリティ show!!
 
Happy status Coding
Happy status CodingHappy status Coding
Happy status Coding
 
社内合宿成果発表
社内合宿成果発表社内合宿成果発表
社内合宿成果発表
 
Android解析勉強会 #2 広告収入モジュール編
Android解析勉強会 #2 広告収入モジュール編Android解析勉強会 #2 広告収入モジュール編
Android解析勉強会 #2 広告収入モジュール編
 
第1回Androidアプリ解析勉強会XXX解析チーム
第1回Androidアプリ解析勉強会XXX解析チーム第1回Androidアプリ解析勉強会XXX解析チーム
第1回Androidアプリ解析勉強会XXX解析チーム
 
この秋何かつくる人のためのセキュリティ事情
この秋何かつくる人のためのセキュリティ事情この秋何かつくる人のためのセキュリティ事情
この秋何かつくる人のためのセキュリティ事情
 
イベント管理サイト応用するよ
イベント管理サイト応用するよイベント管理サイト応用するよ
イベント管理サイト応用するよ
 
OSSで地域貢献 - 加古川起源説 -
OSSで地域貢献 - 加古川起源説 -OSSで地域貢献 - 加古川起源説 -
OSSで地域貢献 - 加古川起源説 -
 
セキュリティビジュアライゼーション - LT Spiral #04
セキュリティビジュアライゼーション - LT Spiral #04セキュリティビジュアライゼーション - LT Spiral #04
セキュリティビジュアライゼーション - LT Spiral #04
 
ペアプロしてきた
ペアプロしてきたペアプロしてきた
ペアプロしてきた
 
社内勉強会 20120518
社内勉強会 20120518社内勉強会 20120518
社内勉強会 20120518
 
春のチキチキjQuery祭り - 姫路IT系勉強会
春のチキチキjQuery祭り - 姫路IT系勉強会春のチキチキjQuery祭り - 姫路IT系勉強会
春のチキチキjQuery祭り - 姫路IT系勉強会
 

これからHTML5を書く人のためのセキュリティ - HTML5など勉強会

  • 1. これからHTML5を書く人のための セキュリティ Yoshinori Matsumoto 2012/07/21
  • 2. 目次 • 自己紹介 • これから書き始める人の悩み • ついついやってしまうセキュリティホール • HTML5まわりで起こるセキュリティ対策 • まとめ • 参考文献 HTML5など勉強会 #05 2012/07/21 @ym405nm http://ym405nm.info
  • 3. 自己紹介 • 名前:松本 悦宜(よしのり) • Twitter : @ym405nm • 会社:神戸デジタル・ラボ • 業務:Webプログラマー、セキュリティエンジニ ア、セキュリティコンサルタント セキュリティ JavaScript HTML5 Android Web 神戸ITフェスティバル 讃岐うどん 小ネタ HTML5など勉強会 #05 2012/07/21 @ym405nm http://ym405nm.info
  • 4. 自己紹介 • セキュリティ診断 事例 : ECサイト 管理者アカウントがのっとられないか 商品在庫・値段が改ざんされないか 顧客情報が漏洩しないか 攻撃の踏み台にされないか 擬似的に攻撃して検証 HTML5など勉強会 #05 2012/07/21 @ym405nm http://ym405nm.info
  • 5. これから書き始める人の 悩み これからHTML5を書き始める人の悩みは何ですか?
  • 6. これから書き始める人の悩み • そうだ、Webアプリをつくろう! •サーバサイド •DOMツリー •JavaScript •Ajax 理解することがいっぱいある •新要素 •ブラウザ依存 •スマホ対応   など HTML5など勉強会 #05 2012/07/21 @ym405nm http://ym405nm.info
  • 7. これから書き始める人の悩み • そうだ、Webアプリをつくろう! •セキュリティ?? クロスサイトスクリプティング、SQLインジェクショ ン、クロスサイトリクエストフォージェリ、バッファ・ オーバーフロー、OSコマンドインジェクション、クロ スサイトトレーシング、ブルートフォースアタック セキュリティなんてやってられへん!! HTML5など勉強会 #05 2012/07/21 @ym405nm http://ym405nm.info
  • 8. これから書き始める人の悩み • 重要なサイトならともかくすべてのセキュリ ティチェックを行うのは大変! • かといって全く対策しないのも・・・ • セキュリティにも優先順位があるはず 重要なセキュリティ対策と HTML5を書くときの注意点をご紹介 HTML5など勉強会 #05 2012/07/21 @ym405nm http://ym405nm.info
  • 9. ついついやってしまう セキュリティホール Webサイトのセキュリティに関して、 よく検出されるセキュリティホール 対策しようと思っていても、 ついつい忘れてしまうけど、 悪用されると結構あぶない2例をご紹介
  • 10. XSS • XSS (Cross Site Scripting) • 勝手に攻撃者がJavaScriptを実行してしまう 手法 • 攻撃者が作ったコードが他の人のブラウザで も実行される • サイト改ざん、他サイトへの誘導 HTML5など勉強会 #05 2012/07/21 @ym405nm http://ym405nm.info
  • 11. XSS • サンプルをお見せします! 簡易おみくじ テキストボックスに名前を入れ て、送信ボタンを押すと、 フォームの下に名前とおみくじ結 果が出力される HTML5など勉強会 #05 2012/07/21 @ym405nm http://ym405nm.info
  • 12. ちょこっとソースでも。。。 <form method="post" action=""> <p>名前 : <input type="text" name="name" value=""></p> <input class="btn btn-primary" type="submit" value="submit"> </form> <?php if(!empty($_POST['name'])){ $omikuji = array('大吉','中吉','末吉','凶'); $result = $omikuji[ rand(0, count($omikuji)-1) ]; echo "<hr>"; printf("<h2>%s さんは %s です!</h2>",$_POST['name'],$result); } ?> 投稿した値が そのまま表示される
  • 13. 原因 投稿した値が タグを入れると そのまま表示される HTMLとして認識される <span style= color:red > まつもと </span> ここにJavaScriptを仕込むと それが実行される サイト改ざん、悪意のあるサイト誘導
  • 14. 対策 HTMLとして特別な意味をもつ記号を、 エスケープ処理をして無効にする PHPでの対策例 htmlspecialchars($_POST['name'],ENT_QUOTES,'UTF-8'); 変換前 変換後 &lt;span <span style=&quot;color:red style="color:red;"> ;&quot;&gt;まつもと まつもと</span> さんは &lt;/span&gt; さんは 凶 です! 凶 です!
  • 15. SQLインジェクション • 攻撃者がSQL文を改ざんして、勝手に好きな SQL文を追加する • 顧客情報やコンテツ情報がSQLに入っている と大きな被害になる • 情報漏えい、サイト改ざん HTML5など勉強会 #05 2012/07/21 @ym405nm http://ym405nm.info
  • 16. SQLインジェクション ログインフォーム SELECT * FROM USERS WHERE ID=”___” and PASS = “___” ID, PASS SQL文 ログイン可否 結果 server DB HTML5など勉強会 #05 2012/07/21 @ym405nm http://ym405nm.info
  • 17. SQLインジェクション ログインフォーム 改ざんPASS = “___” SELECT * FROM USERS WHERE ID=”___” and ログインできる 攻撃コード SQL文 ログインOK 結果 server DB HTML5など勉強会 #05 2012/07/21 @ym405nm http://ym405nm.info
  • 18. HTML5まわりで起こる セキュリティ対策 HTML5活用するサイトをつくるときに、 頭にいれておきたいセキュリティ対策を4例紹介 簡単に直せるけど、重要な
  • 19. その1 XSS対策 • やっぱりXSS対策は重要 • JavaScriptを実行されないようにエスケープ することが大事 • これはHTML5の新しい要素でも一緒のこと HTML5など勉強会 #05 2012/07/21 @ym405nm http://ym405nm.info
  • 20. その1 URLで指定した動画ファイルを再生するとしたら。。。 http://server.com/video?file=html5.mov HTML ページ HTML5など勉強会 #05 2012/07/21 @ym405nm http://ym405nm.info
  • 21. その1 URLで指定した動画ファイルを再生するとしたら。。。 http://server.com/video?file=html5.mov <video src=”html5.mov”></video> HTML5など勉強会 #05 2012/07/21 @ym405nm http://ym405nm.info
  • 22. その1 URLで指定した動画ファイルを再生するとしたら。。。 http://server.com/video?file= ><script>alert(1)</script> <video src=””><script>alert(1)</script> ”></video> HTML5など勉強会 #05 2012/07/21 @ym405nm http://ym405nm.info
  • 23. その2 新しいフォーム • HTML5でブラウザがやってくれる便利な機 能たち • ブラウザがやってくれることは改ざんされる ものと認識する HTML5など勉強会 #05 2012/07/21 @ym405nm http://ym405nm.info
  • 24. その2 送信 HTML5など勉強会 #05 2012/07/21 @ym405nm http://ym405nm.info
  • 25. その2 <input type=”text” required> required属性を指定するこ とで、空欄では送信できず エラーメッセージを表示する HTML5など勉強会 #05 2012/07/21 @ym405nm http://ym405nm.info
  • 26. その2 <input type=”email”> type属性にemailを指定する と、メールアドレスでない値 はエラーが表示される HTML5など勉強会 #05 2012/07/21 @ym405nm http://ym405nm.info
  • 27. その2 HTML5の新機能を使えば、ブラウザがバリデート を行ってくれるのでサーバサイドでバリデートす る必要はない!! DANGER HTML5など勉強会 #05 2012/07/21 @ym405nm http://ym405nm.info
  • 28. その2 Chek HTTPリクエスト Browser HTTPレスポンス server HTTPリクエスト HTTPレスポンス 攻撃者 攻撃者が直接HTTPリクエストを作成 した場合、値のブラウザが行う値の チェックをすり抜ける HTML5など勉強会 #05 2012/07/21 @ym405nm http://ym405nm.info
  • 29. その2 Chek HTTPリクエスト Browser HTTPレスポンス Chek server HTTPリクエスト HTTPレスポンス 攻撃者 どんなリクエストを送られてもいい ように、サーバサイドでチェックをし ておく HTML5など勉強会 #05 2012/07/21 @ym405nm http://ym405nm.info
  • 30. その3 Ajax • Ajaxによりユーザビリティが大幅向上! • Ajax使うと、JavaScriptで値をやりとりする ことが増える • JavaScriptコードを乗っ取られる危険性も HTML5など勉強会 #05 2012/07/21 @ym405nm http://ym405nm.info
  • 31. その3 HTML Java Ajax Script ここで通信をする値に関しても サンプル チェックをすることが必須 HTML5など勉強会 #05 2012/07/21 @ym405nm http://ym405nm.info
  • 32. その3 サンプル jQuery $("#sample1button").on("click",function(){ $.get("sample1.php",{query: $("#sample1text").val()},function(data){ // callback }); 通信先 リクエストパラメータ コールバック }); 処理 HTML5など勉強会 #05 2012/07/21 @ym405nm http://ym405nm.info
  • 33. その3 値のチェックしてる? $("#sample1button").on("click",function(){ $.get("sample1.php",{query: $("#sample1text").val()},function(data){ $("#sample1").html(data); }); }); 投稿した値が そのまま表示される 送られてきたデータに JavaScriptの攻撃コードがあったら 実行される HTML5など勉強会 #05 2012/07/21 @ym405nm http://ym405nm.info
  • 34. その3 値のチェックしてる? $("#sample1button").on("click",function(){ $.get("sample1.php",{query: $("#sample1text").val()},function(data){ $("#sample1").text(data); }); }); textメソッドを使用する HTMLのタグを無効にする HTML5など勉強会 #05 2012/07/21 @ym405nm http://ym405nm.info
  • 35. その3 JSON 正しく使えてる? $("#sample3button").on("click",function(){ $.get("sample3.php",{query: $("#sample3text").val()},function(data){ e = eval("("+data+")"); $("#sample3").text(e["res"]); }); }); テキストデータで来たJSON形式を オブジェクト形式に変換する データに JavaScript の関数が入っていた場合、 eval関数によって実行される恐れがある HTML5など勉強会 #05 2012/07/21 @ym405nm http://ym405nm.info
  • 36. その3 JSON 正しく使えてる? • JavaScriptでしっかりJSONを受け取る $("#sample4button").on("click",function(){ $.getJSON("sample4.php",{query: $("#sample4text").val()},function(data){ $("#sample4").text(data["res"]); }); }); jQuery には getJSON とよばれる メソッドが用意されている HTML5など勉強会 #05 2012/07/21 @ym405nm http://ym405nm.info
  • 37. その3 JSON 正しく使えてる? • JSONデータを扱うときは、テキストデータで はなくJSON形式 Content-Type: application/json; charset=UTF-8 HTTPレスポンスでしっかり指定する HTML5など勉強会 #05 2012/07/21 @ym405nm http://ym405nm.info
  • 38. その3 JSON 正しく使えてる? • テキストデータに解釈されないように注意する X-Content-Type-Options: nosniff IE が HTML ファイル以外を HTML と 認識するのを防ぐ HTML5など勉強会 #05 2012/07/21 @ym405nm http://ym405nm.info
  • 39. その3 JSON 正しく使えてる? • HTMLと同様に特定の記号には注意する echo json_encode($res); json_encode 関数は 「 」等を自動的にエスケープする HTML5など勉強会 #05 2012/07/21 @ym405nm http://ym405nm.info
  • 40. その4 iframe vs IE • 新しいブラウザを頼り過ぎない • 新しいブラウザといえども、今後もセキュリ ティ問題は出続けます HTML5など勉強会 #05 2012/07/21 @ym405nm http://ym405nm.info
  • 41. その4 <iframe src=”http://server.com”> HTML iframe HTML5など勉強会 #05 2012/07/21 @ym405nm http://ym405nm.info
  • 42. その4 <a> <iframe src=”http://server.com”> HTML </a> iframe IEではiframe全体にリンクが貼れる 攻撃者サイト内で悪用される HTML5など勉強会 #05 2012/07/21 @ym405nm http://ym405nm.info
  • 43. その4 X-Frame-Options: SAMEORIGIN 同一サイト以外からは ifame内では呼び出されない 参考 HTTP/1.1 302 Found Cache-Control: private google.com Content-Length: 222 Content-Type: text/html; charset=UTF-8 Date: Fri, 20 Jul 2012 15:14:42 GMT Location: https://www.google.co.jp/ Server: gws X-Frame-Options: SAMEORIGIN x-xss-protection: 1; mode=block X-Firefox-Spdy: 1 HTML5など勉強会 #05 2012/07/21 @ym405nm http://ym405nm.info
  • 44. まとめ • HTML5で新しくできること、新しく理解すべ きことはたくさんある • セキュリティもそのなかの1つ • 重要なところや、よく使うとこを中心に対策 とる必要がある HTML5など勉強会 #05 2012/07/21 @ym405nm http://ym405nm.info
  • 45. 参考文献 体系的に学ぶ 安全なWebアプリケーションの作り方 脆弱性が生まれる原理と対策の実践 徳丸浩 ソフトバンククリエイティブ HTML5 Security Cheatsheet http://html5sec.org/ PHPのイタい入門書を読んでAjaxのXSSについて検討した(1) http://d.hatena.ne.jp/ockeghem/20110905/p1 X-Content-Type-Options: nosniff つかわないやつは死ねばいいのに! http://d.hatena.ne.jp/hasegawayosuke/20110106/p1 サンプルコード https://github.com/ym405nm/html5sec-demo HTML5など勉強会 #05 2012/07/21 @ym405nm http://ym405nm.info
  • 46. おわりに • Webアプリを作るのは楽しいですよね • 気軽に作るアプリもいくつか気にしておくセ キュリティがある • Webアプリ OR HTMLを書きながらセキュリ ティを学ぶ勉強会もしたいですね HTML5など勉強会 #05 2012/07/21 @ym405nm http://ym405nm.info