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 件のコメント:
コメントを投稿