2012/09/28

YAPC::Asia Tokyo 2012 1日目

YAPC::Asia Tokyo 2012の初日です. 久しぶりに会う方とご挨拶できて,非常に良かったです.二年ぶりにLarryさんとも写真をとらせていただきました. またXslateのbridgeの件でgfxさんとお話して,今後の対応を確認できたのも収穫です. 以下は聞いてきたトークのメモです.あくまで私のメモなので正確な内容は今後公開されるスライドや恐らくアップロードされる動画を確認してください.おかしい点があれば,ご連絡ください.

What Does Your Code Smell Like?

  • Larray Wallさん
  • perl5のコードをperl6に書き換えるライブコーディング 
    • subの定義に引数を指定できる
    • referecneが簡潔に
    • if, while等の一部で括弧を省略できる
    • (^100).roll(10) 0-100までの乱数を10個生成する
    • say "Before @a"が展開されない.say "Before @a[]"にする必要がある
    • 0 ..^ @x 0から@xまで.省略すると ^@x
    • functional programmingもできる
    • gather/takeでありがちな一時変数を減らしたりとか
    • infix:<M>でオペレータMを定義できる? @out M= merge(@x,@y)みたいなコードがかける
    • その他色々

Web::Security beyond HTML5

  • Yosuke Hasegawaさん

Ajaxを利用したXSS

Ajaxデータを利用したXSS

  • ちょっと遅れて最初5分くらいは聴き逃した
  • IEだと勝手にapplication/javascriptがtext/htmlと解釈されることがある
  • IEにおけるファイルタイプ決定のメカニズムが複雑すぎる
    • URLの拡張子によって挙動が変わったりとか
    • 挙動がいつのまにか変化していることが多い
      • microsoft.com + IEの組み合わせのみでXSSになるページもあった
  • 発生しやすい状況
    • JSON
    • JSONP
    • CSV

Ajaxデータの盗み見

  • JSONとかは狙いやすい
  • Array Hijacking for Android
    • object.prototype. __definegetter__とか使う
  • JSON Hijacking for IE
    • JSONの一部にUTF-7とかで攻撃コードを紛れ込ませる
    • IE6,7だとresponse headerよりも

対策

  • X-Content-Tyep-Options: nosniff
    • IE6,7には効果なし
  • XMLHttpRequest以外からのアクセスを遮断する
    • X-Request-Withを見て判断する(jQueryとかが入れてる)
    • 自分で任意のheaderを使うのもあり

XHR Lv.2の注意点

  • クロスドメインリクエストが可能
  • ただしクライアントとサーバ側で注意しないと危険
    • クライアント側
      • URLのチェックを怠らない
      • URLの確認はじつはめんどくさい
    • サーバ側
      • Originヘッダを見るだけではダメ
      • Cookieを使う
      • setRequestHeaderで独自の確認用ヘッダを付ける
      • preflightリクエストを使うとX-hogehogeというヘッダを使えるようになる
      • Plack::Middleware::CrossOriginを使うと楽

XSSフィルター/XSS Auditor

  • IE8, Chrome,Safariとか
  • 誤検知もあるので,X-XSS-Protectionヘッダでコントロール可能

X-Content-Type-Options: nosniff

  • 動的コンテンツには全部付けておくべき

クリックジャッキング対策

  • X-Frame-Options: DENY
    • できれば使ったほうがよい

Content-Security-Policy(CSP)

  • XSS根絶の切り札
  • まだまだ規格・実装が不安定
  • 許可するリソースを記述

    Content-Security-Policy: default-src 'self'; image-src *
    

HTTPSの強制

  • HTTP Strict Transport Security(HSTS)
  • HTTP Responseヘッダで指定する
    • HTTPでは汚染されているかもしれないので,HTTPSで吐き出す必要がある

まとめ

  • ブラウザベンダーに文句言うだけじゃなく,サーバ側で積極的に対応する必要がある
  • 是非実装に落として,どんどん広めていって欲しい

大きくなったシステムの疎結合化への取り組み

分離する

  • Service Procedureに差し替える
    • 基本的にプレーンなデータを返す
    • オブジェクト等は返さないようにする
  • 今回は内部向けのCoreInternal API
  • 1つのリポジトリにいれてる
    • メリット
      • 既存資産の活用
    • デメリット
      • リポジトリの肥大化
  • JSONRPC over HTTP / Plackを使用
  • まだ社内でもベータ的な状態

コードの計測

  • Inscpect Packageで計測
    • 昨年のmixiの人が発表したやつ
    • 結合度,複合度を計算して,技術的な負債をスコア化
  • コードレビューもやってる
  • ガイドラインをテストにして自動化する
    • @EXPORTを禁止
    • 非推奨モジュールの使用のチェック
    • ループ用途のmap, grep
  • 何気なく書いているコードで複雑化していくので,意識して書く

Perlと出会いPerlを作る

  • 五嶋さん
  • 大学時代はKonohaScriptの開発

gperl

  • コンセプトは世界一高速なPerl処理系を目指している
  • C++でスクラッチで開発
  • フィボナッチやたらいまわしで数十倍高速
    • 数値はperlの弱いところで,文字列処理をやっていないのはちょっとアンフェア by dan kogai
    • Regexとか文字列関連はまだ実装されていないので,できてからベンチ取りたい

高速化

  • 引数用の配列を事前に構築
  • NaN-boxingによる型検査
  • アノテーションによるStatic Typing/JIT Compile

    • # @static_typing, # @jit_safe

      # @static_typing
      sub fib {
          ...
      }
      

仕様の都合で諦めた箇所

  • 関数引数にあるリストの展開
    • 関数用に確保した配列を拡張する必要があるので遅い
  • デフォルトでのスカラー変数の参照渡し

Profiling memory usage of Perl applications

  • ps, top, /proc等を使う
  • RSSを計測の目安に使わないこと
  • Devel::Peekで変数(IV, HV, GV等)の構造を表示できる
  • Devel::Sizeでメモリ使用量を見れる
  • Devel::Sizeを拡張したい.一部した
  • Devel::SizeMeGraph なんか色々可視化してる!

0 件のコメント:

コメントを投稿