かもメモ

自分の落ちた落とし穴に何度も落ちる人のメモ帳

Coincheck 5億2300万NEM(620億円相当)流出事件のメモ

個人的な趣味でタイムライン作ってみるのに調べたのでlogとして
f:id:kikiki-kiki:20180129065836p:plain

日時 内容 参照
2018 1/26
02:57~08:26
CoincheckのウォレットからNEMが数回に渡り不正送金される Coincheckサービスにおける一部機能の停止について | コインチェック株式会社
11:25頃 Coincheck 異常を検知 http://corporate.coincheck.com/2018/01/26/29.html
12:07頃 Coincheck NEMの入金一時停止について告知 Coincheckサービスにおける一部機能の停止について | コインチェック株式会社
【重要】NEMを始めとした取扱通貨について | Coincheck(コインチェック)
12:38頃 Coincheck NEMの売買一時停止について告知 Coincheckサービスにおける一部機能の停止について | コインチェック株式会社
【重要】NEMを始めとした取扱通貨について | Coincheck(コインチェック)
12:52頃 Coincheck NEMの出金一時停止について告知 Coincheckサービスにおける一部機能の停止について | コインチェック株式会社
【重要】NEMを始めとした取扱通貨について | Coincheck(コインチェック)
15:35 Yahooニュース ビットコイン取引所「コインチェック」で620億円以上が不正に引き出される被害が発生 ビットコイン取引所「コインチェック」で620億円以上が不正に引き出される被害が発生(追記あり)(山本一郎) - 個人 - Yahoo!ニュース
16:33頃 Coincheck JPYを含め、全ての取扱通貨の出金一時停止について告知 Coincheckサービスにおける一部機能の停止について | コインチェック株式会社
【重要】NEMを始めとした取扱通貨について | Coincheck(コインチェック)
17:23頃 Coincheck BTC以外(オルトコイン)の売買の一時停止について告知 Coincheckサービスにおける一部機能の停止について | コインチェック株式会社
【重要】NEMを始めとした取扱通貨について | Coincheck(コインチェック)
17:31 Rin MIZUNASHI(@minarin_)さんハッカーのアカウント追跡開始をTwitterに投稿 コインチェック犯人追跡するみなりんさんのテレグラム中継 | ビットコインバーゲン
18:50頃 Coincheck クレジットカード、ペイジー、コンビニ入金一時停止について告知 Coincheckサービスにおける一部機能の停止について | コインチェック株式会社
【重要】NEMを始めとした取扱通貨について | Coincheck(コインチェック)
20:27 NEM財団 CEO Lon Wong(@2017Lon)氏
CC社のセキュリティの問題なのでハードフォークを行わない旨の記事をTwitterに投稿
https://twitter.com/2017Lon/status/956851031249272832
Coincheck Hack: "The Biggest Theft in the History of the World" | CryptoNews
23:30頃 Coincheck 記者会見 コインチェック社、記者会見全文3 仮想通貨NEMの不正流出疑惑を受けて - ログミー
2018 1/27
3:57
NEM財団 Alex(@Inside_NEM)さん
ハッキングされたNEMを自動追跡するシステムを開発したことをTwitterで発表
https://twitter.com/Inside_NEM/status/956964401399156736
NEMがコインチェックでハッキングを受けた通貨を追跡アカウントにタグ付け
17:00頃 Coincheck Coincheck payment 日本円出金、及び新規支払いの受付停止を発表 Coincheckサービスにおける一部機能の停止について | コインチェック株式会社
Coincheckサービスにおける一部機能の停止について | コインチェック株式会社
2018 1/28
00:46
Coincheck 不正送金されたNEMの460億円相当の補償を発表
NEM保有者に88.549円×保有数計算した日本円でコインチェックウォレットに返金
不正に送金された仮想通貨NEMの保有者に対する補償方針について | コインチェック株式会社

[出典]

ハッカーと画家 コンピュータ時代の創造者たち

ハッカーと画家 コンピュータ時代の創造者たち

Apache ローカル環境 400 Bad Request になるとき

ローカル環境を作成してApacheを起動してアクセスしたら次のようなエラーが表示されました。

Bad Request
Your browser sent a request that this server could not understand.
Additionally, a 400 Bad Request error was encountered while trying to use an ErrorDocument to handle the request.

ホスト名に_(アンダースコア)を使うことはできない。

Apache 2.4.25以降では/etc/hostshttpd-vhosts.confで設定したホスト名に_(アンダースコア)が含まれていると、400 Bad Requestになるようです。

解決方法。
そもそもホスト名に_を含むことはできないようなので、素直にローカル環境のホスト名を変更するコト。以上!

ドメイン名と違い、ホスト名のラベルはASCII文字の'a'から'z'まで(大文字小文字は無視される)と、'0'から'9'の数字そしてハイフンだけを使うことが出来る。ラベルの最初と最後の文字にハイフンを使うことは出来ない。ハイフン(そしてラベルの間に打つドット)以外の特殊文字は時に誤って使われるが許容されない。 また、アンダースコアはWindowsで構築されたシステムで一般に使われるが、RFC 952によれば許容されない。

出典: ホスト名 - Wikipedia

ホスト名に_は基本的にNGっぽいのですね。
ホスト名に_を使えるようにする方法もあるようですが、トラブルの元になりそうなので辞めておいたほうが良さげです。


参考

ふゆびより (キャンプ盤DVD付)

ふゆびより (キャンプ盤DVD付)

WordPress MySQL 特定のカスタムフィールドの値が存在しない投稿を取得したい。

WordPressのデータベースでは、カスタムフィールドの値は{$pre_fix}postmetaテーブルに登録されます。

postmeta テーブル
+------------+---------------------+
| Field      | Type                |
+------------+---------------------+
| meta_id    | bigint(20) unsigned |
| post_id    | bigint(20) unsigned |
| meta_key   | varchar(255)        |
| meta_value | longtext            |
+------------+---------------------+

カスタムフィールドが入力されていない投稿を取得したい時、カスタムフィールドの値が空文字かNULLでDBに登録されている場合は、単純に条件を空文字かNULLにしてしまえば問題ありません。
WP_Queryを使用する場合は下記のような感じ

<?php
$args = [
  'post_type'  => 'post_type',
  'meta_key'   => '_custom_field_name',
  'meta_query' => [
    [
      'key'     => '_custom_field_name',
      'value'   => '',
      'compare' => '=',
    ],
  ]
];

$the_query = new WP_Query($args);

DBに値が登録されていない場合

そもそもカスタムフィールドの値がDBに登録されていない(存在しない)場合は、WP_Queryなどでmeta_keyを条件にデータを取得する事ができないので、SQLを自作するしかありません。
追記: meta_keyで指定せずにmeta_query の条件をNOT EXISTSにすることでWP_Queryで実現可能でした。下部に方法を書きます。
WordPressにはDBから自作のSQLを使ってデータを取得することができるwpdbクラスがあるのでこれを利用します。

WordPressをインストールする時に決めたDBのテーブルのプレフィックス名(config.phpに記入されている)$wpdb->base_prefixで取得することが可能です。 カスタムフィールド_custom_field_nameの値がDBに登録されていない公開されている投稿を取得するなら下記のような感じになります。

<?php
global $wpdb;
$prefix = $wpdb->base_prefix;
$sql = "SELECT p.* FROM {$prefix}posts AS p
  WHERE
    p.post_type = 'post_type'
    AND p.post_status = 'publish'
    AND NOT EXISTS(
      SELECT meta.meta_id
      FROM {$prefix}postmeta AS meta
      WHERE
        meta.post_id = p.ID
        AND meta.meta_key = '_custom_field_name'
    )
  GROUP BY p.ID
  ORDER BY p.post_date DESC";

$res = $wpdb->get_results($sql); 
foreach($res as $post) {
  $ID = $post->ID;
  // 処理
}

SQLの書き方は自身がありませんが、これでカスタムフィールドの値がDBに登録されていない場合の投稿を取得することができました。
カスタムフィールドの作成にはCMB2プラグインを使っているのですが、カスタムフィールドが未入力の時、値が空文字でDBに登録されるものと、そもそもDBに登録されないものがあり難儀しました。
なんとなく、グループ化にしているカスタムフィールドは未入力のさいもDBに空文字で登録されているような気がしていますが、ちゃんと調べてないのでナゾです。(統一して欲しい
 

追記 2018-03-10 WP_Queryでカスタムフィールドが存在しない場合を条件に投稿を取得することができました。

WordPress3.5以上だとWP_Queryのmeta_queryNOT EXISTSを使えることを見落としていました。
そしてmeta_keyにカスタムフィールドの値を設定していたためにうまく取得できずWP_Queryでは取得できないのだと思ってしまっていたのでした...

<?php
$args = [
  'post_type'  => 'post_type',
  // ↓ meta_keyに指定しているとうまく取得できない
  // 'meta_key'   => '_custom_field_name',
  'meta_query' => [
    [
      'key'     => '_custom_field_name',
      'compare' => 'NOT EXISTS',
    ],
  ]
];

$the_query = new WP_Query($args);

参照: 関数リファレンス/WP Query - カスタムフィールドのパラメータ


[参考]

SQLアンチパターン

SQLアンチパターン