xyzzy ファイラの標準の圧縮形式を ZIP にする

xyzzy の二画面ファイラで圧縮ファイルを作ろうとしたとき、拡張子を入力しないと LHA で圧縮され拡張子 lzh が付与される。

毎回 .zip と打つのは面倒だし、LHA はサポートが終了しており、なおかつ脆弱性が残されたままなので変更したい。

ファイラの動作は lisp/filer.l で定義されており、この中の filer-get-archive-name という関数を .xyzzy で上書きすることで動作を変更する。

具体的には lisp/filer.l の filer-get-archive-name の関数定義を丸ごと .xyzzy にコピーしてきて一部を書き換える。

;; ファイラのデフォルト圧縮形式をZIPにする (lisp/filer.l を上書き)
(in-package "editor")
(defun filer-get-archive-name ()
   ;   :   
   ;   :
   ; (ここは filer.l そのまま)
   ;   :
   ;   :
		      (t (concat file ".zip"))) ;; ここを .zip に書き換える
		(merge-pathnames (cdr (assoc 'base data))
				 (filer-get-directory)))))))
(in-package "user")

M-x load-file で .xyzzy を読み込みなおすと変更が反映される。

SiteGuard Lite の機能レビュー

最近使用したレンタルサーバSiteGuard Lite というウェブアプリケーションファイアウォール(WAF)が導入されていたので評価する。

SiteGuard Lite は株式会社ジェイピー・セキュア(神奈川県川崎市、代表:菅原 修)が提供する WAF で、同社が独自で定義したブラックリストによりアクセスを遮断する仕組みになっている。

SiteGuard Lite がアクセスをブロックした際のメッセージ

同社によれば日経SYSTEMの2009年3月号では高く評価されているというが、そこから8年の月日が経ち、数多くの機能が Web にもたらされた。今日の Web においても SiteGuard Lite は有用なのか検証する。

結論からいうと、SiteGuard Lite は簡単な XSS (Cross site scripting) すら防げない。おまけに過剰検出により正常なアプリケーションの動作を妨害してしまう根本的な問題がある

SiteGuard Lite はごく簡単な XSS を防げない

まずは簡単なフォームを作り、XSS脆弱性を突くときに送信されるであろう文字列を送信できるか試してみた。

すると次のような、セキュリティの教科書にでも載っていそうな基本的な文字列を通してしまった。

このコードは、もしアプリケーションに XSS 脆弱性があった場合に、タッチデバイスにおいて任意の JavaScript を実行できる

対して、古くからある onclick, onmouseover, onkeydown, onsubmit などはブロックされた。8年前ならこれで十分と判断されたのだろう。

最も影響の大きな過剰検出

こちらは実際にアプリケーションを作成する際に発見したもの。

最も短い例としては次の文字列でアクセスがブロックされてしまった。

いろいろなパターンを試してみると、次の値を含むデータは GET または POST メソッドで送信できないことが分かった。

  1. ダブルクォーテーション " で囲まれた文字列が 2 の条件を満たす
  2. 「and」または「or」という単語(大文字小文字問わず)を含み、かつ 3 または 4 の条件を満たす
  3. 2 の直後に英数字以外の文字があり、その後ろに「<」または「>」を含む
  4. 2 の前後両方に「<>」または「<」と「>」で囲まれた文字列を含む

たとえば非同期通信で下書き保存などを行う CMS (Contents management system) が JSON を使ってデータをやり取りしていたとすると、データ中に HTML が含まれ、かつ and や or といった単語が <p>~</p> の中に出現することがある。すると、内容に and や or が含まれる場合だけデータが保存できない問題として発現する。たとえ HTML でなくても、 and のあとに不等号を使う可能性は無視できるほど低くはない。

JSON は、現在のブラウザでは標準で扱えるため、 JavaScript のオブジェクトをシリアライズやその逆をするために非常にポピュラーな形式となっている。そのことを考えると、この過剰検出は大いに問題になると考えられる。

結論

SiteGuard Lite はごく簡単な XSS すら防げず、モダンなアプリケーションでは過剰検出の問題に悩まされる可能性がある。

「優秀」なブラックリストがあるのなら、そのリストを使って Web アプリケーションにアタックしその結果をレポートするテストツールを提供してほしい。そしてリソースはアプリケーション側の脆弱性を塞ぐことに注ぐべきだ。

お風呂のコスト

冬はガス代が高い。ひと月に一万円を超えることも珍しくない。

そこで実際にどのくらいのガス代がかかるのかを計算してみよう。

条件の設定

まずは計算必要な変数を集めよう。

  • プロパンガス
    • 燃焼熱 46.36-50.35 MJ/kg (*1)
      ⇒ 低位と高位の中間をとり、H = 48.35 MJ/kg
    • 密度 ρ = 1.895 kg/m³ (*1)
    • 基本料金 2070 円
    • 従量料金 690 円/m³
  • 風呂
    • 容積 200 l
      ⇒ 水の質量換算 m = 200 kg
    • 水の比熱 cp = 4.217 J/g·K
  • 給湯器
    • 効率 Q = 0.80 (*2)
  • 設定温度は季節により変化する
    • 冬(8℃ → 44℃) ΔT = 32 K
    • 春・秋(15℃ → 43℃) ΔT = 28 K
    • 夏(23℃ → 42℃) ΔT = 19 K

計算

以上の値をもとに、お風呂のコストを計算してみよう。まずはお風呂のお湯を沸かすのに必要なエネルギー E を算出する。

E = mcpΔT

給湯器の効率が Q = 0.80 なので、実際に必要な熱量 EE

EE = E/Q

そしてその熱を生み出すのに必要なガスの体積 V

V = EE/ρH

となる。

計算結果

風呂一回分のガス使用量、料金を計算すると次のようになった。冬場は夏場の二倍近い量のガスが必要なことが分かる。

季節 E V ガス料金(従量)
30.4 MJ 0.414 m³ 283 円
春・秋 23.6 MJ 0.322 m³ 221 円
16.0 MJ 0.218 m³ 150 円

また、お風呂を入れる回数を毎日、二日おき、三日おきと変化させると一月あたりの料金は基本料金を含めて次のようになる。炊事によるガスの消費量は、電子レンジや電気ケトルを使えば風呂に比べると圧倒的に少なくなるので、普段の料金と近いのではないだろうか。

季節 毎日 二日おき 三日おき
1万639 円 6355 円 4927 円
春・秋 8735 円 5403 円 4292 円
6583 円 4326 円 3574 円

PuTTY に付属する PSCP でファイルを転送する

Windows には scp コマンドがない(Windows 10Windows Subsystem for Linux にはあるかもしれない)。SSH クライアントに PuTTY を使っているなら PSCP を使おう。

PSCPコマンドラインで動作するツールながら、PuTTYGUI 上で接続条件を設定してセッションとして保存しておけば、それを読み込めるのが便利なところ。

セッションを使用してファイルをリモートから転送するには次のコマンドを実行する。

pscp -C -load セッション ホスト名:/コピー元/の/ファイル ファイル名

逆に、ローカルからリモートへファイルを転送するには次のコマンドを実行する。

pscp -C -load セッション ファイル名 [ファイル名...] ホスト名:/コピー先/ディレクトリ

scp コマンドと同様、 -r オプションを使用することでディレクトリのコピーも行える。

Excel 2013 でスラッシュ(/)が入力できない場合の対処法

Excel でセルの先頭に「/」を入力しようとしてもできない。

これは図のように、メニューを選択するショートカットに割り当てられているからだ。もし入力したい場合はセルをダブルクリックするか、 F2 キーでセルを入力モードにしてから「/」を入力する必要がある。

「/」キーを押すとメニューが選択される

たまにしか入力しない場合は問題ないが、頻繁に「/」を入力する必要がある場合は、設定を変えることですぐに入力できるようになる。

設定方法

  1. リボンの「ファイル」タブを選択する
  2. 「オプション」を選択
  3. Excelのオプションが開くので、「詳細設定」タブを選択
  4. 下にスクロールすると「Lotus との互換性」の項目の下に「Microsoft Excel メニュー キー」の項目があるので、「/」が入力されているのを削除する

標準で「/」に割り当てられているが、 Alt や F10 キーを押したときにも同じ動作となるのでわざわざ「/」を使うこともないだろう。