"【告知】"がウザいという人がいるらしい。

自分でフィルタするか、removeしろよっていうのもアレかなと思ったので使い捨てGM

// ==UserScript==
// @name           Twittfilter
// @namespace      http://d.hatena.ne.jp/send/
// @description    twitter filter
// @include        http://twitter.com/*
// ==/UserScript==
//
(function (){

var filter = function(nodes) {
  var f = {
    anouncement : function (context){
      var path = '//td[@class="content"]/span[@class="entry-title entry-content"]';
      var elems = document.evaluate(path, context, null, 7, null);
      var regex = /^\s*【告知】/;
      for(var e = 0 ; e < elems.snapshotLength; e++) {
        var elem = elems.snapshotItem(e);
        var s = elem.firstChild.data;
        if(s != null && regex.test(s)) elem.style['display'] = 'none';
      }
    },
  };
  for each (var node in nodes) 
    for each (var func in f) func(node);
}

filter([document]);
if(typeof window.AutoPagerize != 'undefined') window.AutoPagerize.addFilter(filter);

})();

不安になるコード

これで動くと思ってなかった。試してみて怖くなった。

<?Php                                                                                                                                   
                                                                                                                                        
ECHO "aaaaaaa\n";                                                                                                                       
                                                                                                                                        
function FoobAr() {                                                                                                                     
      return "foobar\n";                                                                                                                
}                                                                                                                                       
                                                                                                                                        
eChO fOOBaR(); //=> foobar                                                                                                              
                                                                                                                                        
IF(true) echo "true\n";                                                                                                                 
                                                                                                                                        
claSs Aaa {                                                                                                                             
  public staTic function dump() {                                                                                                       
    echo "aaa\n";                                                                                                                       
  }                                                                                                                                     
  pubLic funCtion doDump() {                                                                                                            
    echo "!!!!!\n";                                                                                                                     
  }                                                                                                                                     
}                                                                                                                                       
                                                                                                                                        
AaA::Dump();                                                                                                                            
AAA::DumP();                                                                                                                            
$Obj = new AaA();                                                                                                                       
$obj = nEw AaA();                                                                                                                       
$obj->DODUMP();           

一括実行系ななにか

分散系のこと考えてた時に出来たなにか

<?php
class LumpedCollection {                                                                                                                
  protected $_container = array();                                                                                                      
  protected $_method_cache = array();                                                                                                   
  protected $_class_name;                                                                                                               
                                                                                                                                        
  public function __construct(array $objs = null) {                                                                                     
    if($objs === null || count($objs) == 0) return;                                                                                      
    $this->_class_name = get_class($objs[0]);                                                                                           
    $this->_container = $objs;                                                                                                          
  }                                                                                                                                     
                                                                                                                                        
  public function append(stdClass $obj) {                                                                                               
    $obj_class = get_class($obj);                                                                                                       
                                                                                                                                        
    if($this->_class_name == null)                                                                                                      
      $this->_class_name = $obj_class;                                                                                                  
    else if ($obj_class !== $this->_class_name)                                                                                         
      throw new InvalidArgumentsException();                                                                                            
                                                                                                                                        
    $this->_container[] = $obj;                                                                                                         
  }                                                                                                                                     
                                                                                                                                        
  public function __call($name, $args) {                                                                                               
    $method = (isset($this->method_cache[$name]))                                                                                       
        ? $this->method_cache[$name]                                                                                                    
        : $this->method_cache[$name] = new ReflectionMethod($this->_class_name,$name);                                                  
                                                                                                                                        
    $results = array();                                                                                                                 
    foreach($this->_container as $obj) {                                                                                                
      $instance = ($method->isStatic()) ? null : $obj;                                                                                  
      $result = $method->invokeArgs($instance, $args);                                                                                  
      $results = $this->merge_result($result, $results);                                                                                
    }                                                                                                                                   
                                                                                                                                        
    return $results;                                                                                                                    
  }                                                                                                                                     
                                                                                                                                        
  protected function merge_result($result, $results) {                                                                                  
    if ($result !== null && is_array($result))                                                                                          
      $results = array_merge($results,$result);                                                                                         
    else                                                                                                                                
      $results[] = $result;                                                                                                             
                                                                                                                                        
    return $results;                                                                                                                    
  }
}                                                                                                                                       
                                                                                                                                        
class LumpedCollectionTest extends stdClass {                                                                                           
  private static $value = "aaa";                                                                                                        
  private $foo;                                                                                                                         
  public function setFoo($value) {                                                                                                      
    $this->foo = $value;                                                                                                                
    return true;                                                                                                                        
  }                                                                                                                                     
  public static function getValue() {                                                                                                   
    return self::$value;                                                                                                                
  }                                                                                                                                     
  public function getFoo() {                                                                                                            
    return $this->foo;                                                                                                                  
  }                                                                                                                                     
                                                                                                                                        
  public function getHash() {                                                                                                           
    return array('hoge' => 1,'hage' => 2, 'var' => array(1,2));                                                                         
  }                                                                                                                                     
                                                                                                                                        
  public function getArray() {                                                                                                          
    return array(1,2);                                                                                                                  
  }                                                                                                                                     
}                                                                                                                                       
                                                                                                                                        
$container = new LumpedCollection();                                                                                                    
$container->append(new LumpedCollectionTest());                                                                                         
$container->append(new LumpedCollectionTest());                                                                                         
$container->append(new LumpedCollectionTest());                                                                                         
$container->append(new LumpedCollectionTest());                                                                                         
                                                                                                                                        
$ret = $container->setFoo("foo");                                                                                                       
print_r($ret);                                                                                                                          
$ret = $container->getValue();                                                                                                          
print_r($ret);                                                                                                                          
$ret = $container->getFoo();                                                                                                            
print_r($ret);                                                                                                                          
$ret = $container->getArray();                                                                                                          
print_r($ret);                                                                                                                         
$ret = $container->getHash();                                                                                                          
print_r($ret);                                                                                                                        

Firefox + Firebug + Google Adsense におけるクラッシュ問題について

id:RAVERAVER:20071013 の 人に聞かれたので、 Firebug ML 読み直しました。
ML で、 John J Barton 氏 の発言を中心に見た限りでは、こういう感じなのかな?

現象

msvcrt.dll + Google Adsense の問題っぽい。

原因

  • Google Adsense の問題
    • Script を Create したり、 Destroy したりしすぎ
    • イベント毎に大きな script 読み込みすぎ
    • 結果として warning が多すぎる
  • Firefox 側の問題
    • script.functionSource のバグ

暫定的対応策

  • 攻撃的対応
    • about:config の javascript.options.strict を false
      • デフォルトは、 false だけど、 true だと更に warning が出るからマズそう
    • Firebug 1.1.0b3 以降に、バージョン上げて、Firebug->Script->Option->DecompileScriptsForSource のチェック外す
  • 守備的対応
    • Adsense を Blockするか、 Firebug を無効にする
      • なんか、その辺サイトとか設定に応じてよしなにする 拡張とか何かを作ると喜ばれそうかな?

John 曰く

  • 数日内に、1.1.0b5 出すから、それが上手く問題解決出来るといいなあ…
  • あんまり大きな声では言えないけど、今回は運悪く、こういう warning 絡みのことで、色々あったけど、普通の JavaScript プログラマにとっては、 javascript.options.strict って、凄くためになるんだけどなあ…

感想とか

  • Firebug って、 about:config 弄ってた記憶がないな。 script.functionSource で、その辺りを動的に弄れるのかな?覚えてないから、あとで読み直す。
  • Google みたいな影響力が強すぎるところが、うんこソースを吐いてると、非常に迷惑
    • 今、 Google Adsence*2 切ってるのはそれが大きい。切ってなくても、その頃は落ちなかったけど、 Firebug 有効にしてると、 Google 絡みの warning で埋まって見れたもんじゃないから。今は有効にしたら落ちるのかな?
    • どっちにしても、リソース食い過ぎだから、もうちょっとシェイプアップして欲しい
    • 自動生成とか、難読化が嫌いなのもその辺がまだ信頼出来るレベルじゃないから
  • 他所のサイトに読み込まれる前提の JS に関しては、考慮出来ているものはやっぱり少ないと思う
    • jQueryYUI は、結構いい
    • 今、特化したのを作りつつ、実際に使ったりしてるけど、大幅に見直したいところがいっぱいあるから、それが終わったらCodeRepos辺りで公開する
      • イヌ科にとっとと公開しろと脅されたので、頑張ります
  • エチケットペーパー
    • 斜め読み + 意訳 + 主観 なので、深追い派は、 firebug@googlegroups.com 辺り参照
      • ノイズや関係ないやと思ったトピック以外は、俺も見てます。 John 中心で見るのがお勧め
    • ツッコミは、正しいツッコミ先でお願いします
      • 自信がなければ、俺宛推奨で

*1:Mac については、俺は、 Adsense 切ってるし、基本 Firebug も disable なので、試してないです。

*2:Analytics もだけど

Mozilla24 出張Shibuya.jsでjQueryの話をしました。

反省点とか。

  • TAKESAKOメソッドでその場で資料を作ってたのでgdgdでした
    • 調べる部分などはあらかじめ調べていたから良いかなと思ったら甘かった。
  • プロジェクタ等のチェックはやっておくべきだった。
  • 声とかも聞き取りにくかったですね。ごめんなさい
  • 銅鑼あり初めてで焦った割には、全部終わらなかった…

資料


追記:
いぬビームの発言は半分捏造です。twitterでそういうことは言ってません。(会社で同じニュアンスのことは言ってたけど。)

Port801セキュリティ勉強会の資料

箇条書きテキストしか用意していなかった。超適当

Webアプリケーションセキュリティ初歩の初歩 〜はまちやの傾向と対策〜

  • はじめに
    • どうセキュリティに取り組むべきか
      • 脆弱性の殆どは、境界で起きる
      • 基本はバリデーションとエスケープ
        • バリデーション
          • そのシステムで予期しているデータのみ受け入れる
        • エスケープ
          • 出力先に応じて適切な出力を送る
      • でも、IEとか
        • バッドノウハウ的に対応せざるを得ないものがある
        • CSSXSS的なのとかContent-Type判別を利用した攻撃とか
      • 当然、自システム内での脆弱性の作り込みには注意する
        • Cなんかでは、Buffer Overflowとか作り込みやすいよね
      • バッドノウハウ/グッドラッパー
      • 脅威のカテゴリ
        • Spoofing(なりすまし/偽装)
        • Tampering(データの改ざん)
        • Repudiation(否認)
        • Information disclosure(情報漏洩)
        • Denial of Service(サービス拒否)
        • Elevation of privilege(権限の昇格)
  • Sessionの取り扱い
    • Session情報
      • GET/POSTパラメータ
      • Cookie
    • Session Hijack
      • セッション情報の漏洩
        • Referrer
        • Cookie
        • パケット盗聴
    • CSRF
      • POST+トーク
        • ワンタイムトークン派
        • 第二セッションID派
      • Second Password
      • Refferrer
    • XSS
    • Session Fixation
      • ログイン前にセッション発行
      • Cookie Monster(Mozilla)
        • example.co.jpから
      • 地域ドメイン
        • sakai.sakai.osaka.jpから
          • Set-Cookie: foo=bar; domain=.sakai.osaka.jp
          • Set-Cookie: foo=bar; domain=.osaka.jp
  • その他の脆弱性
    • Null byte Attack
      • バイナリセーフか否か
    • SQL Injection
      • ちゃんとエスケープ
      • Bind機構
    • Email header Injection
      • 改行コード取らないと超踏み台
    • OS Command Injection
      • 自分で調べて><
    • Path Traversal/Directory Traversal
      • 自分で調べて><
  • ちょうIE対策!
    • IEのコンテンツ判別の特殊性
      • Content-Typeをどう指定しても、FindMimeFromData API で256バイト先読みして判別する
        • 偽装可能
      • 偽装出来るようなものは省かないといけない
    • CSSXSS
    • カラーパレットのある画像フォーマット問題

週末のこと

土曜日

  • brazilさんが上京してるということで飲んだ。
    • いつものエンジニア連中に混じってtwitterで見かけるようなメンツがいた。
    • brazilに言われたこと
      • すごく太った?
      • 酒焼けした?
      • Ustreamの時の目がヤバい
      • 顔が18禁
    • てか、なんかみんなひどい。さかさマンとか。
  • 途中で抜けて、ka_o_riとVoQnでKIMAGUREさんところに飲みに行った
    • 先にjazzanovaとMondBizがいた
    • 梅酒とか。

日曜日

  • rikoさん親子とjazzanovaとKIMAGUREさんで等々力渓谷
    • 大西タマエという人に関する電波落書きを多数発見した。途中から渓谷よりもそっちがメインになった。
    • 三茶のサンバカーニバルには間に合わず。