2013年3月20日水曜日

プログラム実行系のセキュリティホールに関しての解説

Webセキュリティはもはや収束点ができているのに、まだ誤解が伝授されているケースがある。

ここではそれを正す。

Webセキュリティで結構アウトなのは「プログラムを実行される」ということ

SQLアンチパターン

SQLアンチパターンを買ったのでそのメモ。



2013年3月16日土曜日

Webアプリケーションが止まったときの障害の掘っていきかた

Webアプリケーションの障害対策あるある。いわゆるLAMP環境を想定しています。

  1. 緊急時は、メールではなく、電話で人を捕まえる
    • ありがちなのがメールで必要な人を捕まえようとして、「待ち」の状態に入るという人。悠長なこと言ってられないので、電話で捕まえる
    • インフラ周りは、アプリの担当でなくても、障害ポイントが分かるので、己のサービスを復旧させるためには、上司だろうとたたき起こして助けを求める。
  2. マシン再起動もためらわない
    • がっつり止まっている時には、ためらう必要はない。再起動することで原因を探るための証拠が消えるリスクもあるが、サービス停止のままの方がいいってことはあまりない
    • リモートから再起動できないときには、データセンターに電話をして、物理的に再起動してもらいましょう
    • たまには再起動の練習をしておきましょう。再起動時に自動起動して欲しいサービスが登録されてないというミスは早めに見つけておきましょう
  3. すぐにできる調査あれこれ
    1. 別のルートでアクセスしてみる
      • 携帯からのアクセスだと、いろんなところを経由していうので、別経路としてPCなどのまるで別のネットワークからアクセスしてみる。
    2. エラーログをみる
      • アプリのログや、Apacheのエラーログなど、すぐにアクセスできるように。以外にそのまんまの理由が書かれていることが多い。
      • いつでも見れるように。ログ参照の権限をあまりケチらない。
    3. ロードアベレージみてみる
      • WebやDBのロードアベレージを見る
      • cactiなどのツールは過去にさかのぼってみるには便利だけど、障害時は「今」をみなくちゃいけない
      • ロードアベレージが高い時には、CPUの使用率とIO待ちを見る。ありがちなのは、CPUをあまり使って無くて、DBのクエリを待つApacheプロセスがずらりずらりと並んでいるという状態。そのときにはすぐにDBを疑う
      • PHPでAPCを導入してると、PHPの処理速度がボトルネックになることはほとんど無いけどねー
    4. DBでshow procecsslistしてみる
      • ダメなSQLが滞留しているかも知れない。だめなSQLがロックをかけているかも知れない。phpmyadminだと「プロセス」タブで同じものが見れる。スローログを見てもいいが、閾値以上のSQLが全部でちゃうので、緊急時はどれがダメな子か見分けにくい。
    5. IOが少ないはずのに、IO待ちが多いときにはdstatで見てみる
      • 大した処理が流れてないのに、IO待ちが多いというときには、何か悪さしてないかを疑う。dstatコマンドで、IOがリアルにモニタリングできる
      • 例えばデバッグ用のログを吐きだし続けていて、そこがIOのボトルネックになっていないか疑う
      • Apacheのコネクションを多くしすぎて、メモリが不足し、SWAPすることでディスク書き込みが発生していないか疑う
そんな感じ。ざっとまとめると。
  1. ボトルネックは一つ。それを探す
  2. 遅いというのは「待ち」が発生している状態。ロードアベレージは「待ち」を表す指標でそれそのものは原因を表さない
  3. コンピュータのリソースで、ボトルネックになるのは、CPUとIO。どちらかを特定する。

方眼紙エクセルの光と影の主に光を説明する

方眼紙エクセルという言葉がある。エクセルを表計算ソフトとして使うのではなく、方眼紙として使うことを指す。単に「マス目のいっぱいある書類」だ。

どちらかというと、目的とは違う使い方で揶揄された言い方だ。方眼紙エクセルを普段から使っている人達は、方眼紙エクセルなんて言わない。「ドキュメント」と呼ぶ。

さてこの方眼紙エクセル。嫌いな人は多い。以下嫌いな理由を挙げてみる。

1.エクセルの操作に不慣れ
いくらプログラム腕を磨いていても、表計算ソフトという事務処理アプリにはたどり着かない。事務処理アプリとしては標準でもプログラマーから見れば、門外漢のソフトなのだ。

2.開発ドキュメントに嫌悪感
開発のドキュメントというのはとかく面倒。ソースを見れば分かる、DBを見れば分かる。直接画面を見れば分かることと、なんでエクセルに二重にかかなくちゃ行けないんだと。さらに、要求されるものが、契約書じみたものでやたらと約束事を書かされる。エクセルマス目に書かなくちゃいけない内容がロクなもんじゃないのだ。

そうは行っても、方眼紙エクセルが出回っているのには理由がある。

1.いくらはみ出しても、はみ出さない
例えば、ネットワーク構成図とか作業フローとか、いろんなものが関連している図がある。端から順に配置していくものの、紙のサイズにキレイに収まるとは限らない。ところがエクセルには「一ページに収まるように縮小する」機能がある。

2.吸着機能
あまり知られてない機能だが、セルに描画オブジェクトを吸着させることができる。なんてことはないが、図形のサイズや位置が揃っていると、コネクタでの線ががたつかなくていいのだ。

3.セル罫線だけである程度のワイヤーが作れる
図形を配置するのではなく、エクセルのセルには罫線を各機能がある。罫線だから前後関係という概念がない。ワイヤーなんて、まさに画面と、フォーム要素を罫線で囲っていくだけなので、罫線機能だけで十分ワイヤーが作れる。

4.Office HOMEにもインストールされている
同じくなぜだか会社PCではお絵かきツールとして使われている、PowerPointだが、こちらはOffice HOMEエディションにはインストールされてない。じゃぁってことで。

5.カーソルキーで文字の入力位置が選べる
結構これ大事。マウスというポインティングデバイスを使わなくても、カーソルキーだけでセルを移動することができる。コントロールキーとの組み合わせを使えば、あちらこちらにジャンプできる。キーボードだけでお絵かきが出来るっていい。

6.そもそも開発ドキュメントなんて表が圧倒的に多い
テーブル一覧だの画面一覧だの、開発ドキュメントは圧倒的に「一覧」が多い。仕事というものを計測可能な状態にするのが、プロジェクトマネジメントなのだから、仕事とその成果物に名前をつけて、数えれる状態にしないと行けない。そうなると、システム開発を進めるというのは、一覧作りでしかない。じゃぁ、その付随図表含めてエクセルで作るのはなんらおかしくない。方眼紙のシートと表としてのシートが一つのエクセルドキュメントに共存できる。

そんな感じです。

在宅勤務について

米ヤフーのCEOが在宅勤務の禁止を唱えている。

トリガーの一部となっているのは、「オンラインだから家でも仕事できる」はずが、あんまりオンラインじゃないってこと。これは結構救いようがない。性善説に基づいていたけど善ではなかったという比較的レベルの低い話。

いったん性善説に基づいて家でも人は真面目に仕事をする前提で在宅勤務を考えてみる。

1)会社に居るのと同じくらいコミュニケーションできるから在宅でもいい
2)コミュニケーションを取らなくても成果で判断できるから在宅でもいい

1と2ではだいぶ違う。

1)の場合は結局のところ会社と同じくらいの「割り込み」や「時間のブロック」を許容しなくちゃいけない。家にいても、会議の時間はWebカメラの前に居なくちゃいけない。後輩が相談してきたら答えなくちゃいけない。じゃぁ会社にいくよってなるよね。お医者さんみたいな職業で丸一日いろんな人に対面での相談ごとを受けるのが主な仕事なら、在宅勤務の意味はほとんど無い。

2)の場合は例えばソフトウェアをちゃんと作っていればOKとかそういうこと。それなら確かに会社にいなくていい。でもそれってそもそも従業員である必要があるんだっけ?というところまででさかのぼる。業務委託契約と変わらなくない?本当に成果物だけで判断しても労働者側はいいんだっけ?そこまでのパフォーマンス出せる人ってほんの一部であって、そういう人はもっと早くから独立してるんじゃない?

ということで、ガチで在宅勤務がルールとして整備されると、苦しい重いをする労働者の方なんじゃない?少なくとも「会社に居るだけで働いていることになる。」という方が労働者にとっては楽。

あと、日本の場合には、企業側に労働者の管理監督責任が発生する。通勤時含めて勤務時間の安全は会社が担保しなくちゃいけない。在宅勤務の場合の労働時間って何?ってなるとちょっと分かんない。労働者を子供扱いしましょうってのが国の基本思想なので、「自主性に任せる」というのは割と真逆。


全く仕様の分からないWebアプリの緊急保守をするとき

野戦状態でWebサービスを保守する必要が出てきたりする。そういうときのコツ。

1.少なくとも、ドメインは分かっているはず。
ドメインが分かっていたら、IPアドレスが分かる。IPアドレスが分かれば、どのマシンで動いているかが分かる。

2.Webサーバまでたどり着いたら、ドキュメントルートを探す
Webサーバのconfを見つける。大概は、/etc/httpd/conf の下にある。confはInludeできるので、丹念に、Includeされているconfを探し出す。confの中にはドキュメントルートが定義されているので、そこでアプリのソースが保存されている実体のありかが分かる。

3.アプリをみたら次はDBのありか
「DB」とか「connect」とかのキーワードを頼りに、データベースサーバのありかを見つける。IPアドレスとユーザIDとパスワードがそこにあるはずなので、それを手がかりにデータベースまでたどり着く。

4.最後はちょこっと触って、アプリ保守を一周させる
例えば、画面をちょっと修正しないといけない場合には、画面に書かれている文言をちょっと修正する。句読点をつけるとか。それを直して、実際にアクセスして反映できるかどうかをみて、「今僕は本物のアプリを触れているよお母さん」ということになる。開発→ステージング→本番とリリースの手順はあるだろうが、それでも、「小さく触って本番でリリース出来る流れ」は一周しておく。

アプリのソースとデータベースまでたどり着けたらあとは、そこに「書かれている」ことが全て。ここからスタートしよう。

一番見つけにくいのは、cron。どのサーバのどのユーザで動いているのかがわかりにくい。てことでcronはできたら使わない方がいい。中間ファイルの削除とかなら、アプリのトリガーで古いファイルを削除するロジックをいれていただきたい。

確定申告書メモ

毎年迷っているのでいい加減メモを残しとく。


対象:株を持ってるサラリーマン編

●提出する資料

  • 給与所得の源泉徴収票
  • 特定口座年間取引報告書
  • 配当等とみなされる金額の支払い通知書


●作るモノ

  • 確定申告書B(ところが画面上はこの名前はでてこないので注意)


●利用サイト
所得税(確定申告書等作成コーナー)|申告・納税手続|国税庁
http://www.nta.go.jp/tetsuzuki/shinkoku/shotoku/kakutei.htm
IEでないと使えないから気をつけろ!
→確定申告書作成コーナーのリンクをクリック
「書面で提出」を選ぶ。e-Taxは電子証明書をもらうのにめちゃくちゃ手間がかかる。役所に何回も行かなくちゃいけなくて、早くから準備しなくちゃいけない。スピードを求める人は書面をオススメ。
→所得税の確定申告書作成コーナー
→年末調整済みを選択
→確定申告書等を印刷して税務署に提出する。(e-Taxは利用しない)

●「申告書を作成する」の選択
1)給与所得が一カ所の方
2)先に該当しない方
の選択肢があるが、1)の方は株式の申請がないので、株式の申告がある人は「左記に該当しない方」を選ぶ。

●配当の入力の注意点
・上場株式と非上場株式で入力欄が違うので注意