blog.toxn

あしあと

新年だしパスワードについて考えた

あけましておめでとうございます。

2014年は人生のひとつのターニングポイントでした。 ちょっと元気無くしてたり途方に暮れてたりしましたが、今は元気にやっております。 2015年もどうぞよろしくお願いします。

年末年始とお盆くらいしか実家に帰らないわけですが、家族はみんなITに弱いのでこういうタイミングで色々面倒みてます。 そこでびっくりしたのが、パスワードに対する考え方のギャップ。 パスワードが数字4桁とか、ジョーアカウント*1を使ってたり、「最近は8文字以上入れないとダメとか言われて困るんだよな、アレは何なんだ」とか言われたり。

せめてパスワードは最低8文字にして、できれば全部別のものにしてくれ〜とか言っても「そんなの覚えられん、無理だ」と言われるので、そこまで無理しないで覚えられて、かつ使うサービスごとに異なるパスワードの作り方を伝授しました。

同じような悩みがある人がいれば参考にして頂ければ…

強いパスワード(しかも忘れにくい!)の作り方

  1. コアとなるパスワードを作る(6文字くらい)
  2. コアパスワードを補強するパスワードを作る
  3. 1と2のパスワードをつなげる

補強するパスワードの作り方がポイントで、ネタをいくつかあげておきます。 これをどう組み合わせるかはご自由に。

補強パスワードの元ネタ

補強パスワードからどう作るか

  • サービス名そのまま 例:TwitterTwitter
  • サービス名の最初2文字(何文字でもいいです) 例:Twitter → Tw
  • サービス名の最初と最後の文字 例:Twitter → Tr
  • ログイン画面URLのドット区切りの先頭文字 例:https://twitter.com/ → tc
  • ログイン画面URLの最初ドット前後 例:https://twitter.com/ → rc

3のつなげ方もいくつか工夫できそうです

  • 先頭につける
  • おしりにつける
  • 最初と最後に分ける

実際に作ってみると

  1. コアパスワードを「jibanyan(ジバニャン)14」にします→「jibanyan14」
  2. Twitterでの補強パスワードを先頭の4文字「Twit」にします→「Twit」
  3. コアパスワードと補強パスワードを2文字ずつ最初と最後に分けてつけます→「Twjibanyan14it」

こんな感じです。同じ方法でYahoo!だったら「Yajibanyan14ho」facebookなら「fajibanyan14ce」と、それなりに強いパスワードができます。

コアパスワードとルールさえ覚えておけば使うサービスが増えてもログイン画面から分かるので割とお手軽かと思います。

On Error Resume Nextなコードを駆逐するためには

構造化例外処理があるいま、On Error Resume Nextなんて構文にお目にかかるのは、 Excelマクロくらいのもん

そんなふうに考えていた時期が俺にもありました

On Error Resume Nextとは

Vishal Basicだけにある構文で、名前からも分かるようにエラー処理に使う。

On Error(エラーしたら) Resume Next(次の処理を続ける)…つまり、エラーは無視されるわけで。正しく動いているか分からないようなアプリはちょっとお守りできる気がしない。

構造化例外処理(Try...Catch)に置き換えられないか。。。

結論

そのままTry...Catch構文に置き換えるのは難しい。

理由

エラー時に次の行へ進む = 各行にTry...Catch書いてCatch句で何もしないのと同じ。 コードはこんな感じになる。

gistfc7ed6216c032edf4755

等価なコードにするのは現実的じゃないので、実装を見て例外処理するのがいいと思う。 ただ、こういうコードは不吉な匂いしかしないので、かなり苦労することは間違いない。。。

VB.netのIIf関数とIf演算子について

C#で使える三項演算子VB.netには無い。 代わりに、IIf関数とIf演算子というのがある。使い方とか注意点について…

結論

  • If演算子使うべき。
  • VB.net使うべきではない。(言い過ぎか)

理由とか

まずは、使い方↓

gist717fda61cb882f349687

よくありそうな、TextBoxの値を数値として代入するケース。(TextBox1には数字しか入らないと考えて欲しい)

空だったら0として扱いたい訳だけど、If演算子ならTextBox1.Textが空なら、問題なく0が入る。 一方で、IIf関数を使った場合は、FormatExceptionが起きる。

何故か

IIf関数では、第一引数(評価式)の結果によらず、第二、第三引数の評価を行う。 そのため、評価して欲しくない Integer.Parse("") が実行されて、FormatExceptionが起きる。

IIf関数は、If…Else…End If式と等価ではないわけだ。 VB使ってると、紛らわしい関数とかクラスとか、たまに出てくるのでホントやめてくれーって思う。

If演算子 != If…Else…End If

If演算子もIf…Else…End Ifと等価ではなかった。 ここはIIf関数も同じで、If演算子の返り値は Object型 なので、返り値はちゃんとCastしてやる必要がある。やはりVB.netは使わないほうがいい。 *1

?: 演算子 (C# リファレンス) | Microsoft Docs

IIf 関数

VS2015使ってたらIf演算子はObjectを返さず、第2,3引数の型で返すようになってました。*2

toxn.hatenablog.com

*1:12/10 追記しました。

*2:08/20 追記しました。

hubotでslackに妖精さんを召喚した

最近といってもだいぶ前から、仲間内のコミュニケーションツールSkypeからslackへと移行してきた。 他サービスと連携ができてエンジニアが好みそうというか、エンジニアにしか流行らなそうな。。。

んで、hubot & heroku & slackの連携をさせてみた。 殺伐とした(してないけど)TLに妖精さんが!

f:id:toxn:20140911073410j:plain

結構簡単に出来たので、手順を残しておくー。

続きを読む

SECCON 2014 長野大会に参加してきた

今更感あるけど、書いてる途中ではてブロが停止して消えたのd(ry

SECCON 2014 長野大会 DNS Security Challenge

チーム「/dev/null」で参加してきました。総合3位でした。惜しい。

クイズで積極的に押していったのがスコアにつながって良かったと思います。

お題が「DNSセキュリティチャレンジ」。

部内向けにBINDでMaster-Slaveサーバを建てたことがあるだけで、 セキュリティといっても簡単にACL書いておいたくらいのもので、 ちゃんと勉強したことは無かったんですよね。

JPRSの森下泰宏さんと、「浸透言うな」で有名な中京大の鈴木常彦さんの レクチャーも受けられて、非常に勉強になりました。

DNSはその存在自体が脆弱性

覚えたー

続きを読む

javascriptオブジェクトのこと

よく分かってなかったけど最近覚えたこと。

javascriptで扱うオブジェクトの最上位にあるのが「window」オブジェクト。

window.open("http://www.google.co.jp/", "Open sesame.");

とかやって使うオブジェクト。開いているwindow自体を指している。

windowオブジェクトは、「name」、「document」、「history」ナドのメンバをもっている。一番使われるのは「document」でしょう。

var contentsOfBodyTag = window.document.body;

documentっていわゆる「DOM(Document Object Model)」。HTMLタグとして記述されたドキュメントの最上位にあたる。だからプロパティがとても多い。

windowがあって、その中に描画される(HTMLで書かれた)documentがあって、(HTML)documentの中には、headやbodyやtitle、imagesなんかがある。 メンバにアクセスする(階層を掘り下げていく)には、2つの方法があって「ドット記法(dot notation)」と、「括弧記法(bracket notation)」のどちらを使っても良い。 あと、windowは省略してもよい。

// タイトルが取れる
var title1 = window.document.title;
// ↓も同じ
var title2 = window[document][title];
// これも同じですね
var title3 = document.title;

参考

https://developer.mozilla.org/ja/docs/Web/API/Window