Greasemonkey で Google Track Link を削除

基本的にはGoogle Remove Junk Liteを入れれば良いが、私の環境では以下の2点の手を加えないと使えなかった。

  1. 実行ページに http://*.google.*/search*https://*.google.*/search*を加える.
  2. QUERY_STRING の順番が異なる場合も動作するように修正する.例えば,
    else if(a.href.match(/\/url\?.*&url=/)){
      var url = this.qs('url',a.href);
      a.href = decodeURIComponent(url.replace(/\+/g, '%20'));
    }
    

    を条件判定の最後に追加するなど.

Disable Excel Add-in Send-to-Bluetooth

Excel のアドインで「Bluetooth送信」なる機能をリボンに表示するものが,色々なアドインの動作を狂わせることがある.
こいつは消そうと思ってもなかなか消せないが,レジストリの書き換えで対処できることが分かった.

レジストリキーの場所
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\Excel\Addins\XXXOfficeAddin.ExcelAddin
ここで,XXXの部分は,web で検索すると Bt などとなっているが,(参照→Office programs may crash with the SendToBluetooth add-in installed)
私の環境では Rtk であった.Realtek の bluetooth ドライバを入れると勝手に追加されるものだと思う.
ともかく,Excel を落として,当該キーの配下の DWORD 値の LoadBehavior を 0 とし,Excel を再起動すれば,これが原因の問題は解決しているはず.

netcat-traditional

Debian wheezy を入れて,Proxy 越しに ssh をしようとしたら,それまでの .ssh/config では通らなかった.

nc: invalid option -- 'x'
nc -h for help
ssh_exchange_identification: Connection closed by remote host

理由は,netcat-traditional というパッケージが入っていて,nc コマンドに proxy を指定する -x オプションがないから.
netcat-openbsd とかを入れればOK

バッチファイルで logrotate

なんか昔に sh で組んだけど,sh が使える普通の環境なら logrotate.d 使えばいいと気付いて,実際には使ってなかった.
(hadacchi_blog : logrotateをするスクリプト)
win で使いたくなって,cygwin はもはや使ってないので,バッチファイルで作った.

使い方は,以下を logrotate.bat とした時,

logrotate.bat hogehoge.ext

エラー処理してないので,利用時は自分で注意してね.

@echo off

setlocal enabledelayedexpansion

for %%i in (%*) do (
  set file=%%~ni
  set ext=%%~xi
  set /a num=0
  :LOOP
    if exist !file!.!num!!ext! ( set /a num+=1 ) else goto ENDLOOP
  goto LOOP
  :ENDLOOP
  set /a num-=1
  for /l %%n in (!num!,-1,0) do (
    set /a tonum=%%n+1
    ren !file!.%%n!ext! !file!.!tonum!!ext!
    if errorlevel 1 ( goto ERR )
  )
  copy !file!!ext! !file!.0!ext!
  if errorlevel 1 ( goto ERR )
)
exit

:ERR
pause

「インターネットオプション」をショートカットに登録

これに限らないんだけど,コントロールパネルにある機能をショートカットに登録する方法.
インターネットオプションの場合…

  • c:\windows\system32\inetcpl.cplへのショートカットを作成する.

標準のアイコンも,cplファイルの中にある.
他の機能とかは,@IT:Windows TIPS -- Knowledge:コントロール・パネル・アイテムをコマンドラインから呼び出す を参照のこと.

確定申告

そろそろ、確定申告の時期だ。
復興特別所得税の入ったexcelを作ったので、公開しておく。
ただし、あんまし自分に関係ないとこは、検算できないので実装してない。
平成25年版確定申告計算表
マクロにつけたオレオレ署名の証明書の拇印:
‎5d 3c 8e ab 83 95 20 c4 f6 f9 0f 25 03 f4 03 7d 9a 2b 87 0b

総収入vs.所得税額等(2500万円以下)
総収入vs.所得税額等(2500万円以下)

総収入vs.所得税額等(1000万円以下)
総収入vs.所得税額等(1000万円以下)

あと付録に、右のような総収入と所得税額の傾きを計算したグラフをつけている。
また簡略化のため、

  • 健康保険料率は協会けんぽの値を会社が1/2だけ負担したものを使用
  • 厚生年金保険料率は第一種を会社が1/2だけ負担したものを使用
  • 社会保険料は標準報酬月額での階段関数にはせず、年収に料率を乗じて計算(総報酬制が導入されたため、これでもだいたい金額は合う)
  • 雇用保険料率は一般の事業の率を使用
  • 減免系の制度は無視
  • 被扶養者は1名の場合

という設定で計算した。

こうしてみると、所得税計算までの途中式の累進課税度は結果にはほとんど寄与していなくて、この設定での課税対象の所得金額(赤線)は、ほぼ線形。
結局、所得税の計算式で累進課税になっているのだから、途中計算なんて単純な係数かけるだけにしたらいいのに。

apache のエラーログを真面目に読んでみた

最近、サイト運営の時間がとれず、放置していたので、たまにはログをチェックしようかと三が日からログを読んでいた。
ログは error.log (うちのサーバの場合、ログファイルはvhost毎に変えてるので、標準のログファイル名で書いておく。以下同様。) を眺めて、サイトのコンテンツ絡みの場合は、man もしくは google 先生、明らかにアタックの場合は該当アクセスの IP アドレスを /var/log 内全検索するなどして、分析した。
分かったのは、思ったより脆弱性の入ったサーバやスクリプトが巷には溢れていて、下に列挙していない file does not exist に、大量にそのキーワードが含まれているということ。
自分が入れているツールへのアタックかも、と感じたら、その IP でログの全検索をかけることと、そのツールが最新版か確認することはした方がよさそうだ。

んでわ、さっそく。

PHP Warning: Unknown: failed to open stream: Permission denied in Unknown on line 0
PHP Fatal error: Unknown: Failed opening required 'FILEPATH' (include_path='.:FILEPATHES') in Unknown on line 0
2行でセット。
旧サイトの投稿スクリプトのパーミッションを 000 にしていたために、出ていた。
パーミッションを変更したら(投稿フォームを無効化してから)、直った。
Directory index forbidden by Options directive: FILEPATH
index ファイルを設置してなくて、Indexes をセットしてないディレクトリへのアクセスがあったログ。
index.htm を置けば OK。
no acceptable variant: FILEPATH
コンテンツネゴシエーションに失敗。具体的には、MultiView の設定に絡むファイルしかなかった。
だが、telnet アクセスで再現しなかったので、切り分けはこれ以上はできなかった。うーむ…
アクセスログによれば、Majestic-12 とかいうプロジェクトの bot らしい。
File does not exist シリーズ
ほとんどが、旧コンテンツのメタタグとかで読み込む設定にしていた旧faviconなど。
あといくつかが、色々な脆弱性へのアタック。目についたのだけ、ピックアップする。
File does not exist: FILEPATH/w00tw00t.at.blackhats.romanian.anti-sec:)
phpMyAdmin の脆弱性アタック。
この辺りが詳しい → phpMyAdminを狙った攻撃観察 - ろば電子が詰まっている
そんな軟派なものは入れていないので、関係なし。
w00tw00t.at.hogehoge 自体は、他にも色んな種類があるらしいので、他のアクセスが出てきたらそれはそれで注意が必要ぽい。
File does not exist: FILEPATH/notify-NotifyUser_NONE_071217
なんか日本語サイトだと、楽天とか伊藤忠のイントラネットから web アクセスする時に、業務と関係ないサイトにアクセスする時に使う proxy が notify-NotifyUser1 だってネタがひっかかる。
ただ、web サーバにそんなファイルアクセスを起こす意味が分からないので、なんか違うんじゃないかという気がしている。
なおうちへのアクセスでは、AhrefsBot/5.0 という bot によるものらしい。ポートスキャンという説もあるが、うちのサイトでは、web クローラとしての動作のみが記録されていた。外側の FW で落ちているだけかも知れない。
client sent HTTP/1.1 request without hostname (see RFC2616 section 14.23): /w00tw00t.at.ISC.SANS.DFind:)
これは DFind のアタックを受けた痕跡らしい。
DFind については、この辺を見たらいいのかな… → Hacktool.DFind | シマンテック 日本
んで、対策は色々と書かれているんだけど、だいたい多いのは iptables の string モジュールで文字列マッチをしてパケットをドロップさせろ、というもの。
(参照: Blocking w00tw00t scans - Myatu's, GET /w00tw00t.at.ISC.SANS.DFind:) HTTP/1.1)
日本語のサイトでは、400 が返ってたら心配ないよ、って書かれてて、多分その元ネタは後者の参照ページあたりだと思うのだけど、なんで you should not worry about it なのかが、見付けられなかった。
少なくとも Hacktool.DFind が正しいのであれば、apache と関係ない SQL サーバへのアタックも含まれているのだから、apache のログだけ見て心配しなくて良い理由が不明。
いちおう、サーバの外側の FW で弾いた上で、サーバ内のソフトウェア FW でも弾くようにしているので、apache 以外のログには残っていないのだと信じたい。
script not found or unable to stat シリーズ
4割が、過去に google calendar に登録していたが現在ではもう登録していない URL へのもの。
他は、色々な php システムのバグへのアタックくさい。
Invalid URI in request GET HTTP/1.1 HTTP/1.1
なんか、アタックの最初に "GET HTTP/1.1 HTTP/1.1" をつけてくるツールがあるっぽい。
google の連文節検索(という名前は私が勝手につけたが、よーはハイフンで単語を繋げる検索)で、http-1.1-http-1.1 として検索すれば、大量のログが出てくるので、自分のログと類似のものを探せばよい。
このログが理解できなくて、telnet してたら自鯖の設定ミス(ServerTokens を設定していない)のために HTTP ヘッダに OS と apache のバージョンが流れていることに気付いたので、修正した。
ServerSignature を未設定または Off にすると、エラーレスポンスの末尾の OS や apache バージョンが入ったシグネチャが消えるので安心していたら、HTTP レスポンスで返していたとは…
ちゃんとヘッダまで確認していなかった自分の甘さに反省。
PHP Notice:
Undefined variable: comment_field_name in FILEPATH/comment_form.tpl.php on line 64
多分、P_BLOG のバグ。reply.php の中で、エラーメッセージ内の .tpl.php を呼ぶ前に、add.php とかみたく $comment_field_name をセットしていないのが原因。

Windows7 x64 で NIC 再起動

私の使っている PC は、まれに NIC に刺さっているケーブルを認識しなくなる。
対向の SW やケーブルを変更しても起こるので、PC 自体の問題だろうと思うのだが、原因はよく分からない。
発生頻度も数ヶ月に1回レベルなので、原因が掴みにくい。

それはそれとして、発生頻度が少ないので放置しているものの、長期間、その PC の前に座れない時に遠隔から操作しようとすると、この事象はとても怖い。
なので、被害を最小限に食い止めるため、こんな小細工を弄してみた。

タスクスケジューラで NIC を定期的に再起動する。

この問題が起こった時の解決方法は簡単で、NIC をネットワークデバイスの管理画面から無効/有効と再起動してやれば良い。
これをコマンドラインで実行するのは簡単で、devcon.exe という Windows 標準のコマンドラインを叩けば良い。

> devcon disable %HARDWARE_ID%
> devcon enable %HARDWARE_ID%

ここで、%HARDWARE_ID% は、devcon hwids =net などで表示されるお目当ての NIC のハードウェア ID のうち、一番長いもので良いらしい。
devcon.exe を使って NIC を無効化/有効化する - k3k1::log

Windows 7 x64 で devcon を使う

ところが、Windows 7 x64 ではこれが思い通りに動かない。
調べてみると、Windows 7 x64 用の devcon が標準でインストールされていないためで、Microsoft download center からもダウンロードできないため、どこかから調達する必要があるらしい。
"Disable failed No devices disabled" devcon.exe | How to disable devices from command prompt ~ Techytips

タスクスケジューラで実行

このコマンドを bat ファイルにして実行すると、権限不足でうまく行かない。
タスクスケジューラで実行する場合は、「最上位の特権で実行する」をチェックしておくと良い。

Windows 8 使い始めた

tips を色々と追記していくよ。

ファイルを消す時に確認ダイアログを出す
ごみ箱を右クリックして「プロパティ」→ 削除の確認メッセージを表示する、にチェック
各種ショートカット
ほとんど生きてます。Win+D,E,L,R,Pause あたりをよく使う。 Win → exe名入力 → Ctrl+Shift+Enter で管理者権限で実行も生き。
スタートメニューからよく呼び出していたメニューの出し方
コンパネ → Win+R control Enter ネットワーク設定 → Win network 「設定」「ネットワーク接続の表示」 シャットダウン → Win+R shutdown /p Enter リブート → Win+R shutdwon /r /t 0 Enter
デフォルトのIMEを変更
コンパネ → 言語 → 「規定の入力方式の上書き」