ホーム ブログ ページ 38

ruby で rsa暗号化した文字列を jsで復号する

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

データを暗号化することがいろいろな理由で必要となり試したのでメモします。 暗号方式は rsa を使います。公開鍵で暗号化して秘密鍵で復号します。 ※ 私の試したところだと秘密鍵で暗号化すると復号できませんでした。

環境

ruby は openssl と base64 を使います。
※ require すれば使えるはず。

javascript は jsencrypt.js を使います。
※ https://github.com/travist/jsencrypt

ruby 2.2.3p173 (2015-08-18 revision 51636) [x86_64-linux]
CentOS Linux release 7.1.1503 (Core)

bashでしておくこと

秘密鍵を作ります。
ssh-keygen を使うとデフォルトで
~/.ssh/ ディレクトリに
id_rsa と id_rsa.pub が作成されます。秘密鍵と公開鍵です。
秘密鍵の中身はそのまま使えますが、公開鍵はそのままだと今回の用途では使えないので pem フォーマットにします。
ssh-keygen -f ~/.ssh/id_rsa.pub -e -m pem > ~/.ssh/pem
pem の中身を公開鍵として使います。

rubyでの暗号化

# ライブラリの読み込み

require ‘openssl’
require ‘base64’

class Encryptor
attr_accessor :pub, :public_key
def initialize
# pemフォーマットの公開鍵ファイルの内容を取得
self.pub = File.read(ENV[‘HOME’] + ‘/.ssh/pem’)
# 鍵をOpenSSLのオブジェクトにする
self.public_key = OpenSSL::PKey::RSA.new(pub)
end

# 引数 str を暗号化した結果を返す
def enc(str)
# str に与えた文字列を暗号化します。
Base64.encode64(public_key.public_encrypt(str)).delete(“\n”)
end
end

javascriptでの復号

// jquery と jsencrypt.js を読み込んでおく。

crypted = ‘暗号化された文字列’;
pricate_key = ‘id_rsaファイルの中身のテキスト’;
crypt = new JSEncrypt();
crypt.setPrivateKey(private_key);

// decrypted に復号された文字列が代入される
decrypted = crypt.decrypt(crypted);

参考

jsで暗号化しrubyで復号する
http://qiita.com/shigekid/items/60d3387de6a804bc38b9

CryptoJS
https://jsfiddle.net/hibara/qzono8jb/

perlで暗号化し js で復号する。
http://hatyuki.hatenablog.jp/entry/2013/09/04/151142

MySQL : PostgreSQL コマンド対応

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

MySQL と PostgreSQL のコマンド比較

データベース中にあるテーブルを表示

### MySQL ###
SHOW TABLES;

### PostgreSQL ###
\d

テーブル内容表示

### MySQL ###
DESC table_name;

### PostgreSQL ###
\d table_name

※MySQLのDESCはDESCRIBEの省略

データベース表示

### MySQL ###
SHOW DATABASES;

### PostgreSQL ###
\l

データベース切替

### MySQL ###
USE db_name;

### PostgreSQL ###
\c db_name

拡張表示

### MySQL ###
SELECT col_name FROM table_name \G

### PostgreSQL ###
\x
SELECT col_name FROM table_name;

※PostgreSQLの「\x」は1度実行する毎に拡張表示のON/OFFを切り替える

終了

### MySQL ###
exit

### PostgreSQL ###
\q

NAT 経由でインターネットアクセスする構成でのACL設定について

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

VPC で環境を構築しsubnetをpublic/privateと分離した構成とする場合、privateなsubnetからのインターネット側へのアクセスは基本的にNAT経由となる。 そのような構成のネットワークを組んだ際に外部のNTPサーバと同期させる設定でハマったので設定方法について考え方を整理してみた。

環境

OS及びNTPサーバ/クライアントは以下のとおり。

$ cat /etc/redhat-release
Red Hat Enterprise Linux Server release 7.2 (Maipo)

$ chronyd --version
chronyd (chrony) version 2.1.1 

ネットワーク構成

以下のような構成を想定。

https://gyazo.com/e0e1d6fb247de73861603b404e52d8ee

Privat Subnet 内に EC2 インスタンスを配置。
このインスタンスに NTPクライアント/サーバ(Chrony)を立ち上げてインターネットで公開されているNTPサーバと同期を取る設定を行う。

chrony の設定

ネットワークACLで設定し易くするため NTPクライアントとして使用するポートを固定する(以下の設定を行わない場合は1024以上のエフェメラルポートが使用される)

エディタで /etc/chrony.conf を開き以下の行を追加する。

# client port (udp)
acquisitionport 1123

設定の変更後は chronyd の再起動が必要だが、ACLの設定の後にも再起動が必要なので後述。

参考: chrony – Manual for version 2.3

ネットワークACL

NTPに必要なネットワークACLの設定は以下のとおり。

Public Subnet 側

インバウンドルール

プロトコルポート送信元許可拒否備考
UDP12310.0.0.0/16許可VPC内からのNTPを許可
UDP1024-655350.0.0.0/0許可NATに対するNTPのレスポンスを許可

アウトバウンドルール

プロトコルポート送信先許可拒否備考
UDP1230.0.0.0/0許可NATからVPC外のNTPサーバへのリクエストを許可
UDP112310.0.0.0/16許可private subnet のNTPクライアントへのレスポンスを許可

Private Subnet 側

インバウンドルール

プロトコルポート送信元許可拒否備考
UDP11230.0.0.0/0許可インターネット側から(NAT経由)のNTPのレスポンスを許可する

アウトバウンドルール

プロトコルポート送信先許可拒否備考
UDP1230.0.0.0/0許可インターネットのNTPサーバへのリクエストを許可

動作状況の確認

ACLの設定を変更した場合 chronyd を再起動する。(もしかしたら不要かもしれないが再起動しないとすぐに同期が行われなかった)

$ sudo systemctl restart chronyd

再起動したら以下のコマンドでNTPサーバとの同期の状況を確認する。

$ chronyc sources
210 Number of sources = 4
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^- y.ns.gin.ntt.net              2   6     7     1  -2034us[-2839us] +/-  135ms
^- hachi.paina.jp                2   6     7     1  -4583us[-5388us] +/-   23ms
^* routerida1.soprano-asm.ne     3   6    17     0  -5855ns[-1517us] +/-   13ms
^- jp.f2tec.de                   3   6     7     1  +4904us[+4099us] +/-   64ms

先頭から2文字目が * になっているサーバが同期中のサーバを表している。このようになっていればNTPサーバとの同期が行われている。

設定の解説

設定内容を解説するにあたって、この構成で NTP が使用するポートを整理すると以下の図のようになる。

https://gyazo.com/5b470e494bdaf65a3f73cfa1802c1ede

Public Subnet 側のネットワークACL

Internet <–> VPC(Public) では NTPサーバ側(インターネット側)のポートが 123、NAT Gateway 側(VPC側)のポートが エフェメラルポート(1024〜65535の範囲のいずれかの番号)となる。
よって、Public Subnet 側のインバウンド/アウトバウンドのルールは以下のようになる。

インバウンド(a)

プロトコルポート送信元許可拒否備考
UDP1024-655350.0.0.0/0許可NATに対するNTPのレスポンスを許可

アウトバウンド(b)

プロトコルポート送信先許可拒否備考
UDP1230.0.0.0/0許可NATからVPC外のNTPサーバへのリクエストを許可

次に VPC(Public) <–> VPC(Private) の設定について見てみる。
この場合、NAT Gateway 側(Public)のポートは123、Private側のポートは1123(前述の/etc/chrony.confで設定したポート番号)となる。
よって、 Public Subnet 側のインバウンド/アウトバウンドに必要なルールは以下のようになる。

インバウンド(c)

プロトコルポート送信元許可拒否備考
UDP12310.0.0.0/16許可VPC内からのNTPを許可

アウトバウンド(d)

プロトコルポート送信先許可拒否備考
UDP112310.0.0.0/16許可private subnet のNTPクライアントへのレスポンスを許可

Public Subnet で必要な設定は上記のとおりとなる。

Private Subnet 側のネットワークACL

次に Private Subnet 側の設定を見ていくが、ここの設定については先に「VPC(Public) <–> VPC(Private) 」の設定と送信先/送信元を逆の視点で見た場合の設定を行えば良い。

よって以下のようになる。

インバウンド(e) ← (d)に対する逆

プロトコルポート送信元許可拒否備考
UDP11230.0.0.0/0許可インターネット側から(NAT経由)のNTPのレスポンスを許可する

アウトバウンド(f) ← (c)に対する逆

プロトコルポート送信先許可拒否備考
UDP1230.0.0.0/0許可インターネットのNTPサーバへのリクエストを許可

以上で設定完了。

まとめ

最後にポイントをまとめると…

  • VPC内及びNATがインターネットとの通信で使用する UDP のポート123を許可する。
  • NAT がインターネット側との通信で使用するエフェメラルポートを許可する。
  • VPC内でNTPクライアントとの通信で使用するポート(/etc/chrony.confのacquisitionportに割り当てたポート)を許可する(※)

※acquisitionportを割り当てていない場合はエフェメラルポートとなるはずなのでそれを許可する設定とする必要がある。

自分がハマった点は、2番めの「NATがインターネット側との通信で使用するエフェメラルポート」の存在を見落としていて、ntpdで同期が行われないという現象でした。
また、RHEL7系ではこれまでの ntpd に代わって chrony がデフォルトになっている点も知らず、ntpdがうまく動かない(自動起動に設定していてもchronyが起動すると停止してしまう)という点でした。

RHEL(CentOS)6系から7系でいろいろ変わってるので、ほかの違いも見直しておく必要ありますね。。。

参考

FastjsonのNULLの挙動設定

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

JavaのJSONライブラリにFastjsonというものがあります。 今回はこのFastjsonでレスポンスにnullが含まれる場合の挙動を設定する方法をご紹介します。

Fastjsonとは

まず、Fastjsonについて簡単にご説明します。
Fastjsonは、JavaのオブジェクトをJSON形式に変換したり、逆にJSONをJavaオブジェクトに変換できる、JSONライブラリです。

Fastjson – GitHub

Fastjsonはオープンソースのライブラリで、公開しているのは中国のB2Bマーケット運営で有名なアリババ。

以下の記事によると、他のJavaのJSONライブラリと比較しても高速に動作するようです。

Gson vs Genson vs Fastjson

使い方

では簡単にJavaオブジェクトをJSON形式に変換する方法をご説明します。
上記のGitHubのリンクからダウンロードするか、Mavenの場合はpom.xmlに以下のように記述してインストールします。

<dependency>
  <groupId>com.alibaba</groupId>
  <artifactId>fastjson</artifactId>
  <version>1.2.21</version>
</dependency>

そして、Javaのオブジェクトを渡してあげると、

JSON.toJSONString(hogeForm);

JSON形式で出力してくれます。簡単です。

{
   name: "hoge"
}

nullの挙動設定

では本題のnullの挙動設定です。
デフォルトでは name が null の場合、nameの要素自体が出力されません。

{
}

しかし、nullでも要素は表示しないといけない場合もあります。
そんな時、以下の引数を渡してあげます。

JSON.toJSONString(hogeForm, SerializerFeature.WriteMapNullValue);

すると、

{
   name: null
}

name要素がnullで表示されました。

最後に

上記のGitHubのWikiやIssueを見ると、他にも色々オプションがありそうです。
また機会があれば調べてみたいと思います。

Dockerを試してみる(3)

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

Dockerを試してみる(2)の続きです。 今回は複数のコンテナを楽ちんに管理したい〜というツールを試してみました。

■docker-compose

コンテナを複数起動すると管理が煩雑になったり、コンテナの起動順番を気にしながらとか面倒なことが多くなります。また、runでコンテナを実行する際もコマンド引数を覚えたりするのが大変で結局シェルスクリプトを書いたりとか。

そんな面倒を解決してくれるのが、docker-compose というコマンドです。

docker-composeは、Windows/macOS版の docker-toolbox では利用可能になっています。
標準でインストールされていない場合は、docker公式のドキュメント に従いインストールします。

docker-composeの流れ

  1. docker-compose.yml を編集
  2. docker-compose up を実行
  3. docker-compose downでコンテナ終了&削除

前提

railsのサンプルアプリを作って、その直下に Dockerfile を配置します。
今回はクイックスタートを参考に、ruby自体もコンテナを使います。

$ mkdir myapp && cd myapp
$ vi Dockerfile
$ vi Gemfile
$ touch Gemfile.lock
$ vi docker-compose.yml
$ docker-compose run web rails new . -B --force
$ ls -l
$ sudo chown -R myuser:mygroup
$ vi Gemfile
rubyracerのコメントを外す
$ docker-compose build

Dockerfile,Gemfileはこちらを参考

docker-compose.yml

設定ファイルです。railsでおなじみのYAML形式です。

version: '2'
services:
  web:
    build: .
    command: bundle exec rails s -b 3000 -b '0.0.0.0'
    ports:
      - "3000:3000"
    volumes:
      - .:/myapp
    links: 
      - db
  db:
    image: mysql
    environment:
     - MYSQL_ALLOW_EMPTY_PASSWORD=1

アプリ起動

database.yml のホストを db に設定します。その後に次のコマンドを実行します。

$ docker-compose up   # -d オプションを付けるとバックグラウンド実行
$ docker-compose exec web rake db:create

ブラウザで、開くといつもの画面が表示されます。
http://(docker-machine ipのアドレス):3000/

enter image description here

メール認証が発生する登録を目標に設定する場合の注意点|Googleアナリティクス|ユニバーサルアナリティクス

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

こんにちは。今回はメール認証が発生する登録を、Googleアナリティクスの目標に設定する場合における注意点をご紹介します。

多くのサイトで見られるメール認証

最近、会員登録時にメール認証(アクティベーション)を取り入れているWEBサイトを多く見かけるようになりました。

メールアカウントは「所有物認証」と言い、本人にしか所有していないものを利用した認証方法のひとつです。

セキュリティ強度も比較的高いため、数多くの大手WEBサイトで取り入れられています。

また、メール認証だけを先に済ませてもらい、大きな手戻りが生じないことを保証した上で情報入力に移ってもらうという心理的なメリットもあります。

enter image description here

メール認証がある登録までのプロセスと目標の場所

では、メール認証がある登録を行うユーザーの一連のプロセスを見てみましょう。

enter image description here

このようなプロセスの場合、最後の「⑧登録完了」を目標設定に指定するかと思います。

もちろん「⑧登録完了」を設定するのは間違いではありません。
しかし、もう一か所設定すべき場所があります。
それは「④メール認証完了」です。

なぜ「④メール認証完了」を設定するのか

「⑧登録完了」を目標に設定したとします。

この目標を達成したセッションの参照元はどこか、と考えるとユーザーの動きを見る限りでは「①Google検索」です。
しかし、Googleアナリティクスのレポートでは「⑤Yahooメール」が目標に貢献した参照元として記録されます。

なぜ、参照元が「Yahooメール」になってしまったか。
それは、Web上のメーラーから流入した場合、参照元情報に「mail.yahoo.co.jp」という値を付与されてしまうからです。

ここでセッションの定義を思い出してください。

「3.特定のデータ情報が変わるとき」
utm_source、utm_mediumは流入元情報を指すデータです。
要は、流入元が変わるタイミングでもセッションは再定義されます。
参照「Googleアナリティクスのセッション定義 」

Web上のメーラー「Yahooメール」をプロセスの間に挟んでしまった場合、参照元情報が「mail.yahoo.co.jp」に上書きされ、一回の行動内(1セッション内)おいて本来の参照元「Google検索」と目標との紐づけができなくなります。

このように「⑧登録完了」を目標に指定すると、一部の参照元情報が想定とは異なる値で取得されてしまうという事象が発生します。

これを回避するために、「④メール認証完了」の時点での参照元は「Google検索」になるので、「④メール認証完了」合わせて目標にしておくことをお勧めします。

本来の参照元を計測する場合もある

■ダウンロード型のメールソフト

「⑤ Yahooメールにアクセスし認証用メールを確認」

上記のプロセスが、仮に【ダウンロード型のメールソフトで認証用メールを確認】したとします。(Thunderbirdやoutlookなど)

ダウンロード型のメールソフトは参照元情報を持っていません。
参照元情報が空の状態ですので直前の参照元情報を引き継ぎます。
(「⑧登録完了」の参照元が「Google検索」経由として計測されます)

例外

■httpsからhttpへ

httpsページからhttpページのリンクは参照元情報を渡しません。
(ブラウザ側の仕様としてリファラーを送信しないようになっている)

YahooメールやGmailは基本的にhttpsなので、メールのリンク先のURLがhttpの場合はdirect経由として計測されます。

ただしメール認証を目的とするURLであればhttpsであるはずなので、このような状況は稀かと思います。

「マルチチャネルレポート」の存在

「④メール認証完了」を予め目標設定しておくと集客レポート等のコンバージョン指標を表示する際に便利ですが、マルチチャネルレポートを使えば正しく参照元を評価することが可能です。

enter image description here

マルチチャネル レポートはコンバージョン経路に基づいて生成されます。コンバージョン経路とは、コンバージョンや販売に至るまでの 90 日間 にあった一連の接点(チャネルからの参照やクリック)です。
参照「マルチチャネルデータについて」

上記の通り、最大90日間(期間指定可能)の中でのコンバージョン経路を追うため、例え途中で参照元が上書きされても、間接的に最も効果の高い参照元の抽出が可能なレポートになっています。

じゃぁ「④メール認証完了」を目標にする必要ないのでは?と思うかもしれませんが、マルチチャネルレポートはカスタマイズがあまりできません。

単純に参照元分析する上ではマルチチャネルレポートで十分ですが、色々な指標を組み合わせるカスタムレポートや、集客レポート上に表示するには「④メール認証完了」を目標に設定しておくと後々に便利だと思います。

まとめ

メール認証がプロセス内にある場合は、参照元にノイズが発生している可能性があります。

マルチチャネルレポートであれば、正しい参照元の評価は可能ですが、マルチチャネルレポート自体のカスタマイズが難しいため色々な指標を組み合わせて分析する場合には不便です。

メール認証が発生する登録では、完了数だけをカウントするための「⑧登録完了」と、参照元を評価するための「④メール認証完了」の2か所を設定しておくことをお勧めします。

enter image description here

[PR]アピリッツのGoogleアナリティクスサポートサービス

■Google アナリティクス セミナー・トレーニング

アピリッツでは、 Googleアナリティクスセミナー(無料・有料含む)を過去200回以上の開催をしております。ツールのことは勿論、事業内容であるシステム開発、デザイン制作、各ASPツールのサービス展開より得られた「売上向上・受注獲得のための現場のノウハウ」を重視し、皆様のビジネス上での成功をお手伝いできるようセミナーを展開しております。

■Google アナリティクス コンサルティング

Googleアナリティクスの導入・解析・運用・ナレッジ化をサポートします。

■リスティング広告出稿代行

[Google Partner] 当社は AdWords 認定資格に合格しています。
enter image description here

Googleアナリティクス「ユーザー分布」「インタレストカテゴリ」とDoRubyデータの紹

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

こんにちは。 今回はGoogleアナリティクスレポート「ユーザー分布」「インタレストカテゴリ」の取得方法・レポート紹介と、本サイト「DoRuby」の実データをご紹介します。

ユーザー分布とインタレストカテゴリ

まずは各レポートの紹介から。

ユーザー分布とは
ユーザーの年齢や性別を確認することができます。

インタレストカテゴリとは
オンラインでの活動や購買行動から判断されるユーザーの興味や関心についての情報を確認することができます。

レポート「ユーザー分布」「インタレストカテゴリ」を有効にする方法

この2つを設定すると有効化されます。

1.プロパティの広告レポート機能を有効にする
enter image description here

2.ユーザーの分布とインタレスト カテゴリに関するレポートをビューで有効にする
enter image description here

ユーザー属性データの収集元

たまに「何のデータを元にこれらの情報を出しているの?」と聞かれるのですが、
Googleアナリティクス公式のヘルプページに具体的な収集元・条件が記載されています。

1.サードパーティの DoubleClick Cookie

  • 対象: ウェブブラウザのアクティビティのみ
  • 条件: Cookie が存在すること
  • 結果: アナリティクスは Cookie に含まれるユーザー属性とインタレスト カテゴリに関する情報をすべて収集します。

2.Android の広告 ID

  • 対象: アプリのアクティビティのみ
  • 条件: Android アプリ内のアナリティクス トラッキング コードを、広告 ID を収集するように更新すること
  • 結果: アナリティクスは ID に基づく識別子を生成します。この識別子には、ユーザーのアプリのアクティビティに紐付けられた、ユーザー属性およびインタレスト カテゴリ関連情報が含まれています。

3.iOS の広告主向け識別子(IDFA)

  • 対象:アプリのアクティビティのみ
  • 条件:iOS アプリ内のアナリティクス トラッキング コードを、IDFA を収集するように更新すること
  • 結果:アナリティクスは IDFA に基づく識別子を生成します。この識別子には、ユーザーのアプリのアクティビティに紐付けられた、ユーザー属性およびインタレスト カテゴリ関連情報が含まれています。

https://support.google.com/analytics/answer/2799357?hl=ja#where

上記いずれかの情報が無い場合は、情報が収集されずレポートにも反映されません。
収集データが不足する場合は、表示されている情報がデータ全体の何パーセントに対応するものかがレポート上に記載されるようになります。(「年齢 – 合計セッションの 41.39%」など)

多くの方が行っているウェブページの解析の場合、DoubleClickのCookieで収集されることになります。
では、DoubleClickのCookieがどのタイミングで付与されるのかというと、検索時やウェブサイト閲覧時に広告が表示、もしくはクリックされた場合に、発生元のブラウザにCookie情報が送信されます。ブラウザがCookieを受け入れた場合、Cookieはブラウザに保存されているのです。

このこの保存されたCookie情報を元に、アナリティクスは「ユーザー分布」「インタレストカテゴリ」に関する情報を収集・レポート化するという仕組みです。

知らない間に色々収集されている・・・ということですね・・・!

DoRubyのユーザー分布

それでは早速、本サイト「DoRuby」のデータを見てみましょう。
直近のデータです。
enter image description here

圧倒的に男性、しかも若者が多いですね。
IT業界ならではのユーザー属性ではないでしょうか。

逆を言えば、女性のアクセスが少ない!

私も含めこの業界で働く女性も増えていると思うので、
仮に今後アクセスを増やす場合、そういった女性エンジニアならではの記事や
例えば女性が多いデザイナー関連記事を用意することで
より多くの方に見てもらえるサイトになるかもしれません。

DoRubyのインタレストカテゴリ

インタレストカテゴリは以下の3つの軸でユーザーのカテゴリを確認することができます。

アフィニティカテゴリ:
 訪問者のライフスタイルや広範囲な嗜好
購買意志の強いセグメント:
 積極的にオンラインでリサーチし、購入意向を示しているユーザーセグメント
 (リピート間隔やアクセス頻度などで判定しているらしい)
その他カテゴリ:
 特定コンテンツの消費性向

直近の「DoRuby」のデータはこんな感じです。
enter image description here

■アフィニティカテゴリ(上位3件)

  1. ハイテク好き(5.38%)
  2. ビジネスの専門家(4.19%)
  3. 写真愛好家(3.96%)

■購買意志の強いセグメント(上位3件)

  1. ソフトウェア/ビジネス生産性ソフトウェア(6.06%)
  2. ビジネスサービス/ビジネステクノロジー/ Webサービス/ Webデザイン&開発(4.84%)
  3. ビジネスサービス/ビジネステクノロジー/エンタープライズソフトウェア(4.47%)

■その他カテゴリ(上位3件)

  1. インターネット&通信/ Webサービス/ Webデザイン&開発(7.14%)
  2. コンピュータ、電化製品/ソフトウェア/オペレーティングシステム/ Linux&Unix(6.72%)
  3. コンピュータ、電化製品/エンタープライズテクノロジ/データ管理(5.46%)

ITに関する技術情報を取り扱っているので、それに関連するカテゴリの訪問者が多いようです。

アフィニティカテゴリに「写真愛好家」がランクインしていますね。
レンズやカメラ、撮影の記事はないので、ちょっと謎でしたが
じつは弊社には写真好きの社員が何人もいます。

これは私の感覚ですが、IT系はメカニックなカメラも好き、ということかもしれません。

本サイト「DoRuby」にはカメラ撮影関係記事は無いので、
もしかしたら、これらの記事を投稿すると意外とページビューを集められるかもしれませんね。

以上、ユーザー分布・インタレストカテゴリと本サイトDoRubyデータの紹介でした。

[PR]アピリッツのGoogleアナリティクスサポートサービス

■Google アナリティクス セミナー・トレーニング

アピリッツでは、 Googleアナリティクスセミナー(無料・有料含む)を過去200回以上の開催をしております。ツールのことは勿論、事業内容であるシステム開発、デザイン制作、各ASPツールのサービス展開より得られた「売上向上・受注獲得のための現場のノウハウ」を重視し、皆様のビジネス上での成功をお手伝いできるようセミナーを展開しております。

■Google アナリティクス コンサルティング

Googleアナリティクスの導入・解析・運用・ナレッジ化をサポートします。

■リスティング広告出稿代行

[Google Partner] 当社は AdWords 認定資格に合格しています。
enter image description here

スマホアプリのHTTPS通信をBurp Suiteで確認

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

今回は、スマートフォンアプリ等のHTTP、HTTPS通信をWi-Fi接続から、プロキシツールBurp Suiteを経由させることによって通信内容を確認します。脆弱性診断の為の方法ではありますが、サーバサイドやアプリの開発にも利用できるかと思います。

はじめに

Burp Suiteは、ウェブアプリケーションの脆弱性検査を行うことができるツールです。利用の仕方により不正アクセス行為と判断される可能性があります。またサービス停止やデータの破損が起こる場合もありますので事前にバックアップを行うなどしてください。そして必要に応じて管理者の許可を得て利用してください。

概要

ノートパソコンの無線LANをAPモードにして、通信を経由させる方法などもありますが、環境によって設定が複雑な場合や、うまく動作しないことがあります。今回はプライバシーセパレータなどの設定されていないWi-Fiルータにスマートフォン接続。スマートフォンの通信を、Wi-Fiルータ経由で接続できるPCにプロキシツールを用意し内容を確認します。

前回は、プロキシツールOWASP ZAPを利用する投稿をしましたが、今回はBurp Suiteを利用してみます。英語のメニューがわかりにくい場合は、Burp Suiteを日本語化する方法も試してください。

また以前に投稿した、Kali Linuxには、Burp Suiteの他にも、OWASP ZAPやwiresharkがインストールされています。
wiresharkなどで別のプロトコルの通信など詳細に確認を行うことも可能です。

Burp Suiteについて

Burp Suiteは、PortSwigger社が開発を行っているプロキシツールで、JAVAで作成されているためWindowsやMac、Linuxなどの環境で動作します。Burpは、日本語の処理など難がある部分もありますが、手動で脆弱性診断を行う場合に有用なツールです。Free EditionとProfessional Editionがあり、今回の内容はFree Editionでも行うことができます。

確認機種

参考までに今回は下記のような環境で確認しています。

  • macOS Sierra
  • Burp Suite 1.7
  • iphone 7 ios10
  • Android 4.2.2

Burp Suiteの設定

まず通信を経由させるPCでプロキシツールBurp Suite起動します。Burp Suiteのデフォルトの設定では、自身を起動しているローカルPCからの接続のみを許可しているので、他の端末からも接続を受け付けるよう設定を変更します。
設定箇所は、ProxyタブのOptionsタブ内Proxy Listenersで、デフォルトのものを選択しEditからBind to addressをAll interfacesに変更するなどします。
デフォルトのものを変更せずに、Addでポートを変えたものや、受け付けるインターフェースを変えたものを用意し切り替えるという方法にすることも可能です。(もちろん同じポートに複数設定はできません)
また、このPCのIPアドレスを確認しておきます。
Burp Suite ポート設定

ios端末の設定

Burp Suiteを起動しているPC経由で通信を行うように、ios端末を設定します。設定、Wi-FiでプロキシPC側と通信が行えるAPと接続を行います。HTTPプロキシを手動に設定し、プロキシPCのIPアドレスとBurp Suiteで設定を行ったポート番号を指定します。
ios端末 プロキシ設定

Burp Suiteのinterceptがoffになっていることを確認し、端末のsafariなどのブラウザで通信が行えるか確認します。
次にSSL通信の内容を確認できる状態にするための設定を行います。端末のブラウザで http://burp/ を表示します。
表示がされない場合は、プロキシPCのIPアドレスやポートを指定して接続してみてください。
右上のCA certificateをタップし、端末に証明書を導入します。
ios端末 Burp ios端末 証明書

android端末の設定

android端末でもios端末と同様のことを行いますが、OSや機種によって設定方法が異なる場合や、そもそも設定変更できる部分がないものも存在するので注意が必要です。
Wi-Fiで長タップ?ネットワークの変更を選択します。プロキシホスト名、プロキシポートにBurp Suiteが起動しているプロキシPCの情報を入れます。

android端末 wifi設定
android端末 プロキシ設定

端末のブラウザで http://burp/ を表示します。右上のCA certificateをタップし、端末に証明書を一旦内部ストレージにダウンロードします。
設定、セキュリティで、内部ストレージからインストールをタップし、先ほどダウンロードした証明書を導入します。
android端末 Burp android端末 証明書インストール

Burp Suiteで通信の確認

上記の設定をしたうえで、アプリを使い通信を行うと、通信内容がBurp Suiteで確認が行える状態になっています。
ProxyタブのHTTP historyでHTTPS通信が行われているか、内容が取得できているか確認してみてください。
Burp Suite

おわりに

iosアプリは、ATS(App Transfer Security)の有効化が今後必須になるようです、対応のためHTTPS通信の確認が今以上に必要になってくるかもしれません。今回紹介した方法をテストや確認に活用していただければと思います。
以上、スマホアプリの通信をBurp Suiteで確認する方法についての紹介でした。

関連記事など

脆弱性診断サービスなど

弊社、アピリッツではセキュリティ診断サービスを行っております。

下記リンクから内容の確認と、問い合わせが可能です。

http://security.appirits.com/

エンジニア見習いが最初に覚えるべき4つの習慣

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

「インターン生と新卒はこの4つだけでも覚えて帰ってね!٩( ᐛ )و」という習慣について。

1.十分に理解していないコマンド(コード)を使わない

初心者はしばしば「どお”じでぞんなごどす”るの”!」と言いたくなるコマンドを実行します。本番環境や共有サーバーで理解してないコマンドを打つのは油田で花火大会するぐらい危険です。ローカル環境でさえオプションも含めてちゃんとコマンドの意味を理解してから実行する習慣が必要です。

unixのコマンドは非対話が基本なので「え? 本当にやってええの? 取り返しつかんで?」とは確認してくれません。crontab -l と crontab -r は全然違います。あぁ! 試しに打とうとしないで!

とにかく「なんでこのコマンド打ったの?」「このオプションはなに?」という質問が来る前提で作業します。同じように目的を達成出来る他のコマンドを使わずに、そのコマンドを選んだ理由まで答えられると尚良いです。業務では「よくわからないおまじない」と言う概念はありません。

2.変更する前に復旧出来るようにしておく

設定を弄ったら開発環境が壊れちゃった……。
一日がかりで直す羽目になったみんなー! 元気ぃー!? (ゝω・)v

変更する前に切り戻し出来るように準備しておくと余計な時間が取られません。設定ファイルの変更前にcpでバックアップを取る、git管理する、仮想環境のスナップショットを作成するなど。

特に環境を作った直後や初心者期間は必ず失敗したり上手く行かなかったりします。死んだ顔でOSを入れ直すのを避けるために復旧手段を定期的に確保しましょう。初心者以外も「今この本番環境のDBを間違えてドロップしたらどうなるんだろう…」といった無害で危険な妄想を日頃からしておくと良いことがあるかも知れません。備えよう。

3.何か変更や作業をしたら意図通りになったか確認する

「もしかして道に迷ってる?」
「今いる位置がわからないから迷ってるかどうかもわからない」

変更したら確認するまでが作業、家に帰るまでが遠足。何か設定の変更をしたり作業を終えたら、次の作業へ移る前に出来るだけ反映されたかどうかを確認します。

これをサボると上手く行かなくなった時に原因の切り分けが難航しがちです。どこまでは上手く行っていて、どこからが上手く行かないのか認識するために確認を適宜挟みましょう。

4.事前に見通しを立ててみる

今から取りかかろうとしている作業を細分化して「どんな作業が必要で」「どれくらい時間がかかりそうか」を考えてみます。最初に見通しを立てる習慣があると思わぬ作業上の障害が予見できたり効率よく進めることが出来ます。

というより、何が必要か大雑把にでも見通しを立てずに作業を始めると手戻りや計画変更、他人の作業待ちが延々と発生します。必要な作業を綿密に洗い出して影響範囲やリスクを調べることが出来れば既に仕事は8割くらい終わっています。実際にコマンドを打ったりコードを書く時間は作業全体で見ると短いものです。

まとめ

4つに共通して言えるのが「業務なら絶対におさえておくべきポイントだけど、業務以外では教わる機会がない」という点ですね。意外にこの辺が言語化されてなかったので今回はこんな記事を書きました。覚えて帰ってね!٩( ᐛ )و

スマホ端末からローカル環境にアクセス(Vagrant編)

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

案件によってPCサイトだけでなくスマートフォンサイトの構築も行うことがあると思います。Chromeデベロッパーツールを使ってデザイン確認もできますが、どうしてもスマートフォン端末からしか確認できないことも多々ありますよね。(androidとiOSのアドレスバーの表示方法がそれぞれ異なるので、ヘッダー部分の文字が隠れたり隠れなかったりなどいろんな不具合が出てきます)そこで今回は、Vagrantを使用しスマートフォン端末でローカル環境に接続して確認しなければならない状況があったので、その方法をメモとして残します。(Vagrantがインストールされていることを前提に書きます)

VagrantFileを編集(ポートフォワードの設定)

#Create a forwarded port mapping which allow access to a specific port
#within the machine form a port on the host machine. In the example below,
#accessing "localhost:8080" will access port 80 on the guest machine.
#config.vm.network "forwarded_port", guest: 80, host: 8080
+ config.vm.network "forwarded_port", guest:3000, host:3000 #この行を追加

vagrantを再起動

vagrant reload 

自分のPCのローカルipを調べる

$ ifconfig | grep 192
inet 192.168.24.204 netmask 0xffffff00 broadcast 192.168.24.255

接続確認

スマートフォン端末のブラウザからhttp://192.168.24.204:3000 にアクセスし完了

仮想環境のMySQLを使用するための設定について

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

ローカルマシンのホスト側から、仮想環境側のMySQLにアクセスする方法についてまとめます. (仮想環境は, VirtualBoxを利用)

1. 仮想環境の設定

VirtualBox NATの設定で、
PortForwardingの設定を行う

  • HOSTポート: 53306
  • GUESTポート: 3306(ゲストのMySQLポート番号)

2. 仮想マシン側MySQLの設定

VirtualBox のNATは、ゲスト側からのホストIPが 10.0.2.2 に設定されている

そのため、10.0.2.2のアクセスを許可させる必要がある

$ mysql -u <ユーザ名> -p

mysql> use mysql

ユーザの作成
mysql> CREATE USER '<ユーザ名>'@'10.0.2.2' IDENTIFIED BY '<パスワード>';

権限の追加
mysql> GRANT ALL PRIVILEGES ON `<DB名>`.* TO '<ユーザ名>'@'10.0.2.2';
mysql> FLUSH PRIVILEGES;

確認
mysql> SHOW GRANTS for <ユーザ名>@10.0.2.2;

3. ホスト側

Railsアプリケーションでの, database.yml の設定

default: &default
  adapter: mysql2
  encoding: utf8
  pool: 5
  username: <ユーザ名>
  password: ***
  database: <DB名>
  host: 127.0.0.1
  port: 53306(PortForwarding設定した, HOST側ポート)

以上で、仮想環境へのMySQLに接続が可能になります。
DBを変える場合は, 2の権限の追加を, 変更するDBに対して行います。

【ruby】そうなんだ! 画像の情報を取得するためのgemふたつ

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

ユーザーからの画像投稿を扱うシステムを作る場合、画像のサイズや向き、位置情報などを取得したいときがあると思います。

またrubyにおいて画像の情報を取得するgemは様々ありますが、gemごとにどのような違いがあるか分かりません。

そこで特にオーソドックスなgem
・mini_exiftool
・exifr
を使って、下↓の写真の情報を取得してみます。

enter image description here

1. mini_exiftool
・実行ファイル

require 'mini_exiftool'
t = MiniExiftool.new "ファイル名"
p t.to_hash

・出力結果

 {
        "ExifToolVersion"=>10.31,
        "FileSize"=>"2.2 MB",
        "FileModifyDate"=>2016-10-31 18:16:03 +0900,
        "FileAccessDate"=>2016-10-31 18:42:27 +0900,
        "FileInodeChangeDate"=>2016-10-31 18:16:03 +0900,
        "FilePermissions"=>"rw-r--r--", "FileType"=>"JPEG",
        "FileTypeExtension"=>"jpg",
        "MIMEType"=>"image/jpeg",
        "ExifByteOrder"=>"Big-endian (Motorola, MM)",
        "Make"=>"Apple",
        "Model"=>"iPhone 6",
        "Orientation"=>"Rotate 90 CW",
        "XResolution"=>72,
        "YResolution"=>72,
        "ResolutionUnit"=>"inches",
        "Software"=>"10.0.2",
        "ModifyDate"=>2016-10-27 09:44:46 +0900,
        "YCbCrPositioning"=>"Centered",
        "ExposureTime"=>(1/507),
        "FNumber"=>2.2,
        "ExposureProgram"=>"Program AE",
        "ISO"=>32, "ExifVersion"=>"0221",
        "DateTimeOriginal"=>2016-10-27 09:44:46 +0900,
        "CreateDate"=>2016-10-27 09:44:46 +0900,
        "ComponentsConfiguration"=>"Y, Cb, Cr, -",
        "ShutterSpeedValue"=>(1/507),
        "ApertureValue"=>2.2,
        "BrightnessValue"=>7.94202454,
        "ExposureCompensation"=>0,
        "MeteringMode"=>"Multi-segment",
        "Flash"=>"Off, Did not fire",
        "FocalLength"=>"4.2 mm",
        "SubjectArea"=>"1631 1223 1795 1077",
        "SubSecTimeOriginal"=>707,
        "SubSecTimeDigitized"=>707,
        "FlashpixVersion"=>100,
        "ColorSpace"=>"sRGB",
        "ExifImageWidth"=>3264,
        "ExifImageHeight"=>2448,
        "SensingMethod"=>"One-chip color area",
        "SceneType"=>"Directly photographed",
        "ExposureMode"=>"Auto",
        "WhiteBalance"=>"Auto",
        "FocalLengthIn35mmFormat"=>"29 mm",
        "SceneCaptureType"=>"Standard",
        "LensInfo"=>"4.15mm f/2.2",
        "LensMake"=>"Apple",
        "LensModel"=>"iPhone 6 back camera 4.15mm f/2.2",
        "GPSLatitudeRef"=>"North",
        "GPSLongitudeRef"=>"East",
        "GPSAltitudeRef"=>"Above Sea Level",
        "GPSTimeStamp"=>"00:44:46",
        "GPSSpeedRef"=>"km/h",
        "GPSSpeed"=>0,
        "GPSImgDirectionRef"=>"True North",
        "GPSImgDirection"=>190.0831889,
        "GPSDestBearingRef"=>"True North",
        "GPSDestBearing"=>190.0831889,
        "GPSDateStamp"=>"2016:10:27",
        "GPSHPositioningError"=>"25 m",
        "Compression"=>"JPEG (old-style)",
        "ThumbnailOffset"=>2014,
        "ThumbnailLength"=>10251,
        "ImageWidth"=>3264,
        "ImageHeight"=>2448,
        "BitsPerSample"=>8,
        "ColorComponents"=>3,
        "YCbCrSubSampling"=>"YCbCr4:2:0 (2 2)",
        "Aperture"=>2.2,
        "GPSAltitude"=>"73.7 m Above Sea Level",
        "GPSDateTime"=>2016-10-27 00:44:46 UTC,
        "GPSLatitude"=>"35 deg 39' 59.74\" N",
        "GPSLongitude"=>"139 deg 42' 14.82\" E",
        "GPSPosition"=>"35 deg 39' 59.74\" N, 139 deg 42' 14.82\" E",
        "ImageSize"=>"3264x2448",
        "Megapixels"=>8.0,
        "RunTimeSincePowerUp"=>"5 days 21:26:54",
        "ScaleFactor35efl"=>7.0, "ShutterSpeed"=>(1/507),
        "SubSecCreateDate"=>2016-10-27 09:44:46 +0900,
        "SubSecDateTimeOriginal"=>2016-10-27 09:44:46 +0900,
        "ThumbnailImage"=>"(Binary data 10251 bytes, use -b option to extract)",
        "CircleOfConfusion"=>"0.004 mm",
        "FOV"=>"63.7 deg",
        "FocalLength35efl"=>"4.2 mm (35 mm equivalent: 29.0 mm)",
        "HyperfocalDistance"=>"1.82 m",
        "LightValue"=>12.9
        }

大量のデータが取得できました。ソフトウェアのバージョンまで取得しています。
一方で出力までに時間がかかり、初めて実行した時は10秒ほどかかりました。

また、

"ExifImageWidth"=>3264,
"ExifImageHeight"=>2448,
"ImageSize"=>"3264x2448"

のように重複してそうなデータもあるようです。

2. exifr

・実行ファイル

require ‘exifr’
@exif = EXIFR::JPEG.new(‘IMG_1546.JPG’)
p @exif.to_hash

・出力結果

{
    :width=>3264,
    :height=>2448,
    :bits=>8,
    :comment=>nil,
    :make=>"Apple",
    :model=>"iPhone 6",
    :orientation=>#<EXIFR::TIFF::Orientation:RightTop(6)>,
    :x_resolution=>(72/1), :y_resolution=>(72/1),
    :resolution_unit=>2,
    :software=>"10.0.2",
    :date_time=>2016-10-27 09:44:46 +0900,
    :ycb_cr_positioning=>1,
    :exposure_time=>(1/507),
    :f_number=>(11/5),
    :exposure_program=>2,
    :iso_speed_ratings=>32,
    :date_time_original=>2016-10-27 09:44:46 +0900,
    :date_time_digitized=>2016-10-27 09:44:46 +0900,
    :shutter_speed_value=>(1/506),
    :aperture_value=>2.2,
    :brightness_value=>(25891/3260),
    :exposure_bias_value=>(0/1),
    :metering_mode=>5,
    :flash=>16,
    :focal_length=>(83/20),
    :subject_area=>[1631, 1223, 1795, 1077],
    :subsec_time_original=>"707",
    :subsec_time_digitized=>"707",
    :color_space=>1,
    :pixel_x_dimension=>3264,
    :pixel_y_dimension=>2448,
    :sensing_method=>2,
    :exposure_mode=>0,
    :white_balance=>0, :focal_length_in_35mm_film=>29,
    :scene_capture_type=>0,
    :gps_latitude_ref=>"N",
    :gps_latitude=>[(35/1), (39/1), (2987/50)],
    :gps_longitude_ref=>"E",
    :gps_longitude=>[(139/1), (42/1), (741/50)],
    :gps_altitude_ref=>"\x00",
    :gps_altitude=>(4943/67),
    :gps_time_stamp=>[(0/1), (44/1), (46/1)],
    :gps_speed_ref=>"K",
    :gps_speed=>(0/1),
    :gps_img_direction_ref=>"T",
    :gps_img_direction=>(109678/577),
    :gps_dest_bearing_ref=>"T",
    :gps_dest_bearing=>(109678/577),
    :gps_date_stamp=>"2016:10:27"
}

画像の情報のほかに、カメラやiPhone本体の情報も取得されました。
MIMETypeが出力されていないですが、そもそもexifrはJPEGとTIFFのファイルしか対応していないようです。
出力までの速さはmini_exiftoolに比べて早かったです。

まとめ
【共通】
画像の幅・高さ
写真を撮影した日時・位置情報
カメラの設定や部品の情報

【mini_tool】

  • 実行時間が長い
  • pngもgifも使える
  • キャメルケース
  • オブジェクト形式
  • 情報が豊富

【exifr】

  • 実行時間が短い
  • png、gifなどに未対応
  • スネークケース
  • シンボル形式
  • データの名前がが分かりやすい

参考にさせていただきましたm(_ _)m
画像ファイルからEXIF情報を取り出す
RubyでEXIFを見る。mini_exiftoolを入れる。

「プログラミングは書いて覚えろ」は本当か?ー「とりあえず」で受ける資格試験のススメー

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

プログラミング初心者が、いきなり参考書を手にしてもなかなか理解できず、諦めてしまうことも多々あると思います。 そんなとき、「とりあえず資格を取ってみる」ことが結構役立つかもしれません。

資格受験の良さ

  • 理解できなくても、とりあえず進められる

プログラミングを始めて勉強する人がまずつまずくのが、「参考書の意味わからなさ」だと思います。読んでもわからない、でも理解しなきゃ先に進めない…というところで本を閉じ、あなたのプログラマ人生は幕を閉じます。
その点資格勉強となると、「とりあえず丸暗記して、点数が取れればいいや」と割り切れるので、パッパと前に進むことができます。わからなかったところも、勉強を進めていくうちに「ああ、あの時のあれはこういうことだったのか」と腹落ちすることが多いです。

  • 参考書が意外とわかりやすい

これが意外だったんですが、資格の参考書は初心者が読んでもわかりやすいです。今まで「たのしいRuby」を読んで勉強していたのですが、それよりも「Ruby技術者認定試験合格教本」のほうがずっと勉強しやすかったです。解説も割と親切で、この本から勉強を始めても良かったかもな、とさえ思いました。

  • 「憶えよう」と思える

参考書を読んで、その通りにプログラムを書いて、アプリケーションが一つできた。「やった!」と思うのですが、結局頭の中に残っているのはぼんやりとした文法と構造のみ。本に書いてあるまま書き写しただけだからです。数あるメソッドの中で頭に残っているのは僅かではないでしょうか。
その点資格勉強では、憶えなければ点が取れないので取り合えず暗記します。これが結構役に立ちます。
本当なら「プログラムを沢山書いているうちに自然と憶える」のが理想なのかもしれませんが、とりあえず全部憶えてしまうことで参考書に書いてあるプログラムが読み取れるようになったり、自分でプログラムを書き出すことができるようになります。知識を得るとだんだんとプログラミングが楽しくなってくると思います。

  • 締め切りがある
    独学で辛いのが、勉強の目標となる締め切りが無いこと。「この日までは頑張ろう!」と思うことで、めんどくさい勉強も耐えることができます。
  • 金が絡むと必死になれる
    これが一番大きい。プログラミング言語の資格は往々にして受験料が高いので、一度落ちると高級焼肉3回分くらいのお金をドブに捨てることになります。お金が絡まなきゃ本気になれない人には、資格受験を強くお勧めします。

ちなみに私は今回ruby silverを受験したのですが、プログラミング初心者(rubyや他の言語に全く触ったことが無い人)でも100時間程度本気で勉強すれば受かるかな、という印象でした。
もちろん多くの方が言う「プログラミングは書いて憶えろ」は本当に役に立つ正攻法だと思いますが、それでは太刀打ちできなかったという方はぜひ一度「とりあえず」資格を受けてみてはいかがでしょうか。

Googleアナリティクスのセッション定義

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

こんにちは。今回はセッションの定義についてです。 よく話題に出るので改めてまとめておこうと思います。

公式からのセッション定義に関するアナウンスは
2011年8月にGoogle Analytics Solutionにアップされています。

Google アナリティクスのセッションの定義変更について
http://analytics-ja.blogspot.jp/2011/08/update-to-sessions-in-google-analytics.html

Googleアナリティクスでのセッション定義

セッションが切れる条件は下記の3つです。

1:30分以上ユーザー行動がない場合

30分以上ユーザー行動がない場合タイムアウトになり、新たなセッションになる

enter image description here
Aさん30分もどこに行ってたのでしょうか。

2:日付が変わるタイミング

その日の終わり日付が変わるタイミングで自動的にセッションが新たなセッションになった

enter image description here
Aさん夜更かしですね。

3:特定のデータ情報が変わるとき

以下のトラフィック示すデータのどれかが変わったとき
utm_source、utm_medium、utm_term、utm_content、utm_id、utm_campaign、gclid

enter image description here
決済や申込フォームでありがちな遷移です。

utm_source、utm_mediumは流入元情報を指すデータです。
要は、流入元が変わるタイミングでもセッションは再定義されます。

各パラメータについては以下の通りです。

  • 広告関連のパラメータ
    • utm_source …参照元
    • utm_medium …メディア
    • utm_term …キーワード
    • utm_content …コンテンツ
    • utm_campaign …キャンペーン
  • Adwordsで生成されるID
    • gclid
  • 任意のID
    • utm_id

流入元が変わる際のセッション定義の例外

1:クロスドメイン設定を行っている場合

異なるドメイン間のセッション情報を引き継ぎ、解析するために
クロスドメイン設定している場合は当然、セッションは切れません。

▼クロスドメインの設定方法はこちら▼
クロスドメイン設定の落とし穴【Googleタグマネージャー/Googleアナリティクス】
 →Googleタグマネージャーのクロスドメイン設定方法(通常時)

2:参照元除外を行っている場合

外部サービスのカートやフォーム等、
予め、サイトの遷移途中に外部サイトに遷移することが分かっていれば、
参照元除外設定に対象外部サイトのドメインを設定しておくことをお勧めします。
参照元除外設定をすると、外部サイトとは認識されずにセッションも切れません。

▼参照元除外方法はこちら▼
クロスドメイン設定の落とし穴【Googleタグマネージャー/Googleアナリティクス】
 →【クロスドメイン設定の落とし穴#2】異なるドメイン間でセッション情報が分断される!

補足

2011年8月11日以前のデータはブラウザを閉じた時にセッションが切れましたが、
現在はブラウザを閉じることは一切セッションに影響しません。
.

.

[PR]アピリッツのGoogleアナリティクスサポートサービス

■Google アナリティクス セミナー・トレーニング

アピリッツでは、 Googleアナリティクスセミナー(無料・有料含む)を過去200回以上の開催をしております。ツールのことは勿論、事業内容であるシステム開発、デザイン制作、各ASPツールのサービス展開より得られた「売上向上・受注獲得のための現場のノウハウ」を重視し、皆様のビジネス上での成功をお手伝いできるようセミナーを展開しております。

■Google アナリティクス コンサルティング

Googleアナリティクスの導入・解析・運用・ナレッジ化をサポートします。

■リスティング広告出稿代行

[Google Partner] 当社は AdWords 認定資格に合格しています。
enter image description here

2016/10/10発表 GoogleアナリティクスのUIが変わる!

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

2016年10月10日にGoogle Analytics Solutionにて発表がありましたね。GoogleアナリティクスのUIが「また」変わります!

変更タイミングは今後数週間かけて開始するとのことです。

変化があるのは嬉しいですし、長くGoogleアナリティクスと関わっているので慣れましたが、
色々と本や過去の記事への影響があるので、UIの変更はドキドキします!(笑)

Google Analytics 360 Suite – built for enterprise.
https://analytics.googleblog.com/2016/10/improvements-coming-to-google-analytics.html

UI変更については上記にて情報が掲載されています。
今回はこの内容についてご紹介します。

1.マテリアルデザインに

これに関しては既に一部アカウントで適用されているかと思いますが、
2016年トレンドのマテリアルデザインがとうとうGoogleアナリティクスにも適用されましたね。
Googleタグマネージャーでも適用されているかと思います。

下記の画像を見ると多くの項目がサイドナビゲーション内に格納されたことにより
ヘッダーナビゲーションが無くなり、レポート領域が増えたことは嬉しいですね。
enter image description here
※画像参考:https://analytics.googleblog.com/2016/10/improvements-coming-to-google-analytics.html

2.カスタム系がひとつのナビゲーションに

以前はカスタムレポートが別ナビゲーションとして独立していましたが、
すべてのカスタマイズ要素が一つのレポート項目としてまとめられるようです。

対象は以下の4つのようです。
・マイレポート
・カスタムレポート
・ショートカット
・カスタムアラート
enter image description here
※画像参考:https://analytics.googleblog.com/2016/10/improvements-coming-to-google-analytics.html

3.ビューの切り替えが楽に

以前は、アカウント/プロパティ/ビューは個々の画面があり、
都度表示切替する必要ありましたが今後はマテリアルデザインの適用により、
この面倒な操作が不要になりました。

すべては左上のナビゲーションだけで切り替えできます。
読み込みに時間をかけることなくかなりスムーズですね。
各表示の切り替えがなめらかでオシャレです。
enter image description here
※画像参考:https://analytics.googleblog.com/2016/10/improvements-coming-to-google-analytics.html

4.ログインすると最後に見てたビューが自動表示

ログインすると、自動的に最後にログインしていた時に見ていたGoogleアナリティクスビューが表示されます。
よく見るビューが決まっている場合はスムーズにレポートを見ることができます。

5.デフォルト表示期間の変更ができる

以前は直近1か月のデータ表示でしたが、データ量が多い場合
最初の読み込みに時間がかかりストレスになっていたと思います。

今後はデフォルトの日付範囲を変更することができるため、負荷を減らすことができます。
また、特に指定がない場合は直近7日間のデータが設定されており、瞬間的な変化だけを追うことができます。
(せめて1週間単位でレポートを見てね、というGoogleからのメッセージだと思っています!)

6.インテリジェンスイベントとページ解析がなくなる

カスタムアラートは、新しいカスタマイズのセクションに移動しており、
通常どおり機能し続けますが、インテリジェンスイベントは削除されます。

また、ページ解析レポートは、GoogleアナリティクスのUIから削除されるようです。

恐らく、chromeの拡張機能「Page Analytics」は残る気がするので、
拡張リンクのアトリビューションタグは残しておいたほうが良さそうですね。

▼chromeの拡張機能「Page Analytics」
https://chrome.google.com/webstore/detail/page-analytics-by-google/fnbdnhhicmebfgdgglcdacdapkcihcoh

▼拡張リンクのアトリビューションタグ

ga('require', 'linkid', 'linkid.js');

※参考:https://support.google.com/analytics/answer/2558867?hl=ja

こちらのヘルプにはまだ何も記載されていないようなので、今後もチェックが必要です。

以上、GoogleアナリティクスのUI変更に関する紹介でした。

[PR]アピリッツのGoogleアナリティクスサポートサービス

■Google アナリティクス セミナー・トレーニング

アピリッツでは、 Googleアナリティクスセミナー(無料・有料含む)を過去200回以上の開催をしております。ツールのことは勿論、事業内容であるシステム開発、デザイン制作、各ASPツールのサービス展開より得られた「売上向上・受注獲得のための現場のノウハウ」を重視し、皆様のビジネス上での成功をお手伝いできるようセミナーを展開しております。

■Google アナリティクス コンサルティング

Googleアナリティクスの導入・解析・運用・ナレッジ化をサポートします。

■リスティング広告出稿代行

[Google Partner] 当社は AdWords 認定資格に合格しています。
enter image description here

Googleアナリティクスのアドバンスセグメントを削除する方法。たぶんこれが一番早いと思います。

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

Googleアナリティクスのなかでも使用頻度が高く重要な機能にアドバンスセグメントがあります。このアドバンスセグメントではWebサイトを分析する上で「スマートフォンのデータだけ見たい」「検索から来たユーザーのデータだけ見たい」などを叶えるすばらしい機能なのですが、一括削除機能がありません。そこで今回は私がアドバンスセグメントを削除し続ける中で、おそらく一番早いのではないかな。という削除方法をご紹介いたします。

アドバンスセグメントの作成制限

アドバンスセグメントを消していくまえに、前提として作れる最大の個数を知っておきましょう。アドバンスセグメントはアカウントごとに1,000個まで作成することができます。そのため、もしも1,000個に達してしまった場合は「削除する」か「新しいアカウントを作る」の2通りしか方法がありません。今すぐに大量のアドバンスセグメントを作りたいという方は、ご自身が普段使っているアカウントから、権限を付与したアカウントをつくることでアドバンスセグメントが0個(未設定)のアカウントをつくることができます。

アドバンスセグメントの削除方法

一般的にアドバンスセグメントを消す方法を調べると、レポート画面からの消し方を紹介されます。以下に掲載している画像のように、レポート画面の上部にあるセグメントをクリックし、プルダウンで削除を選ぶ方法です。

enter image description here

Googleでもセグメントの削除方法についてのヘルプページを用意しています。セグメントを適用、削除する – アナリティクス ヘルプ

しかし、このページでも効率の良い消し方までは掲載されていないため、アドバンスセグメントを1つ1つ消すたびにレポートが読み込まれ、100個単位で消すとなると1時間以上の時間を費やすことになります。

たぶん一番早いアドバンスセグメントの消し方と3つのポイント

私はこの消し方で1時間30分ほどで500個のアドバンスセグメントを消すことができました。ぜひ、アドバンスセグメントを効率よく消す機会のあるかたは試してみてください。

1.管理画面からセグメントを消す

実は、ホーム・レポート・カスタム・管理とGoogleアナリティクスの画面上部にならんでいる「管理」からセグメントの一覧ページにいくことができます。画像の赤い個所がセグメント一覧画面になります。
enter image description here

これがセグメントの一覧ページです。
enter image description here

この画面ではレポートの読み込みが発生せず、スムーズにセグメントを消すことができます。

2.表示する行数を10行にする

セグメントをこれから消すぞ!というときに表示する行数を一番少ない10行にしましょう。ページを読み込む際のデータ量がすくないため、最も早くページが読み込まれます。

3.画面が切り替わる前に”アクション”の位置にカーソルをあわせておく。

ページ読み込み速度がレポート画面よりも早いとはいえ、Googleアナリティクスは読み込み時間が少なからずかかります。その間に、”アクション”の位置にカーソルをあわせておきます。すると画面が切り替わった瞬間にセグメントを消すことができ、非常に効率的です。

まとめ

今回はアドバンスセグメントを効率よく削除する方法をご紹介させていただきました。本音をいうと一括削除機能がほしいですが、アドバンスセグメントが1,000件を超えるアカウントは稀だと思います。そのため今後も実装があまり期待できません。ご紹介した削除方法がお役に立てば幸いです。

クロスドメイン設定の落とし穴【Googleタグマネージャー/Googleアナリティクス】

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

約9年程Googleアナリティクスに関わってきましたが、 最近のクロスドメイン設定は非常に簡単になりましたね。

昔はクロスドメインのリンク一つ一つにタグを仕込む必要がありましたが、今は不要です。

Googleタグマネージャーを利用した設定も簡単なので、
複数ドメインを運用されている方の中では「今まで踏み切れなかったけどやっと導入できた!」
という方も多いのではないでしょうか。

そんなGoogleタグマネージャーを使ったクロスドメイン設定。
じつは、導入してみるととんでもない落とし穴が待っていることがあります。

今回はGoogleタグマネージャーを使った基本的なクロスドメイン設定と
その中でありがちな落とし穴・回避方法をお伝えいたします。

Googleタグマネージャーのクロスドメイン設定方法(通常時)

まずは一般的なクロスドメイン設定方法のご紹介。
大事なポイントは以下の2つ。

  • 【設定するフィールド】の【フィールド名】に【allowLinker】、【値】に【true】を設定
  • 【クロスドメイントラッキング】の【自動リンクドメイン】にクロスドメイン対象のドメイン名を設定

※Googleタグマネージャーのユニバーサルアナリティクスタグ設定画面
enter image description here

これを設定して、解析対象ページに配信すればOKです。

ちなみに、クロスドメイン対象がサブドメインの場合は、サブドメインを入力してください。
「http://」や「https://」は不要です。
ドメイン入力例:

www.appirits.com,ecm.appirits.com,appirits.co.jp

【クロスドメイン設定の落とし穴#1】Googleアナリティクス集計時にURLが統合される!

Googleアナリティクスでページ別レポートを見る際に、標準ではドメイン名は表示されずページ名が表示されます。
そのため複数のドメインを計測している環境では、同じページ名がある場合、統合されて見えてしまいます。
これを避けるためにはドメイン情報を記録するようにGoogleアナリティクス側でフィルター設定を行う必要があります。
※レポート「行動>サイトコンテンツ>すべてのページ」での表示例
設定前の計測ページ名:

/sample.html

設定後の計測ページ名:

aaa.co.jp/sample.html
bbb.co.jp/sample.html

以下、Googleアナリティクスのフィルター設定時のポイントです。

  • フィルタ【カスタム】で【詳細】を開く
  • フィールドAに【ホスト名】【(.*)】を設定
  • フィールドBに【リクエストURI】【(.*)】を設定
  • 出力先に【リクエストURI】【$A1$B1】を設定
  • 【出力フィールドをオーバーライド】にチェックを入れる

※Googleアナリティクスビュー設定のフィルタ設定画面

enter image description here

この設定ができていれば、ページ名が統合されることなく
個々のページ解析が可能になります。

【クロスドメイン設定の落とし穴#2】異なるドメイン間でセッション情報が分断される!

Googleアナリティクスは、参照元が異なる度に自動的に新しいセッションが開始されます。
クロスドメインの計測を行うとなると、異なるドメイン間を行き来するため
そのままでは都度セッション情報が分断され、セッション数を正しく計測できません。

以下、Googleアナリティクスヘルプで紹介されている計測例です。

たとえば、my-site.com にアクセスしたユーザーが your-site.com にアクセスした後、 my-site.comに戻ってきたとします。your-site.com を参照ドメインとして除外していない場合は、 my-site.com へのアクセスがそれぞれ1 回のセッションとして計 2 回記録されます。一方、your-site.com からの参照を除外した場合、my-site.com への 2回目のアクセスは 新しいセッションとして開始されず、セッションは 1 回だけ記録されます。
https://support.google.com/analytics/answer/2795830?hl=ja

上記の通り、参照元を除外すると、除外したドメインから
サイトに集まったアクセスに対して、新しいセッションは開始されません。
クロスドメイン計測の場合、この参照元除外が必須です。

以下、Googleアナリティクスの参照元除外設定時のポイントです。

  • 【参照元除外】にクロスドメイン対象のドメイン名を設定

※Googleアナリティクスプロパティ設定の参照元除外リスト設定画面
enter image description here

クロスドメイン対象がサブドメインの場合は、サブドメインから入力してください。
「http://」や「https://」は不要です。

【クロスドメイン設定の落とし穴#3】対象外のドメインにパラメータ(_ga=)がついてしまう!

クロスリンクが正常に動いていると、ドメインをまたいでページを移動した後、
URLに「_ga=」というリンカーパラメータが自動で付与されるようになります。

パラメータ例:

http://mc.appirits.com/?_ga=1.43273121.548799371.1472785112

これはユーザーのクッキー情報を保持しているパラメータであり、
異なるドメイン間でのセッション情報を引き継ぐため、基本的には回避することができません。
(非公式で実装している方もいるようですが、正常計測保証はできません)

例えば計測対象のクロスドメインが
「 http://aaa.bbb.com 」「 http://ccc.com 」という場合、
Googleタグマネージャの自動リンクドメインに設定する値は
「aaa.bbb.com」と「ccc.com」になります。

そうなるとこの「ccc.com」が厄介な動きをします。
「 http://ccc.com 」はもちろん「 http://ddd.ccc.com 」といった
計測対象外のサブドメインにもリンカーパラメータが自動付与されてしまうのです。

また、ダウンロードファイル.exeやpdfにもリンカーパラメーターが付与されるため、
この影響により正しく情報が表示されない場合もあります。

Googleタグマネージャーのクロスドメイン設定方法(例外時)

先に紹介した「通常時」の設定では【クロスドメイントラッキング】の【自動リンクドメイン】に
クロスドメイン対象のドメイン名を設定していましたが、これを外します。

また、新たなタグを作成し、そちらで自動リンクドメインの機能を持たせ
リンカーパラメータの付与先を詳細に設定します。

大事なポイントは以下の2つ。

トラッキングタイプ【ページビュー】
– 【自動リンクドメイン】を指定しない
– 【設定するフィールド】の【フィールド名】には【allowLinker】、【値】に【true】を設定
トラッキングタイプ【リンクをデコード】
– トラッキングタイプ【リンクをデコード】のタグを新たに追加
– 【配信トリガー】にリンカーパラメーターを付与したいリンクの「リンククリック」を設定
– 【例外トリガー】にリンカーパラメータを付与したくない拡張子を設定

Googleタグマネージャーのユニバーサルアナリティクスタグ(ページビュー)設定画面
enter image description here

Googleタグマネージャーのユニバーサルアナリティクスタグ(リンクをデコード)設定画面
enter image description here

この設定を行うことで、対象外のサブドメインや拡張子が.exeといった
特殊なアイテムへのリンカーパラメータが自動付与が防げます。

  • リンカーパラメーターがつくと正しくページが表示されない!
  • リンカーパラメーターのせいで特定の環境下で.exeダウンロードができない!

といったサイトUI側の問題解決につながります。

どんなに簡単な設定でも慎重に

クロスドメインは以前に比べ簡単に設定できるようにはなりましたが、
昔と変わらず、落とし穴は無数にあります。

  • 折角取得した解析データが使えない
  • サイト表示やダウンロードに影響して機会損失につながった

なんてことにならないように、慎重に丁寧に設定することを心がけましょう!
.


.

[PR]アピリッツのGoogleアナリティクスサポートサービス

■Google アナリティクス セミナー・トレーニング

アピリッツでは、 Googleアナリティクスセミナー(無料・有料含む)を過去200回以上の開催をしております。ツールのことは勿論、事業内容であるシステム開発、デザイン制作、各ASPツールのサービス展開より得られた「売上向上・受注獲得のための現場のノウハウ」を重視し、皆様のビジネス上での成功をお手伝いできるようセミナーを展開しております。

■Google アナリティクス コンサルティング

Googleアナリティクスの導入・解析・運用・ナレッジ化をサポートします。

■リスティング広告出稿代行

[Google Partner] 当社は AdWords 認定資格に合格しています。
enter image description here

Mac版のOWASP ZAPで脆弱性チェックの設定

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

macOS Sierraで、OWASP ZAPを使い通信内容の確認と診断を開始するまでに必要な設定や手順についてまとめました。Mac OS Xでも、ほぼ同様の方法です。OWASP ZAPは、ウェブアプリケーションの脆弱性検査のためのツールです。

はじめに

OWASP ZAPは、ウェブアプリケーションの脆弱性検査を行うことができるオープンソースのツールです。利用の仕方により不正アクセス行為と判断される可能性ががあります。またサービス停止やデータの破損が起こる場合もありますので事前にバックアップを行うなどしてください。そして必要に応じて管理者の許可を得て利用してください。
前回のKali Linuxの日本語化に続き、今回はmacOS Sierraに、OWASP ZAP 2.5の導入を行います。

Webアプリケーションの診断等始める場合は、徳丸本など参考にして、十分理解してから行ってくださいね。
徳丸試験の紹介と合格する方法
https://spirits.appirits.com/role/engineer/security-engineer/5418/

新しく記事書きました、脆弱性診断ツール OWASP ZAP についても参考にどうぞ。
https://spirits.appirits.com/role/engineer/security-engineer/6129/

ローカルプロキシについて

プロキシというと、一般的にDeleGateやSquidなどウェブキャッシュ用のものや、最近だとnginxなどをリバースプロキシに利用しているところが多いかと思います。
ウェブアプリケーションのセキュリティ診断などで利用するプロキシは、PCインストールし、ブラウザとウェブサーバ間のデータ内容の確認、リクエストを変更して送信などを行うローカルプロキシのことを主に指します。
ローカルプロキシにも動作環境や機能などの違いで特徴があり、今回紹介するOWASP ZAPや、Burp Suite、Fiddler、Mac用ですとCharlesなどがあります。

OWASP ZAPの特徴などについて

  • ソースコードが公開されており、無償で利用できる
  • JAVAプログラムのためMacなど各種OSで動作する
  • 手始めに行うのに向いている自動診断機能つき
  • 比較的、日本語化が進んでいる( 同種類のツール、BurpSuiteを日本語化する方法もある)

独立行政法人情報処理推進機構(IPA)では、ウェブサイトにおける脆弱性検査手法(ウェブアプリケーション検査編)で、SQLMap、Fiddler、Paros、Ratproxyと共にOWASP ZAPが紹介されています。SQLMapは、Kali Linuxにも導入されてますね。
OWASP ZAP localizationの少しスクロールしてJapaneseの部分、日本語化を行ってる方達です。
OWASP ZAP Japanese
私も、OWASP ZAPの日本語化に参加しております。メニューや設定など、目に付くところを集中的に行いました。検出結果や階層が深い部分については、これからといったところです。

OWASP ZAPのインストールと初回起動

今回は、投稿時点で最新のOWASP ZAPのバージョン2.5を、macOS Sierraにインストールします。
基本的にOSごとの違いはあまりないので、他のOSの場合は読み替えていただければと思います。
JREが、Mac OS版にはバンドルされていますが、他OSでは別途インストールが必要です。

OWASP Zed Attack Proxy Projectからダウンロードページで選択してください。

特に変わったこともないかと思いますが、ダウンロードしインストールしてください。
Mac OWASP ZAP インストール

起動時、「開発元が未確認のため開けません」と表示されますが、指示通りにシステム環境設定のセキュリティとプライバシーを開き確認し、下部のこのまま開くを押します。

また、ソフトウェアライセンスについて表示されるので、読んでから進んでください。
起動すると、セッションの保存の選択があります。今回は、一番下の「この時点で、セッションを保存せず操作します。」で進めてしまいます。
Mac OWASP ZAP

OWASP ZAPの設定

あとで行うこともできますが、アップデートを行うか聞かれます。
再度行う場合は、メニューの「ヘルプ」から、「アップデートのチェック」で、「アドオンの管理」ウィンドウを開きます。

マーケットプレイスで、Active scanner rulesなど必要なものを選択し、Install Selectedで導入します。
また、インストール済みのアドオンも選択してUpdate Allを行います。

ZAP アドオン追加

ウェブブラウザの設定

特にセキュリティ診断などを行う場合は、誤って別のサイトにリクエスト送信など避けるため、診断用にウェブブラウザ独立でプロキシを変更できるFirefoxを導入して、更にプロファイルを分けることをお勧めします。

Firefoxのプロファイル

プロファイルマネージャを使用して、Firefox のプロファイルを作成または削除するなどを参考にしてください。
各種起動方法があると思いますが、私は単純にターミナルで下記を入力してしまいます。
初めに診断用のプロファイルを新規で作成してしまいます。以降はそのまま使用します。

/Applications/Firefox.app/Contents/MacOS/firefox -P

プロキシの設定

OSまたは、ウェブブラウザのプロキシの設定を設定します。ここでは私が行っているFirefoxのアドオンを使った方法を紹介します。FoxyProxy StandardをFirefoxに導入します。

ローカルホストに、ローカルプロキシOWASP ZAPのポート番号を指定します。(他のものと同一にならないようにあらかじめ他のツールも変更しておく)
ZAP FoxyProxy詳細

この様に、複数作成して切り替え出来るようにしておくと何かと便利です。
ZAP FoxyProxy

証明書のインポート

OWASP ZAPで、HTTPS通信データを確認出来るようにするため、ウェブブラウザに証明書のインポートを行います。いわゆる中間者(MITM)攻撃と同様の状態を作り出します。

まず、OWASP ZAP側のメニューから、「ツール」、「オプション」、「ダイナミックSSL証明書」と進んで。
「生成」してからファイルを「保存」します。
OWASP ZAP 証明書

次に、Firefox側で、「オプション」、「詳細」、「証明書」、「証明書を表示」、「認証局証明書」
「インポート」でファイルを読み込みます。「この証明局によるWebサイトの識別を信頼する」にチェックを入れます。
Firefox 証明書

通信データの確認

この状態で、対象となるサーバをウェブブラウザで閲覧します。適度に画面遷移してみてください。先にウェブブラウザやアドオンがアップデート確認などの為の通信を拾ってしまうかもしれません。
owasp zap mac

画面下部にある履歴タブでリクエストを選択すると、画面右上のリクエストタブ、レスポンスタブで、通信の様子とデータの内容が確認できます。検証できる環境がない場合は、やられサイトを利用してください。AppGoat、Badstore、Metasploitable2 などが有名です。私は、OWASP Mutillidae IIなど各種導入されている、OWASP BWAをよく利用します。また手っ取り早く、VirtualboxにWordpressを導入するなどでも、OWASP ZAPの検証にはなるでしょう。

おわりに

今回は、OWASP ZAPを使い通信内容の確認と診断を開始するまでに必要な設定や手順についてまとめました。実際の使用方法などについては、次回以降に掲載していきます。
前回は、Kali Linux(2016.2)の日本語利用についてでしたが、もちろんZAPも導入されておりますので、参考にしていただければなと思います。

関連記事など

脆弱性診断サービスなど

弊社、アピリッツではセキュリティ診断サービスを行っております。

下記リンクから内容の確認と、問い合わせが可能です。

http://security.appirits.com/

Kali Linux(2016.2)の日本語利用について

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

Kali Linux(2016.2)のインストールと日本語利用についてまとめました。Kali Linuxは、セキュリティ診断用ツールが標準で用意されている、Linuxディストリビューションです。新バージョン2017.3については、関連の記事を参照ください。

はじめに

Kali Linuxは、セキュリティ診断ツールを含むLinuxディストリビューションです。Kali Linuxは、利用の仕方により不正アクセス行為と判断される可能性ががあります。またサービス停止やデータの破損が起こる場合もありますので事前にバックアップを行うなどしてください。そして必要に応じて管理者の許可を得て利用してください。

Kali Linux 2017.3 リリース

Kali Linux 2017.3 がリリースされてます。とても導入が楽になってます。新バージョンについては下記の記事も参照ください。
Kali Linux 2017.3 導入と日本語化

Kali Linuxの特徴などについて

  • Debianの派生のLinuxディストリビューションです。
  • デジタルフォレンジック、ペネトレーションテスト(侵入テスト)用などのツールが用意されている。
  • 基本的に、root権限で作業を行う。
  • 現在は、ローリングリリースを採用している。
  • バージョン2016.2がリリースされた。(直接ダウンロードできる仮想環境イメージファイルは、まだ2016.1でした。)

Kali Linux 公式サイト
https://www.kali.org/

主な収録ツール

Nmap、Aircrack-ng、Wireshark、Metasploit Framework、Armitage、Burp SuiteOWASP ZAP、BeEF、sqlmap、wpscan などなど多数

※Owasp ZAPについては、Mac版のOWASP ZAPで脆弱性チェックの設定として記事を書いております。

Kali Linuxを実機にインストールする場合

現在、VirtualBox、VMwareなどの仮想環境が、用意しやすい状況にありますが、用途を限定すれば旧式モデルのPCなどでも十分利用できます。
私は下記のツールを利用し、インストール用のUSBメモリを作成しました。
失敗しやすいポイントだけ書くと、起動時にUSBメモリからブートするようBIOSを設定し、インストール途中にCDを入れるように聞かれたら、USBメモリを抜いてから再度挿してください。

UNetbootin インストール用のUSBメモリを作成ツール
https://unetbootin.github.io/

VirtualBox上にインストールする場合

仮想化ソフトウェア、VirtualBoxをインストールし、Kali Linuxのイメージを導入、起動させます。

VirtualBox 公式サイト
https://www.virtualbox.org/

Kali Linux Downloads – Virtual Images イメージファイルのダウンロード先
https://www.offensive-security.com/kali-linux-vmware-virtualbox-image-download/

Kali Linux Downloads

書いている時点で、直接ダウンロード出来るのはバージョン2016.1です。
中段のPrebuilt Kali Linux VirtualBox Imagesタブをクリックしダウンロードします。
ダウンロードした、Kali-Linux-2016.1-vbox-XXXXX.7zを展開します。(7z形式を展開できるソフト利用)
VirtualBoxを起動し、ファイル、仮想アプライアンスのインポートで、先ほど展開したKali-Linux-2016.1-vbox-XXXXX.ovaを選択しインポートします。
デフォルトの設定でも問題はないですが、ネットワークの割り当ては、診断対象環境との通信の関係上、ブリッジ などがよいかと思います。その他は、好みによって設定を変更します。私はメモリを4GBぐらいにしています。

Kali Linux VirtualBox

Kali Linuxの起動を行いログインします。
 ユーザー名:root
 パスワード:toor

他のパッケージ導入前に、既存のパッケージを最新に更新してしまいましょう。

apt-get update
apt-get dist-upgrade (バージョン2016.2をdist-upgradeにして導入してしまいます。)

※うまく動作しない場合があるようです。(バージョン2016.1から2016.2の移行期のため?)
Kaliインストール後、apt失敗についても暫定対応ですが参考にしてみてください。

またバージョン2016.2が直接ダウンロード出来るようになったiso版で導入を行い。下記のコマンドVirtualBoxのゲストツールを入れてしまう方法も検討してみてください。VirtualBox標準方式でのGuest Additionsの導入より気軽に行えると思います。

apt-get install virtualbox-guest-dkms

Kali Linuxの日本語利用について

英語環境のまま利用している方も多いようですが、ここでは日本語で利用できるように設定していきます。いわゆる日本語化です。下記3点を、順に進めます。

1. 日本語表示の設定(ロケール、フォーマット、キーボードレイアウト、タイムゾーン)
2. 日本語フォントの導入(日本語表示)
3. 日本語変換の導入(日本語入力)

1. Kali Linuxの日本語表示設定

バージョン2016.2を、isoから日本語を選択してインストールを行った場合は、日本語表示の設定はほぼ完了してますので、画面右上のキーボードレイアウトの変更を行ったら、次の日本語フォントの導入から行ってください。

画面の右上、電源右の▼をクリックし、設定画面を開きます。
Kali Linux Setting

Region & Languageをクリックします。
Kali Linux Language

下記を参考に、Language、Formatの変更します。ログインのし直しを求められますが、一通り設定を行ってからのほうがよいでしょう。
また、Input Sources追加と順序の変更を行います。使用しなければUSを削除してしまっても問題ないです。
Kali Linux Japanese

もう一度設定画面に戻り、Date & TimeのタイムゾーンをJSTにします。

2. Kali Linuxへ日本語フォントの導入

下記コマンドでフォントパッケージを導入すると、独特の中華フォントから馴染みのある日本語表示になるかと思います。

apt-get install fonts-takao
Kali Linux Font

3. Kali Linuxへ日本語変換の導入

下記コマンドでパッケージを導入後、再起動することで日本語入力の漢字変換が可能になります。

apt-get install uim uim-anthy

Mozcがroot権限で、そのまま動かないため、ここではuimを利用します。
Mozcを利用したい場合は、一般権限で動作する別のディストリビューション(BackBoxなど)をお勧めします。
Mozc自体の変更でも動作させることはできるようです。

ウェブブラウザの日本語化など

最後にその他、各アプリケーションごとの対応が必要となりますが、ここではウェブブラウザに日本語言語パックとFlashを導入しておきます。

apt-get install firefox-esr-l10n-ja
apt-get install flashplugin-nonfree

Debianに標準搭載されているブラウザがfirefoxに変更されたため、Kali Linuxでもfirefoxが標準となってます。
ESR: Extended Support Release(延長サポート版)

関連書籍紹介

日本語で書かれたKali Linuxに関する書籍は、ほとんど出版されていませんが、下記の「サイバーセキュリティテスト完全ガイド」は、Kali Linuxについて詳しく解説されています。



サイバーセキュリティテスト完全ガイド ~Kali Linuxによるペネトレーションテスト~

関連記事など

脆弱性診断サービスなど

弊社、アピリッツではセキュリティ診断サービスを行っております。

下記リンクから内容の確認と、問い合わせが可能です。

http://security.appirits.com/

Kaliインストール後、apt失敗について

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

Kali Linuxは、セキュリティ診断用ツールが標準で用意されている、Linuxディストリビューションです。Version(2016.1)を導入直後は、パッケージを最新に更新したいところです。iso版は2016.2が直接ダウンロード出来るようになりましたが、仮想マシン版や以前インストールしたものからapt-get updateと入力してもエラーで実行できない場合があるので、解決方法を試してみました。

はじめに

今回、紹介する方法は、自分が検証環境で行った、少々強引にAPTを修正する方法ですで、テスト環境を用意する、バックアップを取ってからなど十分注意して行ってください。
また、公開時点での暫定的な方法であり、初期ダウンロード、リポジトリ、パッケージなどの状態により、変更される可能性があります。

エラーの内容

Kali Linux(2016.1)を導入し、パッケージの更新のため端末にコマンドを入力、下記のようにエラーとなりました。(iso版、VirtualBox版、light版で確認)

root@kali:~# apt-get update
E: Method http has died unexpectedly!
E: sub-process http received a segmentation fault

または、下記のように分かりにくいかも知れません。

W: The repository 'http://http.kali.org/kali kali-rolling Release' does not have a Release file.
N: Data from such a repository can't be authenticated and is therefore potentially dangerous to use.
N: See apt-secure(8) manpage for repository creation and user configuration details.
W: Failed to fetch http://ftp.ne.jp/Linux/packages/kali/kali/dists/kali-rolling/main/binary-amd64/Packages  404  Not Found
W: Failed to fetch http://ftp.ne.jp/Linux/packages/kali/kali/dists/kali-rolling/non-free/binary-amd64/Packages  404  Not Found
W: Failed to fetch http://ftp.ne.jp/Linux/packages/kali/kali/dists/kali-rolling/contrib/binary-amd64/Packages  404  Not Found
E: いくつかのインデックスファイルのダウンロードに失敗しました。これらは無視されるか、古いものが代わりに使われます。

リポジトリの追加

deb cdromみたいな行があると思いますが、それとは別に下記を追加します。
同様のものが既に記載されている場合は、変更する必要はないです。
追記したら念のため、apt-get updateを行い変化がないことも確認します。

リポジトリリスト編集

vi /etc/apt/sources.list

Kali sources.list Repositories の The Kali Rolling Repository を参考にしてください。
http://docs.kali.org/general-use/kali-linux-sources-list-repositories

deb http://http.kali.org/kali kali-rolling main contrib non-free
# For source package access, uncomment the following line
# deb-src http://http.kali.org/kali kali-rolling main contrib non-free

必要なパッケージを事前に入手

事前に下記のパッケージを入手します。適宜読み替えてください、例は、この記事の公開当時最新の64bit版です。頻繁に更新されてるため新しいものを選んでください。
liblz4は、light版のみ必要?後工程で言われたら導入するスタンスでもよいかと。

libapt-pkg5.0_1.3~rc2_amd64.deb
apt_1.3~rc2_amd64.deb
liblz4-1_0.0~r131-2_amd64.deb

curlやwgetなどのコマンドで入手するか、またはブラウザで確認しながら、任意の場所にダウンロードします。

libapt-pkg、aptは、http://http.kali.org/pool/main/a/apt/
liblz4は、http://http.kali.org/pool/main/l/lz4/

ブラウザでのパッケージダウンロードの様子
Kali-Linux-2016.1-apt-error-01

aptの入れ直し

まず、removeでaptを削除します。危険な作業なので、Yes, do as say!と入力を迫られます。
その後、先ほどダウンロードしたパッケージを導入します。成功したらupdateを試してみましょう。

apt-get remove apt
dpkg -i libapt-pkg5.0_1.3~rc2_amd64.deb
dpkg -i apt_1.3~rc2_amd64.deb
dpkg -i liblz4-1_0.0~r131-2_amd64.deb (light版など必要に応じて)
apt-get update
Kali-Linux-2016.1-apt-error-02

apt-get updateが動作したら

正常に動作したら、upgradeを実行し数回出る質問に答えつつ、先ほどダウンロードしたパッケージを削除しておきましょう。
今回は、Kali Linux(2016.1)を導入直後からのaptエラーについて解決方法を試してみました。
これによりKali Linuxを最新状態(2016.2など)に保てるようになりました。

脆弱性診断サービスなど

弊社、アピリッツではセキュリティ診断サービスを行っております。

下記リンクから内容の確認と、問い合わせが可能です。

http://security.appirits.com/

デジタル全盛期にあえて!リアル付箋活用術

0

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

たまごです。 自分は付箋(物理)でタスク管理しているのですが、今日はその方法をご紹介したいと思います。

付箋(物理)の利点

まず、最初にデジタル全盛期のこの21世紀に、実態のある紙の付箋を使うメリットを説明します。

■可視範囲がスケーラブルである

デジタルタスク管理は、どうしても可視範囲がモニターのサイズに依存します。それ以上の情報を視認しようとすると、表示を小さくするか、スクロールするか、構造化して上のレイヤだけ表示するか、物理モニターを追加しなければなりません。

けれど、付箋は現実世界に展開するので、可視範囲の拡大が容易です。貼るところがなくなったら、増やせばいいです。この可視範囲を広くとれる点は、物理媒体の持つ圧倒的なメリットだと思います。

■仕様変更が容易である

スケーラブルとかぶりますが、物理付箋なら仕様変更が容易です。アプリケーションを使ってタスク管理していると、どうしてもそのアプリケーションの仕様を超えた使い方はできませんが(マクロやプラグインが許容されているなら書くという手もありますが)、紙の付箋にそんな縛りはありません。

色を増やしたいなと思えば、新しい付箋を買ってくればよいのだし、付箋の貼り方で優先度と緊急度を管理したいなと思えば、そういう貼り方をすればよいです。このスピード感は、物理媒体ならではだと思います。

■シェアしようがないので、オンオフを切り分けられる

クラウド系のタスク管理サービスでついついやってしまうのが、オフの時間に仕事のタスクをチェックしてしまうことです。でも、チェックするだけで、アクションは次の勤務まで持ち越しだったりします。どうせ、勤務した際にあらためてチェックするので二度手間になります。

人によって違うかもしれませんが、自分は、プライベートはプライベート、仕事は仕事で分けた方が頭がすっきりするタイプなので、「勤務場所でしかタスクの確認ができない」という紙付箋の持つ特性がとてもマッチします。

以上、リアル付箋に僕が感じるメリット三点でした。

付箋活用術

本題の付箋活用術に移りましょう。僕は、付箋をこう使っています。

enter image description here

モニターに貼って使うのですが、貼る場所によって意味合いを変えています。以下、順に説明していきます。

モニター上部

モニター上部には、左から順に「優先度高」「期限付きタスク」「優先度中~低」タスクを貼っています。

単純に左側に近づくにつれ、プライオリティが上がっていくイメージです。なので、とりあえずざっとタスクを確認したい時は、自分の場合、視線がモニターの左上に向かいます。

モニター右側

モニター右側には、優先度や期限が未整理な付箋を貼っています。これは、画面にかかるような形で、わざと邪魔になるように貼ります。「早く振り分けしろよ」ということです。

何故右側なのかというと、自分の場合、このモニターの右側にもう一台モニターがあるからです。マウスポインタが二つのモニターを行ったり来たりする際に、強制的に付箋が目に入るよう、この位置に貼っているわけです。

モニター真ん中

これは、たとえばミーティングで離席するけど、戻ってきたら速攻でやりたいタスクなど「なる早」系タスクを備忘的に貼ります。めちゃめちゃ邪魔な位置なので、ここに貼っておけば、まず忘れることはありません。

まとめ

以上、自分の付箋活用術でした。

これが基本形で、後は使いつつフレキシブルに運用しています。地味で泥臭いですが、なんだかんだ物理付箋は便利です。

参考になれば、幸いです。

最近人気な記事