SiteGuard Lite レビュー:ごく簡単な XSS すら防げず、Web アプリの動作を妨害する

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

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

SiteGuard Lite がアクセスをブロックした際は Forbidden Access と表示される

同社によれば日経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 10 の Windows 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 キーを押したときにも同じ動作となるのでわざわざ「/」を使うこともないだろう。

システムフォント San Francisco を Photoshop, Illustrator から使う

WWDC 2015 で発表された macOS, iOS, watchOS, tvOS 専用のシステムフォント San Francisco。

iOS 9OS X 10.11 El Capitan 以降、画面の様々な部分に使用されているが、一般のアプリケーションからは選択することができない。

しかしながら、 macOS, iOS, tvOS / watchOS 上で動作するソフトウェア製品のモックアップを作成する用途限定で Apple Developer のページからダウンロード、使用することができる。

San Francisco のダウンロード

次のページからダウンロードできる。iOS, macOS, tvOS 用の San Francisco Fonts と watchOS 用の San Francisco Compact Fonts は別のファイルとなっている。

ダウンロードした Zip ファイルを展開すると macOS 用のインストールパッケージになっているので、規約に同意の上インストールする。

すると「SF UI Display」「SF UI Text」の二つのファミリーが使えるようになる。

SF UI Display と Text の違い

和文フォントでは馴染みが薄いが、高品質な欧文フォントでは見出し用の Display と本文用の Text が含まれている場合がある。San Francisco でもこの例に漏れず、それぞれ見出し用と本文用を指している。

このように二種類用意されているのは、同じ形の文字であっても、大きさが違うと読みやすさや印象が異なってくるため。次の図はどちらも San Francisco Display で、大きさを変えたものを並べてあるのだが、どう見えるだろうか。

WWDC 2015 - Introducing the New System Fonts - 98 ページより

それに対し、小さい文字には San Francisco Text を使ったもの。

WWDC 2015 - Introducing the New System Fonts - 99 ページより

こちらのほうが、すっきりとした印象を受けるのではないだろうか。よく見ると文字の間隔や、a, e, g の横の隙間の空き具合が異なる。実際 Display と Text を重ねてみると、だいぶ輪郭が違うことが分かる。

WWDC 2015 - Introducing the New System Fonts - 113 ページより

また、Display のほうにはより細い Ultralight, Light, Thin の三種類のウェイトが追加されている。

SF UI Display と Text の使い分け

実は WWDC 2015 - Introducing the New System Fonts でも説明されている通り、この二つのファミリーは文字の大きさによって自動的に使い分けられている。

WWDC 2015 - Introducing the New System Fonts - 125 ページより

この図の通り、20 ポイント以上では Display を使い、それ未満では Text を使うのがよいだろう。

San Francisco と San Francisco Compact の違い

前述した通り、San Francisco は iPhone, iPod, Mac, Apple TV で使用される iOS, macOS, tvOS 用、San Francisco Compact は Apple Watch で使用される watchOS 用である。

San Francisco Compact では、より小さな画面でより多くの情報を表示するため、 e や o などの丸いアルファベットの側面が直線的に処理されいる。そして、次の図のように無印 San Francisco と混在して使用されることはない。

WWDC 2015 - Introducing the New System Fonts - 27 ページより


参考