C#でバイト配列の生成

こんにちは。beaglesoftの真鍋です。

EntityFrameworkを利用しているとバイト配列を利用することは結構あると思います。SQL Serverのrowversion型は楽観制御のVersion列として利用することが多いですが、次のようにすると簡単に作成できます。

double d = 1d;
var target = BitConverter.GetBytes(d);
Console.WriteLine(BitConverter.ToString(target));

> 00-00-00-00-00-00-F0-3F

double型は64bitの浮動小数点なので、8バイトです。一方で、SQL Serverのrowversion型も8バイトです。そのため、double型の値からバイト配列を生成することで期待値を作成することができます。

double (C# リファレンス) rowversion.aspx)

もちろん、long型でも問題ないです。

void Main()
{
    var l = 1L;
    var target = BitConverter.GetBytes(l);
    Console.WriteLine(BitConverter.ToString(target));
}


> 01-00-00-00-00-00-00-00

long (C# リファレンス)

ちなみに、int型は32bitなのでこうなります。当たり前ですね。

void Main()
{
    var i = 1;
    var target = BitConverter.GetBytes(i);
    Console.WriteLine(BitConverter.ToString(target));
}

> 01-00-00-00

それにしてもLinqPadが便利ですね。

AWSのアカウントをGitHubにpushしてしまった…

ことの起こり

昨日うっかりとしたミスからGitHubの公開リポジトリへAWSのアクセスキーIDとシークレットキーをpushしてしまいました。理由は、.zashrcに環境変数としてAWSのアクセスキーIDとシークレットキーを設定している状態で.zahrcをgit管理するためにpushしました。

pushしたとたんにメールが送信されてきた

GitHubへpushしたとほぼ同時にメールが送信されてきました。たまたま、一段落したのでPokemon GOをはじめようとしていたため、手元にiPhoneがありメールにすぐ気づきました。私信ではないので全文を載せておきます。

  • 件名

    I think I found your aws credentials

  • 本文

    Hi, It looks like you put your aws credentials on github here: https://github.com/yoichiro-manabe/dotfiles/commit/.....

    If these are actually aws credentials, you shouldn't post 'em on github. I found it, so someone else probably did too. If these are real, you should do the following:

    1. You should first change your aws credentials. As soon as you push code to Github, you should treat any exposed credentials as compromised. This page describes how to delete and reset aws credentials: http://docs.aws.amazon.com/general/latest/gr/managing-aws-access-keys.html
    2. Look at your account to see if anyone has already started to use it. Go through all the AWS services to make sure no one messed with anything else. (in particular look for ec2 instances in all the regions). An easy way to know where to look is to go to your billing page and view all the areas that accumulated charges for the month.
    3. If you see any suspicious activity, contact aws support, and shut down the servers that the hacker has set up.
    4. Then you should use a safe method to manage your credentials in your code (i.e. by using env variables or a config file that is ignored through .gitignore)

    I'd be happy to hear any feedback or questions you have about this email. And, if you want to never get an email like this again, let me know, and I'll make sure that you are never emailed again.

    Best, Michael

    P.S. If you are wondering how I found your credentials, I made a program that scans through github looking for aws credentials. When it finds one, the program sends an email (this one) to the person that made the commit.

このメールはmKurrels/testHelpfulOwlにあったtestHelpfulOwlリポジトリにあるとおり、GitHubにAWSに関する情報を公開すると数秒でメールが送信されてくるサービス?から送信されていたメールでした。

どのようなアルゴリズムで検出しているのかなどはわからないですが、このメールのおかげで私は助かりました。とても感謝しています。

対応

とりあえず、次のことを行いました。

  1. IAMアカウントに関連するアクセスキーIDとシークレットキーを無効化のあと思い立って削除
  2. IAMアカウントのアクセスアドバイザーを確認してサービスへのアクセス状況の確認
  3. 請求情報の確認
  4. すべてのリージョンのEC2インスタンスで知らないインスタンスがないかの確認
  5. GitHubのリポジトリの削除

今考えると、1についてはIAMアカウントに関連するアクセスキーIDは無効化にする方が良かったのかもしれません。やはりそのときになると「とりあえずこうしよう」と思いついたことを行ってしまうので良くないです。

ここまでで、とりあえず特におかしなことはなかったのでいったん様子を見ることにしました。

今後の対応

今回のことは正直なところ自分がやらかすとは思っていませんでした。ただ、冷静に考えるとまず間違いなくやらかしそうなことでした。GitHubにpushすることはごくごく普通にあることです。

何が書いているかすべて把握していないけど、個人の物だからと軽い気持ちでpushしたのが今回の事象で、個人の環境だけであったことは不幸中の幸いでした。

とりあえず、うっかりGitHubに公開したを防ぐ方法はprivateリポジトリを利用することくらいしか思いつかないので、いったんそれを実践します。公開するときはセルフレビューしてからにしようと思います。

あとは、公開してしまったときに影響範囲を小さくするためのアカウント情報の管理を考える必要があります。

さいごに

うっかりミスを通知してくれた Michael さんに感謝します。彼が言うようにこのようなメールを受信することがないようにしたいです。

また、QiitaやTwitterで何度か話題になっているインシデントですが、対岸の火事と思わず自分のこととしてとらえるようにしたいと思います。

dhtmlXGridでコンボボックスを利用する

こんばんは。beaglesoftの真鍋です。

dhtmlXGridの設定をXMLで行うときに、列の設定としてcomboを指定するとコンボボックスのオプションは2通りの設定を行えます。

  1. XMLに直接設定する。
  2. XHRなどでGridの行ロード時に取得する。

2のケースはコンボボックスに指定する値をXMLファイルで取得することで可能です。

一方、1のケースではXMLの設定としてxmlcontent="1"を指定する必要があります。この指定をしないと、行に指定されたオプションの値(下のケースでは0~3)が表示されコンボボックスの値が正しく表示されません。

<column width="150" type="combo" align="center" sort="str" editable="false" xmlcontent="1">種別
    <option value="0">日単位</option>
    <option value="1">時間単位</option>
    <option value="2">月単位</option>
    <option value="3">一括</option>
</column>

ちょっとしたことなのですが、最初のうちは嵌まりどころだと思うので注意が必要ですね。

参照先

Integration with dhtmlxCombo DHTMLX Docs

xmlcontent - in this case options can be defined directly in grid XML;