Titanium Mobile勉強会に行って来ました。

はじめまして株式会社アロハのアロハシャツ担当のchariと申します。

2/14にTitanium Mobileの勉強会に行って来ましたのでpostします。
とは言ってもとりあえず勉強会中に取ったマインドマップですが。。。

勉強会の内容は

  • Titanium Mobile の説明(Titanium Mobile のエヴァンジェリスト増井雄一郎さん)
  • Titanium Mobile を活用したアプリ事例紹介1【Zaim】 閑歳孝子さん
  • Titanium Mobile を活用したアプリ事例紹介2【積ん読本】 灰色ハイジさん

の3名の方の発表でした。(少し遅れて行ったので増井さんのは途中から)

閑歳さんのはスライドが上がってましたのでそちら見ていただいても良いかと思います。(閑歳さんのzaimのスライド)

細かい技術的な話というよりは、実際にアプリ実装の際にハマった点とかを多く語って頂いてたイメージですね。

後はAndroid対応では予想通り細かい所でiOSのコードのままだと動かないことが多かったみたいです。
このあたりは今後のバージョンアップに期待したいですね。

自分も新しいアプリリリース出来たら勉強会とかで発表出来るように頑張りたいものです。

20120214@Ti.勉強会

Smarty3でのエスケープ漏れの防ぎ方

記念すべきblog第1回目は、最初から技術話です。このblogの方向性が見えようというものですね。

HTML出力でのエスケープを1つ1つやっていると、エスケープ漏れがセキュリティホールになるため危険です。デフォルトでエスケープされ、指定時のみエスケープしないようにするのが漏れがなくなり安全です。

Smarty3ではそのようなやり方が可能になりました。

エスケープする:{$xss_string}
エスケープしない:{$html_string nofilter}

variableフィルタを使うことでこれが可能になります。

function variablefilter_escape($value, $smarty)
{
return htmlspecialchars($value, ENT_QUOTES, 'UTF-8');
}

$smarty->registerFilter('variable', 'variablefilter_escape');

マニュアル:http://www.smarty.net/docs/ja/api.register.filter.tpl

マニュアルにはvariableフィルタの詳細については書かれていないのですが、{}で囲まれた部分を出力する際にこのフィルタが呼ばれます。フィルタを通したくない場合にはnofilterを指定することでフィルタが使われなくなります。

悩ましいのが「HTMLはエスケープしたいけど改行は<br />にしたい」という場合です。「{$xss_string|nl2br nofilter}」では全体がエスケープされずxssの危険があります。「$xss_stringをエスケープしたのちにnl2brをしてnofilter」が正解ですが、次のようになります。

{{$xss_string}|nl2br nofiler}

直観的ではないのですが、{}の単位でエスケープされるので、このような表記が可能になります。