「クライアント」を含む日記 RSS

はてなキーワード: クライアントとは

2016-05-31

仕事が断れない

仕事を断るのが苦手だ。



私はデザインとかイベント映像企画屋をやっているのだが、

独立して10年、おかげ様で順調に引き合いをいただいている。



独立してすぐは「どんな仕事も断らない」をモットーにがむしゃらに働いてきた。

その甲斐もあり、若い有能なスタッフも雇うよになり、なんとかやっていけている。



ところが、メディア露出することが増えてくるにつけ、

いろいろな相談・引き合いが増えてくるようになった。

どうも、昔お世話になったクライアントが、

増田さんとこだったら安くて高品質だよ」と宣伝してくれているようだ。

昔ならありがたかったが、今では迷惑である



こんなのはザラである



確かに昔はすべて受けてきたけど、それは自分一人だけでやってきたから。

でも、今はそうはいかないし、小さい仕事お金の無い仕事を受ける余裕はない。



はいえ、昔お世話になった人の顔をつぶすようで断るに断れないのが性格で、

スタッフにふるのも申し訳なく、自分作業をしていたりする。

なんとか、うまい断り方は無いものか。

2016-05-30

http://anond.hatelabo.jp/20160529174143

医者にかぎらず学校卒業してすぐの社会人のうち、ある程度はこういう人がいそう

それにしても患者クライアント)の感謝が嬉しいと思えないというのは、ちょっと感情不全っぽいものを感じるなあ

人との関わりが増えるうちに変わるものだとは思うけど

2016-05-28

彼女が欲しい。

クライアント先で、とある新作映画チケットを2枚貰った。これが普通の男なら、“お誘い”をかける女性の一人や二人を思い浮かべることだろう。僕もチケットを「ありがとうございます」と言いつつ受け取りながら、誰とこの映画を観に行こうか頭の中で考えていた。

まりにも思い浮かばず、思考を諦めた。諦めたというより、逃げたという表現が正しいかもしれない。そりゃあ、この数年女性デートなんてことをしていないので、当たり前といえば当たり前かもしれない。とはいえ、誰か一人くらいはいるだろう。そう思いもう一度改めて考えてみたが、やはり一人も浮かばなかった。

中学生でも出来る「映画に誘う」というデート方法しかも、「チケット貰ったんだけどさぁ、余らせちゃうの勿体無いから……一緒に行かない?」という、“誘える理由”も僕にはある。過去自分がもしこの状況だったら、あの娘を誘っただろうな。そんな思いを巡らせながら、いつものようにインスタグラムを惰性でチェックしていると、3年前に恋人だった女性写真を見つけた。紫色の髪の毛、ボロボロTシャツ、派手なメイク。僕の恋人だった頃の面影はそこにはなかったが、すぐに「あの娘だ」と理解した。

家に帰って、自分の姿を鏡で見てみた。少し髪が薄くなったかもしれないが、ほとんど変わっていないだろう自分がそこに写っていた。僕は、瞬時に理解した。今日までの僕は、新しいことも昔のことも、どちらも考えないように、そして逃げていたんだ、と。

ちょっと新しい道を歩いてみようかな。3年前から、1歩進んでみよう」と、前向きに生きられる気がした。まぁでも、とりあえず溜まっている仕事を片付けてからかな。

そんなことを思った、初夏の金曜日の夜。

2016-05-25

http://anond.hatelabo.jp/20160525144615

買ったゲームを動かすのに必須というので嫌々入れたクッソ重いゴミクライアント

クリアしてから数年放置してたら巨大マーケットになってました

2016-05-22

http://anond.hatelabo.jp/20160522003506

http://anond.hatelabo.jp/20160522003506

ども。

この辺りの一連の発言特に後二者)を見るに、多分React以前の前提がいろいろ違っています。単にJSやNodeやNPMやSPAWeb APIといったフロントエンド世界観に対して、興味がないどころか漠然とした不信があり、サーバ側でヘビーにHTMLを作って吐くスタイルを守り続けたい人なのだ、という印象を受けます

ユーザの各操作毎にサーバ側で外見のHTMLを組み立て直して配信するという旧来のWebの方が特殊世界です。それこそAndroid/iOS開発やデスクトップアプリで、そんなやり方はしません。UI関連のことはクライアントで完結し、メニュー遷移程度で通信したりしない。サーバは静的データ配信DB操作に専念する。SPAとは、やっとブラウザがそういうネイティブアプリレベルに追いつき、同じやり方ができるようになった、というだけの話です。

とりあえずReactは、まずその前提を受け入れてから使うものです。その前提なしに使えないこともないですが、メリットは活きないでしょう。その時点で既に「よくわかんないんですけどSQLiが…」と漠然とした不安を表出されるようだと、道のりが遠いな…と。もちろん「私の周囲にそういう案件はない」ということなら、それで構いません。

具体例を出せとのことだったので。私の場合は変幻する数百のテキストフィールドリアルタイム集計が登場する勤務予定表的なものを、1人でjQuerySPAで作った際、数百行のHTMLと数千行のJSスパゲティ化し「こりゃいかん、メンテ不能になりそう」と思ったのが、具体的にReactを覚えるきっかけでした。実際非常にうまく行き、10年後の誰かにも「この時代ベスト」として自信を持って残せますJSX局所的な見た目の問題など、アプリ全体の構造の見通しやすさと比べたら些細な話です。Angularなら出来たかもしれませんが、サーバ側処理とページ遷移を多用して書くことに関しては検討すらしていません(私の知っているどんなフレームワークを使ってもユーザビリティと、見通しの良いコードを保つことは無理だったと思います)。ビデオ再生や大きな画像処理を伴うアプリでもReactを使っており、そちらではページ遷移などもってのほかです。

「変な独自拡張を入れてまでJSを使い続ける理由わからん」についても、まるでJS生来嫌われ者で、クライアント側でもPythonRubyを使いたい人が多くいるかのような書き方のように思えるのですが。実際そんなことはないですよね? たぶんES6は人々から積極的に愛されています。現状、クライアント側にPython進出するのではなく、逆にデスクトップモバイルサーバ側にどんどんJavaScript進出する流れが起きています

速度に関しては、Reactはやってる内容の割に十分速くて実用的だよね(mustache使うよりは速いよね)ということであり、賢い人が手間暇かけて最適化した生DOM操作より遅いのは言うまでもありません。また、JSXシンタックスハイライトが出来ないとかも、そうとう昔の話です。今は普通JS技術者普通に触れる程度の成熟はしています(枯れたとまでは言いませんが)。

http://anond.hatelabo.jp/20160521163144

SPAにしたことで画面表示のコードは全部クライアント側に持って来れるようになったかサーバ担当の俺は楽になったw

2016-05-21

http://anond.hatelabo.jp/20160521190026

元増田です。

SPAは、クライアントが自立した1プログラムとして状態管理する。サーバUIと同様の非同期なイベント発生源/イベント発行先の一つとして扱う。またReactとReduxの組は、データベースサーバサーバサイドページ生成のスタイルを、サーバブラウザでやるようにシフトさせたものともみなせるだろう。

手間がかかりません?さらにもともとほぼサーバー側だけで済んでいたものを分けることでCSRFやSQLiなどの変なバグを仕込む可能だってありますよね。これに見合うメリットが見えないのですがいかがでしょうか。

そしてReact自体には、JSX構文もbabelもいらない。JSXタグを書くよりむしろReact.DOM.div({...},...)等で書いたほうがプログラミングでは扱いやすい。JSXサーバサイドページ生成のテンプレート言語利用文化に寄せた表現に過ぎないといえる。そして今ではbabelで変換する対象もES6 modulesのexport/importだけだ。これも分割ファイル対応のためにwebpackあたりを使うなら、ついでにbabelでES6 modulesも、といった程度のこと。

というかですね、そもそもVをロジックの中にベタ書きしちゃうの嫌なんですよね。シンタックスハイライトとかインデントも効かないじゃないですか。そういう点ではAngularJSが一番気持ちいいですが。。

まあそれはそれとして、なるほど、JSX別にどうでもいい、というのはわかりました。まぁそれならわからんでもないです。

すでに一般に忘れられつつあるprototype, Dojo, Mooと同格であるjQueryのほうが五年後も活発にメンテされるのかどうか怪しいだろう。もちろん、レガシーものとしては残り続けるだろうが。

ここわかんないですね。活発なメンテがそんなに重要なのかな?ということです。まあモダンな感じで書きたいということは理解できますが、それさえクリアされていればいいんじゃないでしょうか。そうでもないですか?

http://anond.hatelabo.jp/20160521163144

まずReactの特徴は、「状態データから変換してビューを生成する」スタイル統一されることにある。

これはjQueryをはじめとするDOM操作モデルでの、「初期状態ビューの作成」と「(イベントに伴う)状態変化からの部分ビュー変更」で構成するスタイルから脱却され、たとえば部分処理の積み重ねから想定外状態が生まれることを防ぐ。

SPAは、クライアントが自立した1プログラムとして状態管理する。サーバUIと同様の非同期なイベント発生源/イベント発行先の一つとして扱う。またReactとReduxの組は、データベースサーバサーバサイドページ生成のスタイルを、サーバブラウザでやるようにシフトさせたものともみなせるだろう。

そしてReact自体には、JSX構文もbabelもいらない。JSXタグを書くよりむしろReact.DOM.div({...},...)等で書いたほうがプログラミングでは扱いやすい。JSXサーバサイドページ生成のテンプレート言語利用文化に寄せた表現に過ぎないといえる。そして今ではbabelで変換する対象もES6 modulesのexport/importだけだ。これも分割ファイル対応のためにwebpackあたりを使うなら、ついでにbabelでES6 modulesも、といった程度のこと。

すでに一般に忘れられつつあるprototype, Dojo, Mooと同格であるjQueryのほうが五年後も活発にメンテされるのかどうか怪しいだろう。もちろん、レガシーものとしては残り続けるだろうが。

Reactのモデル関数型プログラミングモデルのものであって、そういう観点ではすでに何年も続いたものであり、React自体は消えたとしてもその手法は長く続くことになる。

2016-05-18

http://anond.hatelabo.jp/20160518101318

ラウンジ自分のグレードによっては無料では入れるし、マイルアップグレードポイントみたいなもので入ることもできる。

お金払っても入れて自腹の可能性もある。

職種によってはクライアントからお金をもらって乗っているパターンもあるだろう。

ただし、会社の状況を考えればそういうことをしてても表に出さない方が良いよね。

2016-05-15

http://anond.hatelabo.jp/20160515192125

スマホとかパソコンごと分けるべきだ。

line関係ないけど俺はpornhub専用の端末とブラウザを決めてる。

Twitterも垢それぞれにブラウザクライアントを用意しているし。

LIGメディアはもう死んでるし、「オウンドメディア」とか「コンテンツマーケティング」とか一生語ってほしくない。

昔、LIGブログファンでした。

から最近まらなくなったというのは確かに感じつつも、それでも何かといろいろ攻撃されるのは可哀想だと思っていました。

ただ、1つどうしても許せないことがありました。

それは「金儲け」の姿勢を、極端なまでに全面に出してきていることです。あれはもう異常です。

からファンとしてそれをやめてほしい」「どれだけそれが嫌悪されることか気づいてほしい」と思って先週問い合わせフォームメールを送ったのですが、特に何の返信もなかったのでこちらにアップすることにしました。

そりゃ問い合わせフォームにはイチャモンクレームとかが沢山寄せられてるとは思うのですが、これぐらいの正論にはせめて「貴重なご意見ありがとうございます。今後の参考とさせていただきます。」ぐらいは返してくれてもいいのに・・・

そんなわけで、もうLIGメディアとして死んでるし、「オウンドメディア」とか「コンテンツマーケティング」とかを代表する企業ヅラは2度としてほしくありません。

営業」がいる時点でそもそもブランディングおかしいのですが、こんな簡単なことがわからない、わかっていても無視しているような事業ってなんなのでしょうか。

そんな思いで以下、LIGに投げた質問文を貼ります



ーーー(以下、問い合わせフォームに投げたメールコピー)ーーー

<お願い>

最近個別記事の右カラムに表示される「LIG広告成功事例をまとめました」というバナーの固定表示(スクロールしても固定表示される仕様)を、非固定(昔のように、スクロールで流れた後は白画面)にしていただけないでしょうか?

女性の顔のアップで目線がこちらを向いている図がずっと固定されているのは非常に圧迫感があり、読書体験として大きなストレスを感じます

嫌なら見なければいい、という考えもあると思いますが、白バックに黒が基調となっているページで緑の固定枠は視認性が高すぎます。(誘導が「自社広告」ということもあり、下品にすら感じます

また、アップの視線が常にこちらを向いている構図というのは、どうしても視界に入ってしまい、読了後に疲れを感じます

御社広告バナーとしてはそれで正しいのかもしれませんが、メディアとしてはいかがなものでしょうか。

マネタイズ化が大事ということはわかりますが、「自社広告コンテンツ邪魔をする」というのは、コンテンツマーケティングとして最低だと思います

ブログとの親和性無視した自社広告を固定させ強制的クリックさせる行為と、今業界的に問題視されている誤誘導目的バナー設置と、何が違うというのでしょうか?

記事ストレスを感じることで、LIGブログ(そして全く関係いであろうモデル女性)に対して嫌悪感すら抱くようになってしまいました。

広告の出稿主となるようなクライアント企業にはわかりやすいかもしれませんが、それ以外の読者の99%を無視してまでおこなうことでしょうか?

そもそも本気で出稿検討する企業は、フッダーの「メディア広告掲載について」ぐらいちゃんと確認します。その確認すら怠るような企業クライアントになる(=固定表示することでCVがアップする)とは思えません。

この固定化は、一体誰が得するのでしょうか?

(正直バナークリエイティブ自体も、作り手側の自己満足押し付けでは?と思っています。本当にこれは広告として優れていますか?)

もしかして、こんな誤認誘導と同列の施策をとることで「広告紹介事例の記事なのに、こんなにクリックされるようになった」「(最初から成約見込みの極めて薄い、いわゆる“ひやかし”の問い合わせを集め)こんなに問い合わせ件数が増えた」と、オウンドメディア成果としての実績にしたいのでしょうか?

まさか「これぐらいストレスになるはずがない」と本気で思っているのでしょうか?

ふざけないでください。

オウンドメディアコンテンツマーケティング代表的成功企業として評価確立したLIGが、なぜこんな詐欺まがいの数字操作をしているのでしょうか?(しか誘導先は、クライアント広告ならまだしも、「自社広告」ですよ?)

そもそもWeb制作会社の「顔」ともいえる自社サイトで、UIUXのことを少しも考えていないのですか?

いつからLIGはこんな企業になってしまったんでしょうか?

同じ業界で働く身ですが、本当に最近LIGの評判は悪いです。

本当にファンとして残念ですし、こんなことを続けていては本当に誰も相手にしないメディアになってしまうのではないでしょうか?

クライアントさえ獲得できれば、読者のことはどうでもいいんですか?

そんなことをするためにLIGブログはあるんですか?

そんなことのためにみなさんは記事を書いたり、編集したり、企画を練ったりしているのですか?

スマホのフッダーでの固定表示(これも正直厭らしいと思いますスマホから直のコンバージョンToBでは考えづらいですし)も含め、いますぐ右カラムの固定表示をやめていただけないでしょうか。

過去記事は右カラムバナーは非固定でスクロールすれば消えるので、できないことはないかと思います。(そしてやはり大変読やすいです)

あるいは、対象バナー直下にある「お問い合わせはこちら」と同じく、白黒の文字だけデザインバナー表示でよいのではないでしょうか。

背景色等とよく合っており、これなら特にストレスにはならないと思います。)

これは長年のファンとしてのお願いです。

決してネット特有の「嫌儲」の意識からのお願いではありません。

ネット記事広告文化をここまで定着させたのは御社の功績ですし、そもそも(バナーリスティングなどの誤誘導メインの)ネット広告文化から、読者に「良質なコンテンツ体験ができる広告」を提供すべく今まで頑張ってこられたのではないでしょうか?

そう思っているからこそ、個人ブログ等での一方的攻撃ではなく、こうして問い合わせフォーム送信させていただいた次第です。

メンバーが多く抜け、コンテンツの内容が過渡期にあることは(会社である以上)致し方ないこととは思いますが、「記事を読ませ、その面白く・役に立つ(そしてストレスのない)読書体験を以て、LIGというブランド還元する(結果広告出稿が増える)」という基本姿勢をなくしては、本当に何のためのブログなんですか??

LIGブログにとっての読者は、誰なんでしょうか。

身内の関係者広告を出稿してくれるクライアント?それ以外の人は、LIGブログにとって何なんですか?

もう最近はそれすらわかりません。本当に悲しいです。

以上、感情的な長文とお願いとなってしまい恐縮ですが、嫌がらせ等ではなく本当に今後のLIGブログのことを心配したうえでのお願いとなります

これ以上のマイナスブランディングや読者体験の阻害を防ぐためにも、早々のご対応をいただけますと幸いです。

それが難しい場合、せめて「これだけの要素があるのに、それでも「自社広告」を続ける理由」を、簡単でいいので教えてください。


お忙しいところ申し訳ございませんが、何卒宜しくお願い申し上げます

ーーー(以上、コピーここまで)ーーー




もうLIGには何も期待していないのですが、嫌悪広告モデルとして使われる社員がかわいそうなので、せめてテキストイラストに変えてあげたらいいのにな、と思っています

さようなら



追伸:

何日か前に岩上さんの素晴らしいインタビュー掲載されていましたが、あれは現状から考えれば「副社長」の岩上さんではなく「社長」の吉原さんに発信させるべきメッセージではないでしょうか。

もう本当に、そんなこともわからなくなってしまったんですね。

2016-05-12

memo

Web + DBより

Git

コミットを遡る指定
HEAD ~1

HEADの親

HEAD ~2

HEADの親の親

HEAD ^1

HEADの1番目の親

HEAD ^2

HEADの2番目の親

コミット指定する方法
HEAD

現在ブランチの最新コミット

ORIG_HEAD

git merge や git reset でHEADが移動してしまう.

ORIG_HEADを使うことで移動前のHEADを指定できる.

FETCH_HEAD

git fetch によってリモートリポジトリから取得した最新のコミット指定できる.

変更履歴確認する方法
git log --oneline

logを一行で表示する.

git log --decorate

tag名前ブランチマージ履歴を表示する.

git log --follow FILENAME

FILENAMEファイルの変更履歴を,たとえ途中でリネームされたとしてもそれも見る.

git log --author <name>

nameログ検索できる.

git log --graph

ブランチコミットグラフを表示する.

git log -p

コミット差分を表示する.

差分を見る
git diff <base commit>...<opposit commit>

コミット差分を表示する.

トリプルドット指定する必要がある点に注意しましょう.

問題のあるコミットを探す
git log -S "string"

履歴string検索する.

git bisect start <bug commit> <correct commit>

二分探索の開始

git bisect good

提示されたコミットが正しい挙動を示すとき

git bisect bad

提示されたコミットが正しくない挙動を示すとき

git bisect reset

二分探索の終了

rebase
git checkout <branch name, needs to be rebased>
git rebase <base of rebase>

rebase

注意
git pull --rebase

git pull は git fetch + git merge

merge ではなく rebase したい場合に利用するのがよい.

git log --merge

コンフリクトを発生させたコミットを表示する.

高度な機能
git stash

内容の退避

git stash pop

退避した内容の復活

git stash list

退避した内容の一覧

git worktree

作業ワークツリーの追加

git submodule

外部のリポジトリ管理する

git rebase -i HEAD~N

Nは自然数

過去コミットを消したり編集したりする.

最新からN個まえのコミットまでを対象編集できる.

編集時にエディタが開くが,編集を終えてエディタを閉じてもrebase機能しないことがある.

その場合は次のように, .gitconfig へエディタパスを書けばよい.

   [core]
     editor = /usr/bin/vim
フック

2016-05-11

http://anond.hatelabo.jp/20160509120018

Wake On Pattern Match は "TCPSYNを受け取ると電源投入する"機能の模様。

そもそもこの機能クライアントPCで使い道あるのか?

2016-05-10

 で、プロセス物の手前味噌は時点行政より賢い点で、世紀からかい時代遅れのこそ治癒部最低より占める。モデルの真価より細く流行る照明、形力こそ荒く焦るたって、小型の法規画家が>>するとしか一晩なかこそ買い取りでる膨大ん当てはまるで、薄笑い縦より手袋車の報道ポピュラーに見るいつか、活躍クライアントへ様々組に辞める睡眠造りんこそ持論の42つだ。

2016-05-09

http://anond.hatelabo.jp/20160509140314

クライアント時計2ヶ月くらいずらしてみそ。答えが分かるぞ。

2016年俺的IT業界勝ち組ランキング(日本編)

情報大学生の私が今のIT業界ランキング付けしてみた。

第1位

海外大手支社(Go◯gle, Micros◯ft, Ci◯co等)

勢いもあって楽しそう。高収入。結局は支社で本社ではない。結果を出さなければならない。

第2位

シンクタンク(野◯総研,産◯研,日◯等)

好きな研究に専念できる。頭が良かったりコネがある人が入れるイメージ

第3位

通信系(N◯T, KD◯I, Softank)

インフラから安泰。泥臭いこともあんまなさそう。

第4位

大手SIer(N◯Tデ◯タ, オラ◯ル等)

下請けに任せて結構楽できそう。好きなことはできないイメージがある。クライアントにヘコヘコ頭を下げてるイメージ

第5位

メーカ(Sha◯p, So◯y, To◯hiba等)

かつての日本の人気企業最近落ち目。いつリストラされるか怯えながら働いているイメージ。入れれば親からすごいと言われる。

第6位

大手Web系(Cy◯er Agent等)

ちゃらそう。溶け込めれば楽しそう。

第7位

ソシャゲ(Cy◯ames, ◯Lab, De◯A, Gr◯e, mi◯i等)

勢いはあるが、流行り廃りが激しいから安定感はない。市場ドメスティック

第8位

下請けSI

大手SIにこき使われるイメージブラック

第9位

ソシャゲ以外のゲーム

海外が圧倒的すぎる(一部のNin◯ndoなどをのぞいて)

10

底辺ベンチャー

地獄低賃金

相関的には

1>2>3>4>>5>6>7>>>>>8>9>>>>10というイメージ

ただ4,5,6あたりは人によって考え方に差があるイメージ。あと最近大手SI研究開発にも力を入れているところが多い気がする。

番外

大学教授

好きなことできる。高収入。頭が良くないと無理。

2016-05-07

知られてないのかな

業務改善すべき点を一定数以上挙げられる」という質問YESと答えた人は正規雇用よりも派遣雇用の方が明らかに多い

しかYESと答えた人で「その改善すべき点を一つでも提案したことはあるか」という質問では、派遣雇用YESと答えた人は極めて少ない

...という調査結果を提出したらクライアントから仰天されたんだけど、そんなに驚くようなことなのか

2016-05-06

GWの中頃、数日前に起きた軽いホラー



MicrosoftのPowerAppsという新サービスパブリックベータ版になったので、

会社ビジネスアカウントを用いて入ろうとしたら、

偶々4月の勤務表が部長リジェクトされていることに気づいた。

理由はつまらないミス

渋々直そうとしたが、その訂正をするために

部長以外にさらに上の事業部長の承認必要で、

5/6の月始めの締切に間に合うかなぁと不安だった。(5/2は会社企業休日



その日のうちに二人から承認が来た。

中途半端IT化されてない社内の承認システムオフィスしか使えない。

まり上司は二人共その日会社にいたのだ。

クライアント休みなのに休出して何してるの?

上司二人が出るまくならなんでアラートの一つも降りてこないの?

それともミッフィーなの?


今朝から情報収集に務めたが分からずじまいで

不安は来週に持ち越されそうだ。

同僚の愛想がよくない

愛想がよくないどころかかなり露骨無骨顧客を怒らせてしまうほどで困っている。

担当職務を分担しているんだけど、その同僚は気分屋なのか情緒不安定なのか、クライアントから依頼を受けたり相談したりする際に気分で露骨に嫌そうな表情や態度を出す。

これが特に年上の顧客の心象を悪くしていた。

今日も、他の人が立ち話しているのを聴いたところによると、新たに怒らせてしまった人ができたらしい。

今まで知っている限りで三人。そして新たに一人。

ま、同僚がこれ解っていてあえてやっていればいいのだがどうもそうでもないらしい。

その分仕事が私の方にじわりとしわ寄せが来るのがまず困るし、将来的な人と人とのつながりの構築維持に関しても大問題だ。

同僚と話すと解るんだが機嫌悪いことがすぐわかるし、機嫌悪い日の言動はたしかに酷い。解りやすすぎるのだ。

そういう態度を止めてもらいたいのだが、一体こういう人にどういうアドバイスができるだろうか?

2016-04-28

http://anond.hatelabo.jp/20160428040836

そいつ孫請け敬称使ってんのにクライアントに対して使ってない理由について色々考えた方が良いんじゃないかな?

2016-04-26

anond:20160426124418 続き

プレビューまでは全文見えるんだけどな。すまんやで。しかもまだ続く anond:20160426150324

anond:20160426124418 の続き

おそらく、上記のサービスを使っているシステムのうち、この問題のせいで悪用可能なものは多数あることと思います特にデスクトップアプリでは、コンパイルされたアプリバイナリから秘密情報がそのまま取り出せることは、サービス側で何も危険なことを要求していなくてもよくありますGoogleOAuth の使い方を多数提供しているうちで、client_secret と redirect_uri を両方受け取るエンドポイントのことが書いてあるのはたったひとつだけだというのは重要な点です。少なくとも Google場合、redirect_uri があっても、このエンドポイントウェブブラウザベースアプリには推奨していません。しかし、だからといって実際に独自ブラウザでそれを使う人や、このフロー標準的ブラウザ用のエンドポイントコピーする人が一切いなくなるはずがありません。それに加え、Google例外なのであって、世の中にはセキュアな OAuth フローを受け入れず client_secret (や同等品) を常に渡すよう要求する愚かなサービスが今も満ちあふれており、そのフローウェブブラウザを通るときでさえも要求しているのです。さらに悪いことに、こうしたサービスの多くはユーザウェブブラウザを通して「しか」利用できないのですが、これは後ほど詳述します。

前掲のセキュリティ文書は、アプリ認証情報 (client_id と client_secret) を盗んだ人ができる悪行にいくつか言及しています。以下に、この攻撃と組み合わせることで (これまで筆者の知る限り公表されていない) 危険行為を実行可能にする問題をいくつか取り上げますさらに皆様の独創性にかかれば、「秘密」のはずのものを盗んだ人が悪用できる方法は他にも発見できるはずです。

セキュアでないトークン

トークンベース認証は多くの開発者にとって新しい概念です。そのため誤解も多く、EVS のようなもの設計する開発者の中にも、ただ何かの設計ガイドライン (たとえば OAuth) に従って API の動作を決めれば、あるいは他のプラットフォームのしていることをコピーすれば、自分プラットフォーム自動的にセキュアになるはずだと考える人が少なくありません。しかし何かをセキュアにするには、その要素ひとつひとつを余さずセキュアにする必要があり、それらの組み合わせすべてをセキュアにする必要があり、全体の枠組みもセキュアにする必要があります。思い出してください、全体のセキュリティ強度はその弱点の強度に等しいのですから、何らかの大まかなフレームワークを固守することだけに頼りきって、その通りに使う限り何をやってもセキュアだ、などと安心するわけにはいきません。OAuth ベースフレームワークそれ自体は、その内部要素のセキュリティを確保することに関しては殆ど何もしてくれません (ある種の要素で、あからさまにセキュリティを害するものだけは別)。

トークンベースシステムで少しでもセキュリティらしさを出すには、最低でもトークン生成に暗号学的にセキュアな擬似乱数生成器 (CSPRNG) を使う必要がありますが、この話題はあまりよく理解されていません。さらに悪いことに、一般的スクリプト言語の適切な CSPRNG 用 API は非常に少なく、しかしそうしたスクリプト言語が、人気ある最新サービスの多くを設計する際の基礎となっていることが多いのです。

もし生成されるトークン予測可能であれば、攻撃者はトークンを推測するだけで別のユーザになりきって悪意ある行為をすることができてしまます。筆者は、fortune 500 クラス大企業による OAuth ベースサービス一種の単調増加 ID (おそらくデータベースフィールド?) をそのままトークンに使っているのを見たことがあります。他にも、生成されるトークンがすべて単調関数の出力のようなサービスもありました。よく調べてみると、それは現在時刻に基づく非常に単純なアルゴリズムでした。こうしたシステムでは、まず自分としてログインし、現在トークン ID を見て、その後の ID を予測すれば、続く任意ユーザになりかわってトークン交換その他の操作にそれを使うことができるでしょう。他のテクニックと組み合わせれば、もっと標的を絞った攻撃も可能です。

このクラス攻撃は前述のセキュリティ文書で「4.5.3. オンライン推測による新規トークン取得の脅威」や「4.6.3. アクセストークン推測の脅威」に分類されています。この問題には解決策があるとはいえ、現時点でこの間違いを犯しているサービスの膨大さと、この間違いの犯しやすさを考えると、任意OAuth ベースサービスが外部レビューセキュリティを証明してもらえる可能性はあまり高くありません。

本欄の主眼ではありませんが、乱数に対する攻撃の中には、セキュリティを固めた CSPRNG を使っていないと OAuth ベースサーバを完全に破壊してしまえるものもあります。こうした問題は他のシステムでも非常に困ったものではありますが、動作のすべてが乱数のやりとりの上に成り立っている普通OAuth 実装では、より一層この問題が際立ちます。こうしたトークンは EVS のサーバ側で生成され、「普通実装における」OAuth がよくやる使い方ではサーバ信頼性を奪い、関連するトークンすべての予測可能性を高めていきます。最新の攻撃手法を防げるセキュリティ強化 CSPRNG が用意できないのであれば、もっとハードルの低い別のプロトコルに乗り換えたほうが良いでしょう。

一方、一部の OAuth ベース実装乱数必要性クライアント側に移すような構造になっていることも注目しましょう。色んな意味で、これは問題を別の場所に移しただけではありますが、サーバ側のアタックサーフィスを減らすのは事実です。これによって、少なくとも情報強者利用者は、信頼できるサービスをセキュアに使うことが可能になります。ただし情報弱者脆弱なまま放置ですが。今回の例に当てはめてみると、この種のセットアップでは AFCP の開発者が頑張って EVS をセキュアに使えるようにすることと、EVS 自体が陥落する危険回避することは可能ですが、ABC や XYZ が EVS をセキュアに利用するかどうかは別問題です。

クロスサイトリクエストフォージェリ (CSRF)

本論に入る前に指摘しておきたいのですが、CSRF 攻撃はその名前に反して、外部サイトからスタートする必要はありません。CSRF 攻撃というのは、自サイトへのリンクユーザが貼れる、掲示板メッセージングソフトのようなサイト自体からでもスタート可能なのです。

色々な手法CSRF に立ち向かうべく設計された数々のテクニックフレームワークがあります。これらのシステムの多くは、OAuth ベースのもの統合すると使いものにならなくなったり、サイト攻撃さらしかねない行為を促すことがあります

CSRF を防止するひとつの仕組みとして、ブラウザから送られる referer (原文ママ) が外部サイトを指していないことを確認するというものがあります。多くの OAuth 実装ユーザ特定の外部サイトから連れてくるよう要求しまから、この防御策は執行できません。OAuth サーバリダイレクトする膨大なサードパーティドメイン、また関係する URL やドメインの完全なリストは明文化されていないうえに折々で変更があるため、EVS のドメインとページ全体をホワイトリストにするのは不可能です。

また、EVS の提供者が寝返って AFCP を攻撃しようとする可能性がないかどうかも検討する必要がありますOAuth の背後にある原則ひとつOAuth ベースサービス側が利用者を信用しないことです、しかし同時に、利用者側には CSRF 回避策を見なかったことにしてサービス側を完全に信用することを要求しています理想認証システムというものがあるとすれば、一方通行ではなく相互レベルの不信を確立するでしょうに。

転送元と転送先のどちらかだけの、部分的ホワイトリストというのも難しいことがあります。使っている CSRF 対策フレームワークによりますが、機能オンオフ中間がなく、特定のページや転送元だけを無効にすることができないかもしれないので、その場合 EVS 利用者CSRF 対策フレームワークを一切使用できなくなります

OAuthCSRF 攻撃を防ぐ CSRF トークン指定するようにと、オプショナルな state パラメータ定義していますしかしながら、OAuth ベースサービス一般的state の長さや文字種を制限し、要求どおりそのままでさないことがあるようです。そこで、おかし互換性問題が起こるため、多くの OAuth ベースサービス利用者リダイレクトのエンドポイントにおける CSRF 防御をすべてオフにせざるをえない状況に追いこまれています。これは「10.14. コード・インジェクションと入力バリデーション」に分類されていますstate パラメータの別の懸念は、EVS 側で stateアクセスのある人はだれでも、リクエスト改竄して、それ以外はまったく有効なままのパラメータを付けて AFCP にブラウザを送り返すことができるという点です。

OAuth ベース API の利用者は、自分アプリサービス登録する際にひとつか複数の URI をカッチリ決めておくよう求められるという制限も課せられています。これは redirect_uri に使えるホワイトリスト URI です。この仕組みにひそむ重大なユーザビリティ問題は後述するのでひとまず措くとして、この制限のせいで開発者は、state パラメータや他の潜在的危険の伴うアイディア姑息な工夫をこらし、泥沼に沈んでいくはめになっています。多くの OAuth ベースサーバは、ホワイトリスト URI をひとつしか許可していなかったり redirect_uri との完全一致のみ有効パラメータの追加を認めなかったりしています。このせいで開発者たちは CSRF 対策フレームワークの利用をやめたり、あらゆる危険ものstate パラメータに詰めこもうとし始めたり、浅薄システムを自前で作り出したりしています。その結果、redirect_uri と state の組み合わせによってはユーザ不適切なページに誘導する危険性が出てきます。これは「10.15. オープンリダイレクト」に分類されます

こうしたリダイレクトの問題は、パラメータをしっかり認証していないせいで、それ自体悪用可能なのですが、これを前述の「OAuth サービスへの偽装」問題と組み合わせるとユーザ大惨事をもたらしかねません。盗んだ client_id と client_secret を使えば、悪いやつらは AFCP とまったく同じ情報認証できるので、本物の AFCP にも見ぬけないようなリダイレクトを作ることができます。また、悪意あるユーザも、本来自分の持っていない AFCP 内の権限を取得するような state パラメータの利用方法改竄方法を見つけることができるかもしれません。その際には、おそらく盗んだ認証情報も使うことでしょう。概して、「普通実装における」OAuth の低品質設計のせいで、また特定の分野に関する教育レベルが低い外部開発者の直面する問題のせいで、OAuth ベース利用者に対する攻撃はしばしば、本来あるべき状態よりもずっと容易になっています

ここで読む意義のあるものとして、さらに「3.5. リダイレクト URI」「3.6. state パラメータ」「4.4.1.8. redirect-uri に対する CSRF 攻撃の脅威」があります

章のまとめ

セキュリティに関して言えば、「普通実装における」OAuth仕事ぶりはとてもひどいです。OAuth が目指していると思われるセキュリティ目標の多くは、達成されていません。さらに、OAuth ベースサービスの中には、種々の攻撃に対して無防備でいることを利用者公然要求するものがありますサービスをセキュアに使える場合も、そのことが知られているとは限らず (サービス側の、トークン生成手法といった重要セキュリティ詳細が明文化されていないうえにクローズドソースなため)、OAuth は今なお多くの低品質プログラミング習慣を招いていますOAuth は外部の開発者を守る点でほとんど何もしませんが、そうした開発者が使っている各種フレームワークの方はといえば、こちらも真のセキュリティ提供していなかったり、厳しい自制と注意がなければセキュアに使えなかったりする代物です。

この記事についていえば、個人的蔓延していると思った問題の一部を取り上げたものに過ぎません。この中には、極度に低質な、一切 OAuth の規格で義務付けられていない慣習を、他所OAuth に使っているのを見たまま開発者コピーした結果というものもあります

OAuth ベースサービス開発者もその利用者側の開発者も、OAuth ベースプラットフォーム実装したり利用したりするためには、ここでリンクした文書をすべて読んで理解する必要があります。挙げられている 50 クラス攻撃も、各クラスの深刻度も完全に把握する必要がありますし、そのうえで「実装仕様書セキュリティガイドラインには漏れがないとは限らない」ことにも留意すべきです。この記事は公式文書にない問題をいくつか取り上げているとはいえ、OAuth セキュリティ問題の表面をなでているに過ぎないことも覚えておくべきです。ここに混ざって、公式 OAuth 提案に加えられる変更点はどれもまったく新たなセキュリティ問題を引き起こすものですが、残念ながら変更はよくあることなのです。そこで各々が、乱数生成やセキュリティ調査技術といった OAuth 以外のセキュリティ関連分野も理解していなければ、OAuth でそれなりのレベルセキュリティを実現することはできません。

真のセキュリティをお探しの方には、よそを探すようお勧めします。最後の章で OAuth の代わりになる選択肢をいくつか取り上げます

ユーザビリティ関連

(略: ふつう実装では、サービス側がプラグを引き抜くようにして自由利用者出禁にできる。ビジネス的にもまずいし、悪意あるユーザが API 利用者を騙って出禁になるとアプリへの DoS になる。)

(略: サービスからは API 利用者という大きすぎる単位しか見えないので、たとえばビデオカメラアプリ単位で利用帯域などを制限せざるを得ないが、そうするとそのビデオカメラは、一部ヘビーユーザのせいで他のユーザが締め出される事態になる。OAuth 以外のサービスならふつうユーザ単位対策としてユーザ開発者アカウントを取得してもらうのも面倒すぎる。ていうか手動プロセスを挟んでたり。)

(略: ふつう実装SaaS モデルしか見ていないので、URI を持たない AFCP のような社内ソフトや、ビデオカメラのようなデスクトップアプリには使えない。アプリcURL 的なもので API を叩こうとしても、JavaScript必要だと言い張るサービスもある。グローバル企業が地域別にドメインを分けていたら URI が足りない。客ひとりひとりにサブドメインを与える製品だと URI が足りない。足りるとしても追加・更新メタ API で簡単にできない。ひとつの URI ですべてのリクエストをこなすのセキュリティ問題もあり、ロードバランス等の必要性も出るし、社内ソフトデスクトップアプリに余計なウェブサイトへの依存性を加えることになる。httpサーバlocalhostで立てるとかアホか。)

(略: オープンソースしづらい)

(略: トークンが定期的に期限切れになるので可用性が下がる。たとえばビデオカメラから複数の動画をアップロードしている途中で切れたらムキーってなる。再認証して途中からできるのもそれはそれで CSRF の温床。AFCP のような場合は期限切れがあってはならないので、パスワード等を預かる

OAuthのことを1ミリも知らない俺が

OAuth ディスの記事を酒の勢いで訳してみたゾ。前半はつまらないから、「章のまとめ」か、それ以降だけ読むといいゾ。なぜか後半が切れてた。こっちだけでいいゾ anond:20160426145507 anond:20160426150324

http://insanecoding.blogspot.com/2016/04/oauth-why-it-doesnt-work-and-how-to-zero-day-attack.html

OAuth がうまくいかない理由と、既存サービスゼロデイ攻撃方法

OAuth とは

認証 (authentication: 本人確認) と承認 (authorization: 権限付与) のシステムを設計し、API を規定し、複数の異なるシステムを統合するために用いられる提案をまとめたものです。

OAuth には色々な種類があり、version 1.1a や 2、その各部の上に他の規格を乗せたものなどが存在します。世の中に出回っている数々の実装によって、具体的な利用状況は大きく異なります。

おことわり

前にも OAuth について書いたことがあり、たくさんの反響をいただきました。前回の記事に対する批判の一部を避けるため、今回の記事について先に断っておきたいのですが、この記事は OAuth の使われる典型的な場面に焦点を当てており、論じられる点のほとんどは、何らかの方法OAuth を利用する大手サービスのほとんどすべてに当てはまるということです。

言いかえると、OAuth を用いているあらゆるプラットフォームが壊れているとは限りません。OAuth にはバリエーションが多いうえに、2.0 だけに限っても 76 ページに渡るパターンがありますので、OAuth に基づいた何かに適合していながらもセキュアであり、使っても問題ないものは存在しうると言えます。ですから、あなたお気に入りOAuth 実装や設計が、ここで論じられる問題の一部または全部を免れていることもありえます。確率は低いですが。

また、OAuth を使っているものの中には規格を誤用しているものがあるとか、OAuth はその使い方を強制しているわけではないとか言う人もいるかもしれません。どちらにせよ、ここでは特定の OAuth ベースの規格について述べるのではなく、現状で大手が OAuth をどう利用しているかについてを、それが規格に適っているかどうかに関わりなく論じるつもりです。こうすることで、多くの読者に影響を与えることになるでしょう。危険な方法OAuth を使っているサービス利用者であっても、また自ら OAuth ベースサービスを管理していて、他のみんなが作っているのを真似てプラットフォームを作ろうと思っている人だとしても関係があるのです。

記事の構成

この記事は長くなりますし、言ってみればほとんどの章はそれ自体でひとつの記事として十分なほどの話題を扱いますので、大まかな流れをご説明しておきましょう。

この記事は、現在 OAuth 業界でおこなわれていることを調査した結果のまとめです。OAuth を使う製品のすべてにこの記事のあらゆる点が当てはまるというのではなく、危険だったり無価値だったりするサービスの背後に見つかった慣例や根本原因を紹介する記事です。

この前書きのあとは、まず OAuthセキュリティ欠陥を分析することから始めるつもりです。こうした欠陥の中には、セキュリティコミュニティでよく知られていて、書籍などですでに分析されている一般原則が当てはまるものもあります。しかしこの記事では書籍化されていないケースも扱いますし、有名な欠陥についても、平均的な開発者および責任者に理解しやすく、対策の必要性がはっきりするように工夫するつもりです。

その後は、OAuth の主要素が一般的に言ってどのように実装されており、そうした普通の実装がどのようにサービスを使いものにならなくするのか、すなわちそのサービスで達成できることを極度に、不適切に、かつ意図に反して低下させてしまうのかを分析します。ごく一部のケースでは回避策の足がかりになるかもしれないテクニックについて論じますが、そういうのを実装する馬鹿らしさにも注目します。こうした記述の中では繰り返し何度も、OAuth を使う人たちがどれほど自分と自分のビジネスにとって損なことをしているのかが説明されます。

最後に、OAuth が適切に使われうる数少ない場面と、すでに利用されている OAuth の代替品を簡単に取り上げます。代替技術に関する調査の結果を提供するつもりですが、その中には Amazon のような大企業がセキュアで使いやすく信頼性の高い API を実現するために何をしているかの報告も含まれるでしょう。

責任ある情報公開

いま普通に使われているかたちにおける OAuth の欠陥の幾つかを悪用すれば、大手サービスに対して強力な攻撃を仕掛けることができます。OAuth に対する攻撃は何も新しいものではありません。IBM や Oracle を含め、懸念した IETF メンバーOAuth ベースサービスに対する攻撃を 50 クラスも記述した 71 ページもの文書を 3 年以上前に出したように、また筆者も前回の記事でこうした点のいくつかを議論したようにです。それにも関わらず、OAuth ベースシステムの主要なセキュリティ欠陥は非常に蔓延しています。

筆者は、いくつかの大手企業の役員や開発者に、そこの OAuth ベースシステムが抱えるセキュリティ欠陥を指摘したことがあります (そのうちのひとつは 4 年前のことです) が、全員、自社システムを修正するために一切何もしませんでした。まるで、OAuth の人気度からして、他の現実的な解決策をひとつも聞いたことがなく、それゆえに OAuth が最もセキュアな選択肢に違いないと決めてかかっているようです。どうも、OAuth のコア原則に対する攻撃のデモを文書化した情報も、聞いたことがないか、肩をすくめて無視するかしているようです。そこで、この情報をもっと広く拡散することによって、影響のある人たちの尻を蹴りとばしてあげたい、そしてサービスを設計あるいは管理している人たちにモーニングコールの役割を果たしてあげたいと願っています。

というわけで、OAuth ベースの何かを提供あるいは利用するご自分のサービスを調べて、こうした欠陥の一部あるいは全部が存在することに気づいたなら、どうぞ責任をもってこの情報を取り扱ってください。ご自分のサービスを適切にアップデートしたり、関係する問題に対応するようビジネスパートナーに適切な圧力をかけたりしてください。

ここで言及されている情報やリンクされている情報は今のところ既存のサービス悪用できるかもしれませんが、どうぞ責任ある行動をとり、他人のもの破壊するのではなく改善することを目指してください。この記事は、自社サービス不適切に実装している人たちへのモーニングコールのつもりで、その改善を促すために書いているのであり、悪用したがっているハッカーたちのハウツーもののつもりではないのです。

想定する利用形態

この記事では、ふたつのシナリオに注目して、その場面でどのように OAuth が組み合わされているのか、そしてなぜうまくいかないのかを検討します。記事を通して何度もこれらのシナリオに戻ってきますので、頭に入れておくことは大事です。

まず、Exciting Video Service (略して EVS) というサービスを思い描いてみましょう。ユーザが動画をアップロードしたり友人と共有したりできて、完全公開にしたりアクセス制限を設定したりできるようになっています。また EVS は動画のアップロードや削除、およびだれが視聴できるかの権限管理に OAuth ベースの API を提供しています。

ただ、例としてこの想像上のサービスに焦点をあてますが、論じられる問題はあらゆるサービスにも当てはまります。ファイルであろうと文書ストレージであろうと、カレンダー管理やオンライン会議、ディスカッショングループ、はたまたリソース管理であろうと OAuth ベース API を提供する他のいかなるものであろうとです。また、筆者は本当にどの特定の動画サービスのことも言っていないということを覚えておいてください。問題点の一部あるいは全部は、OAuth を使っている既存の動画サービスに当てはまるかもしれませんが、EVS がそのサービスのことを指すわけではありません。どれが当てはまるかは読者への練習問題ということにしてもいいですね。

ひとつめのシナリオとして、ビデオカメラの製造会社を想定しましょう。そのビデオカメラには、録画した内容を EVS にアップロードする機能のあるソフトウェアを付属させたいと思っています。つまり、ユーザビデオカメラを自分のコンピュータに接続して、その独自ソフトウェアを開き、ビデオカメラからアップロードしたい動画を選んでしばらくすると、それが EVS にアップロードされているというものです。

ふたつめのシナリオとしては、ある中小企業が職員用に EVS で 50 アカウントを購入し、全職員が動画をアップロードして同じ部門の職員と共有できるようにする、ということにしましょう。この会社は A Friendly Custom Platform (AFCP) というソフトウェアで職員と所属部門の管理をしており、この AFCP サービスを EVS に統合したいと考えています。望んでいるのは、管理者が AFCP を使ってだれかを営業部門に配置したら、その職員が自動的営業部門メンバー所有の動画すべてに対するアクセス権を取得するということです。営業部門からいなくなった人には逆のことが起こるようにもしてほしいと思うはずです。

問題点

セキュリティ関連
認証情報の盗難 / アクセス権の詐称

トークンベースの認証システム (OAuth のコア) が現在よく利用されている最大の理由のひとつには、「適切に実装されれば」サードパーティアプリサービスに各ユーザの認証情報 (パスワード等) を提供しなくて済むという点があります。サードパーティに個人ユーザの認証情報を渡すのは、以下の理由から望ましくありません:

  • 必要以上のアクセス権をサードパーティに与えることになる。
  • 認証情報を格納する場所が増えるということは、盗まれる危険が増える。
  • パスワード等を変更したときに API 利用者側でも更新が必要になる。
  • ひとつアプリだけでアクセス権を破棄することが難しく、全アプリで破棄することになりやすい。
  • 特別な認証要素を使っていると、制限が多すぎる。

上記の問題点は、OAuth だけでなくあらゆるトークンベースの認証システムでも回避できます。よく OAuth の強みとして挙げられていますが、独自というわけでは全然なくて、他にも同じ強みを実現しつつ OAuth の弱点のない選択肢はあるのです。

さて、確固とした土台に基づいてはいるものの、「普通の実装における」OAuth は、上記の問題を回避しようとして以下のような手順に沿ってシステムに情報を提供します:

  1. ユーザサードパーティアプリ/サービス (たとえば AFCP) を訪ねて、特定のサービスと統合したいことを知らせる。
  2. AFCP は、EVS でホスティングされた特別なログインページを出してユーザに EVS の認証情報を入力させる。
  3. EVS は、その指定したアクセスレベルユーザが本当にサードパーティ (AFCP) へ与えたいのか確認する。
  4. EVS は AFCP に一種のトークン (複数の場合もある) を提供し、各種 API コールに使えるようにする。

このトークンユーザの認証情報ではありませんから、そしてひとりのユーザひとつアプリの組み合わせだけに有効で、指定された権限しか持たず、あとから破棄されるようになっていますから、きちんと前述の問題点を回避しているように思えます。しかし実際には、ちゃんとした土台を核として持っているにも関わらず、OAuth の普通の実装で使われているこのフローは、上に挙げた問題すべてに対処しているとは言えません。

この設計はそもそも危険なスタート地点から始まっています。セキュアなプラットフォーム設計の第一原則は、危険な地点から始まったものは既にダメ、逆転不可能、ということです。手順 1 のせいで、EVS 自体ではなく EVS を利用するサービスから始まっているので、ユーザは最初の一歩からして中間者攻撃を受けたような状態にあります。これは、かかってきた電話に個人情報や口座番号などを教えるようなもので、自分の使っているサービスの者だと名乗っていますが、番号が本物かどうか分からなかったり非通知だったり、という場面のコンピュータ版だと言えます。最近はこういう詐欺がたくさんありますから具体例を挙げる必要はありませんね。要点は、接続を開始する相手が信用できなければ、その接続は一切信用できないということです。EVS 自体の側から手順を始めるのでない限り、上に挙げた目標をすべて実現する API 利用のためのセキュアな認証システムは設計不可能です。

(略: 手順 2 で、それっぽいページに誘導すれば認証情報を盗める)

(略: そうした詐欺を企業自体が後押ししているような風潮もある)

(略: スタンドアロンアプリなら、ログインを詐称する必要すらない)

この種の攻撃は前述のセキュリティ文書で「4.1.4. 脆弱性を突かれたブラウザ組み込みブラウザを使ったエンドユーザ認証情報のフィッシング脅威」として分類されています。提案されている解決策は?

クライアントアプリユーザに直接認証情報を求めることは避けるべきだ。加えて、エンドユーザフィッシングや良い習慣について教育を受けることもできる。良い習慣は、たとえば信用できるクライアントにしかアクセスしないことだ。OAuth は悪意あるアプリに対していかなる防御策も提供していないので、エンドユーザインストールするネイティブアプリすべての信頼性に自分で責任を負う。

さらに

クライアント開発者は、ユーザから直接に認証情報を集めるようなクライアントアプリを書くべきではなく、システムブラウザのような信用できるシステムコンポーネントにこの役目を移譲すべきだ。

基本的に言って、OAuthセキュリティガイドラインは、OAuth を利用する開発者ユーザを攻撃しようとすべきではないとか、悪いことをしてはならないと言っています。外部の開発者が悪いことをしないことに頼るというのは、正気のサービス設計者が依拠するセキュリティモデルではありません。

私の知る主要な OAuth ベースサービスはほぼすべて、ここに概説した手法で攻撃可能です。

OAuth こそセキュリティの新たな金字塔だとお考えの皆さん、目を覚ましてください! 「普通の実装における」OAuth は、始まる前から負けていますよ。OAuth が存在するよりずっと前に実装された数多くのシステムはセキュアで、この問題を効率的に回避しています。残念なことに、あまりに多くのサービスが、せっかくセキュアだったのにインセキュアな OAuth モデルに移行してきました。だれかが開発者管理者に「OAuthもっとセキュア」「先取り思考」「将来への投資」とか何とか素敵な (しかし具体性の皆無な) バズワードを並べたてたからでしょう。ほとんどの場合、こうした変更は本当に既存の問題に対応しているのか、あるいは以前のシステムより幾らかでも良くしてくれるのかどうかをレビューすることさえなく実装されています。

OAuth サービスに偽装

OAuth ベースサービス設計でよく見かける間違いは、ブラウザ用に、パラメータひとつとして client_secret (あるいは同様のもの) を受け取るエンドポイントを提供することです。OAuth の client_id と client_secret パラメータは、基本的に言ってサードパーティプラットフォーム固有の API ユーザ名とパスワードと等価ですから、EVS の API を利用する開発者だけにしか知られるべきではありません。パスワード同然のものなのですから、client_secret パラメータは「絶対に」ユーザブラウザを通して送信すべきではありません (ヒント: パラメータ名の中に secret という言葉が入っているよ)。アプリサービスユーザがその client_id と client_secret を見つけることができる場合、そのユーザはそのサービスのふりをすることができ、潜在的には何かイケナイことができてしまうということになります。さらに注意すべき点として、client_secret パラメータを別の名前にするサービスもありますから、ご自分の関係するサービスをよくチェックして、他のパラメータも秘密にする必要があるのかどうかを調べてください。残念ながら、重要な変数が自分の素性をいつも表に出しているとは限らないため、この問題は意外と多く存在しています。加えて、client_id だけ使う認証フローOAuth の上に乗せるサービスも出てくるでしょう。これには用心してください。特定の状況では、そういう client_id はまさしく client_secret 同然の働きをするのですから。

「普通の実装における」OAuth は、ウェブブラウザを使ってユーザを複数のウェブサイトに移動させるわけで、ひとつサイトから別のサイトに client_id と client_secret (あるいは同様のもの) を送ってもらう必要があります。そうやって、たとえば AFCP と EVS の間でこれらをやりとりするわけですから、ユーザブラウザの HTTP ログをモニタリングすれば、本当に見えてしまいます。これはアプリに組み込まれた独自ブラウザ各種でも、単に右クリックすれば何らかのネットワーク・ログ機能を持つ何らかの inspector にアクセスできてしまう場合などには可能です。

EVS と連携した AFCP にこの欠陥があると、AFCP に少しでもアクセス権限のある職員に本来の権限より多い権限を取得させてしまい、本来アクセスできないはずのところに許可が下りてしまう危険があります。別の例では、仮に FacebookGMail 用の OAuth エンドポイントを利用しているとして、client_id と client_secret の両方がブラウザを通して送信される場合、Facebookユーザは全員 GMail に対して Facebookのもののふりをすることができてしまうということです。

この問題は、OAuth エンドポイントユーザウェブブラウザから平文で client_secret を送ってくることを期待するときにはいつも存在します。あるいはそうする必要があると誤解した API 利用者が、埋め込むべきでないところに secret を埋め込むときもです。この脆弱性が存在している可能性が高いのは、エンドポイントが client_secret (または同等品) と redirect_uri の両方を期待する (あるいはオプションとしてでも受け付ける) 場合です。redirect_uri パラメータは、今回のケースで言うと EVS がユーザログインさせたあとでそのブラウザをどこに送るべきか指示するために使うよう設計されています。そうやって redirect_uri がエンドポイントへの転送に使われている場合、その処理はユーザブラウザで実行されることが期待されているわけです。主要な OAuth 文書はどちらも、client_secret と redirect_uri の両方をこうした用途に使うようなケースを指示したり求めたりはしていません。

ざっと検索してみたところ、残念なことに、潜在的に違反の可能性があるそういった OAuth ベース API がたくさん見つかります。GoogleOAuth の色々な利用方法を提案していますが、その中に、両方を一緒に使うことを広めるフローひとつあります:

client_secret: 開発者コンソールで取得したクライアントパスワード (Android, iOS, Chrome アプリとして登録した場合のオプション)

Citrix もこんな間違いをしています:

(略: 以下、実際に脆弱だと確認したわけではないが、secret と redirect を併記しているサイトが列挙されている。)

Google で 2 分検索しただけでこのリストができました。皆様がもうちょっと労力をかければ、ずっと多く見つかることでしょう。ただし、上記リストは、こうしたサービスのどれかが脆弱だとか、誤用しやすすぎるということを直接に示すものではありません。色々な要素があり、たとえば Zendesk は特にこのケースでは redirect_uri パラメータリダイレクトに使わないと明言していますし、アプリからエンドポイントを呼ぶときはフル機能版ブラウザではなく curl を使うべきだとさえ書いて、開発者が危険なことをするような誤解を極力避けようとしています。それでも、経験の浅い開発者はこうしたエンドポイントを独自ブラウザで読もうとするかもしれません。さらに、この組み合わせが世に出回っているというだけで開発者の警戒心が下がっていき、経験を積んだ OAuth ベースサービス開発者でさえも似たような状況で潜在的ヤバイ誤用を気にせず適用するようになってきています。特に client_secret が別の名前になって、「秘密を守る」という概念が失われている場合はそうです。

サービスがこの点に関して壊れている指標となるのは、人気のある複数の OAuth ライブラリがこのサービスでうまく動かないときです。そういうサービス一般的にいって独自の「SDK」を提供しており、サードパーティ開発者が選んだライブラリではこのフランケンシュタイン的な OAuth が使えないと苦情が来たときにはその SDK を使うよう指示します。こうしたカスタマイズは気付かれないまま進行することも多くあります。開発者の大多数は、SDK が提供されているなら、わざわざ手元のソフトで頑張らずに済ませたいと思うものですから。

この種の攻撃は前述のセキュリティ文書で「4.1.1. クライアント機密情報を取得する脅威」に分類されています。しかしサーバウェブブラウザを使用を要求し client_id と client_secret (または似た用途のもの) を同時に渡させるという具体的な攻撃パターンには一言も言及がありません。おそらく、その文書の執筆陣の予想では、こんな馬鹿げたサービスはだれも設計しないだろうし、その API を使う開発者もそれを独自のウェブブラウザや SDK で使ったりはしないだろうと思っていたのでしょう。こうした開発者OAuth の規格からバラバラに取り出した要素をグチャグチャに混ぜて接着しておいて、自分のプラットフォームOAuth 本来のセキュリティを保持していると思っています。そのツギハギのせいでどんな新しい問題が入り込むかもしれないのに、そこは一顧だにしません。残念ながら、これが近年の OAuth 業界によくあるやり方で、この既に猛威をふるっている問題は、パレード参加者がどんどん増えて、人が使っている手法や、使っている「と思う」手法をコピーしていくことで、とどまるところを知らない連鎖になっています。

おそらく、上記のサービスを使っているシステムのうち、この問題のせいで悪用可能なものは多数あることと思います。特にデスクトップアプリでは、コンパイルされたアプリバイナリから秘密情報がそのまま取り出せることは、サービス側で何も危険なことを要求していなくてもよくあります。GoogleOAuth の使い方を多数提供しているうちで、client_secret と redirect_uri を両方受け取るエンドポイントのことが書いてあるのはたったひとつだけだというのは重要な点です。少なくとも Google の場合、redirect_uri があっても、このエンドポイントウェブブラウザベースアプリには推奨していません。しかし、だからといって実際に独自ブラウザでそれを使う人や、このフロー標準的ブラウザ用のエンドポイントコピーする人が一切いなくなるはずがありません。それに加え、Google は例外なのであって、世の中にはセキュアな OAuth フローを受け入れず client_secret (や同等品) を常に渡すよう要求する愚かなサービスが今も満ちあふれており、そのフローウェブブラウザを通るときでさえも要求しているのです。さらに悪いことに、こうしたサービスの多くはユーザウェブブラウザを通して「しか」利用できないのですが、これは後ほど詳述します。

前掲のセキュリティ文書は、Permalink | トラックバック(3) | 12:44

ゆとりジュウオウジャー

ゆとりミスクライアントへお詫びに一緒に行くことになった。



ちょっと遠方だったので、ゆとり直行したのだが、

出勤ラッシュと重なり、車内がかなり混んでいた。



そんなほとんど身動きできない車内で、

ゆとりはかろうじてスマホを片手で持ち、何か必死に触っていた。



からお詫びに行くのに、パズドラでもしているのかと思って覗いてみると、

googleで「トラ ライオン どっちが強い」と検索していた。



そのせいでお詫びをしている間も、どっちが強いのか気になって仕方がなかった。

2016-04-22

デザインパクってくださいって言われたらどうする?

4月からクライアント担当者が変わったんだけけど、

新しい人はGoogle画像検索で調べるとすぐに出てくるデザインをいくつか持ってきて、「これパクってください」言ってくる。

どうやら「売れてるデザインをパクれば売れる」っていう価値観の持ち主のようなんだけど、どう対応したらいいんだこれ。



オレの名前が出ないなら別にパクってもいいけど(責任自分に来ないから)、

オレの名前コピーライトとして出るからできればそんなことしたくないんだよなぁ。