はてなキーワード: httpsとは
気が晴れない時におすすめです。
例えば
xevra 馬鹿か、叩いた方が面白いからみんなで叩いてるだけ。馬鹿で生意気な狸が火のついた薪を背負って登場したからみんなで油かけまくって遊んでいたんじゃないか。どんどん燃え上がるから楽しくて皆でもっとかけたんだよ
という感じで主張していきましょう。
3. それでも気が収まらないときは相手をうつにするテクニックを交えてコメントするといいでしょう。
例えばこんな感じです。
xevra 仕事ができない人はメンヘル。メンヘルを追い込んでも病状を悪化させるだけなので逆効果。仕事ができない人は病院へ送って心の在り方から丁寧に再構築させないと本人も周りも不幸になる。心の病気の人が多すぎる
xevra 悪口を言うような奴はメンヘル。批判するのであれば社会が良くなるための視点と代案が必須。それがなく単に溜飲を下げたいだけの罵声はメンヘルの症状。メンヘルの罵声はスルーするより他ない。
xevra ブラック社員はブラックの共犯者。労働力のダンピングで真面目な人や会社を追い込む犯罪者だという視点が欠けてる。迷惑だから即刻辞めろ、やめさせろ
xevra ホームレス、ニート、ブロガーは社会の三大底辺で人間のクズ。折角人間に生まれてきてなぜブロガーになどなるのか。恐ろしい恐ろしい
それに はてなスターが付けば自己顕示欲も満たされ「自分は正論を言った」と思い込める勘違いもできて一石二鳥です。
自分のコメントで人気になれば説得力も増します。はてなスターが貰いやすくなってさらに自己顕示欲や自信を満たせます。
ちなみにxevraという人は瞑想を薦めていることで有名で、
に対して はてなスターを付けて本人は「ホント」と答えていますが、
「メンヘルを追い込んでも病状を悪化させるだけ」とわかっていながら辛辣なコメントを当人にしたり、
「批判するのであれば社会が良くなるための視点と代案が必須」と言いながらレッテル貼りなコメントで終わったり、
わかってていてもやってないし。瞑想もたぶん口だけなんでしょうね。
イライラしてコメントを書き込むぐらいなら自分で推してる瞑想をして頭冷やせばいいのにと思います。
たぶんしてないでしょうね。
あとxevraっていう人は運動も推していましたが、運動というのはたぶんSEXのことなんだろうと思います。
あと瞑想と運動のほかに はてブコメントやブログでもそういうような考えを発信していて、
なんて言っていますが、
やらないで良いのにやるのは「余計」かつ「エゴ」だろうと思います。それならまだやらない方がマシです。迷惑です。
「周りの人から良く思われないのではないか?」と思われるかもしれませんが、
こうやればいいのです。
xevra ズィヴラ゛ と、読んでね(´ω`*)
こんな風にかわいい顔文字をたまに使うコメントをしていけば問題ありません。
xevraという人は時々顔文字を使いますが、あれは人当たりがいいと周りの人に思われるためで
「普段 はてブコメントで厳しいことを言ってるけど本当は優しい人なんだな」と、
ああやって人柄を誤魔化すことができます。
致死量の毒を混ぜてるんですけどね。
たまに はてブコメントで記事についてや書いた人を褒めたりしていますが、あれも似たようなようなことで
アメとムチとかツンデレというのは、
時折厳しくて、時折優しいというイメージがあるが、
19回厳しく接して、1回だけ優しいというパターンだという。
あとはずっとムチという状況が最もアクティブに動く。
しかし後ほど解剖をしてみると、
つまり、たまに優しくされる人程、
身体的ストレスがあるのに本人は幸せと思い込んでしまっているという。
https:www.facebook.com/permalink.php?story_fbid=654918807858541&id=654870034530085
まあ、このことがバレなければ自分に付いて来る人が出てくるでしょう。
以上の書いた方法を実践して自分がメンヘルにならないようにしましょう。
それでも「瞑想のほうが効果ある」と反論意見がある方はまず自分が瞑想をやっていることがわかるように証明してから反論してください。
それ以外は反論を受け付けません。
あと、この記事に書いた方法をやり続けると将来はボケやすくなると言われていますけどね。
goo.gl/gR5oU
あああ
あああああああああああああああああああああ
[]https[]://www.facebook.com/permalink.php?story_fbid=654918807858541&id=654870034530085
棒読みちゃんTipsにあるLimeChat用スクリプト「BouyomiLimeChat.js」を改造し、英語のテキストを読み上げないようにします。
参考 : 棒読みちゃん Tips
ここでは英語のテキストとは「半角英数字記号(=アスキー文字)のみで構成されたテキスト」とします。
40行目の「function talkChat(prefix, text) {」の次行に次のコードを挿入。
if (text.match(/^[\x20-\x7E]+$/)) return;
以上です。
同じような行を更に追加することで、読み上げないテキストの種類を増やせます。
text.match(/この部分/)を書き換えることで、好きなテキストを無視できます。"この部分"は正規表現で指定します。
if (text.match(/^[\x20-\x7E]+$/)) return; if (text.match(/https?:/)) return;
棒読みちゃんTipsの「●スクリプトを利用する方法」はLimeChat2.40だとそのまま使えないようです。2.40向けに書き直したものを以下に記載します。
1.スクリプトファイルをダウンロードする こちらのスクリプトをダウンロードしてください。 ZIP形式ですので、展開してください。 2.ファイルを配置する LimeChatのメニューから「設定→スクリプトの設定」を開く。 「スクリプトフォルダを開く」ボタンを押す。 開いたフォルダに「BouyomiLimeChat.js」を置く。 3.LimeChat側でスクリプトを有効にする LimeChatのメニューから「設定→スクリプトの設定」を開く。 スクリプトの設定画面で、「BouyomiLimeChat.js」の行を右クリックし、○を付ける。 スクリプトの設定画面の閉じるボタンを押す。
一年以上の準備期間を費やして増田連合軍は北方異民族追討の兵をあげた。
遠征軍には中心的な増田四家の当主がすべて参加し、統治の安定ぶりを誇示している。
会談では他家に強敵を任せる流れだった増田家(四)も戦後の立場を考えれば一家だけ参戦しない判断はできなかった。
そこまで読んでの決断なら増田家(八)の当主は大した奴だと、ちんぽこ将軍は半ば安心していた。
遠征軍には他の増田家に連なる人間も、北は増田軍(三)ごと降伏した増田家(一)の亡命武将から、
南は降伏以来実家に帰っていない増田家(士)の敗戦処理当主まで参加していた。
彼らの総兵力は二十万に達する。まさに増田島の総力を結集した史上初の増田連合軍と言えた。
二十万人の増田は増田領(一)と増田領(三)の境界をなす増峠、その南に広がる大きな盆地に邀撃の陣を構えた。
増峠を越えてやってきた北方異民族の軍勢が、平原の北を赤黒く染める。
傭兵を導火線に、全球的な寒冷化に押されて、南下してきたなどの同情できる動機は彼らになく、欲得ずくである。
肥育したものを潰して塩漬けにし、金の容器に封入保存する風習で知られていた。
これは缶詰の起源ともされるもので、彼らの文化はともかく、技術は決して侮ることはできない。
増田島の住民が知らない角のやたらと大きく広い動物?を騎乗可能に品種改良したものの騎兵で、威圧感は馬の比ではない
中にはチャリオット形式の敵もいて、赤い服をまとった御者の姿は、何故か増田たちの本能的な殺意を呼び起こした。
両翼に展開した?騎兵を相手取るのは、カラトラヴァ騎士団と増田騎馬軍団だ。
尤も、彼らの数はどんなに集めても合計で五千を超えないので左翼に集められている。
右翼には各家から集中された騎乗士を、前列に配置された武熊が補強する状態だった。
目算では敵の?騎兵は左右共に一万から一万五千。これに数千の軽装歩兵が加わっている。
味方は右翼が騎乗士一万に武熊五十頭、左翼が騎士団三百に騎馬軍団四千五百、その他が五千であった。
バックボーンを構成する歩兵の数では増田連合軍が確実に上回っている。
上回るように動員し、補給体制を整えてきたのだから劣勢だったら大問題であった。
前衛は言い出しっぺの法則で増田家(八)本国衆四万がつとめる。指揮官は増田出羽守。
「このいくさに勝てば、殿が増田家(四)の姫を紹介してくれる……」
独り言をつぶやいているのは、おめでたいからではなく、恐怖をまぎらわすためだ。
十万人に迫る目前の異民族は
「https https」「スマフォ」「ニッキニッキ」「タノシクタノシク」
などと口々に意味不明な言葉を供述しており、受け身の意識でいると狂気に引き込まれる。
「特に「www」や「//」と笑ったり恥ずかしがったりしている輩が憎々しいでござる。
笑ったり恥ずかしがったりできなくしてやるでござる!」
増田出羽守の後方で増田家(五)の先鋒をつとめる増田左混は言った。
増江川の敗北で一時干されていた彼であるが、大軍をひきいた経験はやはり貴重なため、起用されていた。
彼は転がり込んできたカラトラヴァ騎士団と合同訓練を積むことで戦術の視野を広げていた。
中軸を構成する増田軍(五)全体の兵力は比較的戦場に近いこともあり五万を数える。
彼らの領土は一度も本格的な戦闘の舞台になったことがなかった。実に幸せな家であった。
増田左混の右手には増田家(四)を中核とする歴戦の精鋭たちがいた。
「昔は傭兵にしていたくらいで話が通じる連中だったので候が、そやつらがさらに遠方の異民族まで呼び集めたようでござる」
増田家(一)の亡命武将が、当主に説明する。峠の向こうが冬の間に地獄になったことを想像しながら、
長い準備期間を耐えてきた彼はこのいくさで退くなら果てる覚悟を決めていた。
戦意の高すぎることが心配される増田軍(四)は合わせて三万であった。
なお、増田軍(四)には旧増田領(二)などに展開している他の部隊も存在する。
反対側の中央左翼よりには増田家(十)の当主がいた。故郷が遠く、別に海上輸送の負担があるため、彼らの軍役は軽い。
武熊がトラウマになっている旧増田家(九)家臣団も寄騎につけられて総勢三万だった。
最後に増田家(八)当主がひかえる後衛には、四万人が集まっている。
輜重兵が一部混じった雑多な集団であり、味方にはあまり期待されていなかった。
最初に動いたのはもう一つの部外者であるカラトラヴァ騎士団だった。
恐怖を知らない騎士たちは三十倍を超える敵にむかってまっすぐ突っ込んでいく。
敵はおめきながら迎撃の体勢を整えた。先頭をはしる騎士団のグランドマスダーは異国語で部下に叫ぶ。
「カラコール戦法だ!」
彼が槍を掲げると騎士たちは一斉に顔を左手のあらぬ方向にねじ曲げた。そちらに指をさす。
「「あっ!!?」」
言語の壁を通じて通用するしぐさをみて、?騎兵たちは一斉に右手をみた。
「「??」」
何もないことを不審に思って視線を戻した先には視界一杯の白銀の騎士たち。
ごあ、ぐあっしゃゃあああああん!!
耳を聾する轟音をかなでて敵味方が激突する。?の大きな角も馬にまで装甲を施したカラトラヴァ騎士団相手には障害にならず、敵の右翼は切り裂かれた。
彼らがこじ開けた突破口を五千の騎乗士が拡張する。一方、増田騎馬軍団は大きく左に回り込む機動をおこなった。
騎士のいない反対翼の戦いは増田連合軍の有利には展開しなかった。
「com.com.」
?チャリオットが耳障りな音を立てて迫り、旋回しながら武熊に矢の雨霰をふらす。
「ぶおっ、まおっ」
武熊たちは腕で頭をかばい、いやいやをした。さらに射られるとたまらず敗走する武熊が現れる――味方の方向へ。
「こっちくんな!」
「やっぱり武熊は増田の敵」
「敵に回すと恐ろしいが、味方にしても頼りないっ!」
武熊とハサミは使いようなのだが、右翼の騎兵は勝手なことをわめいて混乱をきたした。
そこに?騎兵たちが威勢よく突っ込んでくる。
「「うわあああああっ」」
増田出羽守は由緒正しいスカラベの前立てを部下に向かって反射させ、刀で敵を指し示した。
五万の雑魚ナメクジがうねうねと敵に向かって進む。時折、敵味方の矢が飛び交い、飛翔音が恐怖を煽り立てる。
至近距離に近づいたことで増田兵は黒い毛皮をまとった敵の中に、本物の生きた毛皮が混ざっていることに気付いた。
「敵の武熊だ!」
「いや、セルクマだ!」
そいつの身体は増田島の武熊より一回り大きかった。しかも、暴れた時の危険を無視して敵兵が大武熊の近くにまとわりついていた。
増田たちはさっそく脱糞する。それでも槍にすがってへっぴり腰で向かっていく。
「イチランイチラン!」「モウケモウケ!」
異民族は突然騒ぎだし増田の肝をつぶした。ほとんど気を呑まれた状態で中央での戦いがはじまった。
「右翼の連中は何をやっておる!」
増田ちんぽこ将軍は右翼の崩壊をみて叫んだ。事前に打ち合わせた作戦があっさり台無しになってしまった。
「右を向けぇい!」
烏合の騎兵集団を破砕した敵の?騎兵が奇声をあげて駆け寄ってくる。三万の歩兵は味方の右側面を守るために戦いはじめた。
「やっぱダメだ~~っ」
あれだけ意気込んで進んだのに、撃退されるとは情けない。
負け上手の増田出羽守は無理して流れに逆らうことはせず、部下と一体になって逃げた。
「姫との結婚は無理でござるな……」
敵の中央はいきおいに乗って増田連合軍を追ってきた。増田家(五)が汚れた尻拭いに割ってはいる。
「必ず負ける兵は必ず勝つ兵と同じ。やはり、軍師にとっては使いやすいわい」
増田匿兵衛はうそぶいて銅鑼を鳴らせた。前衛が引き出した敵を左右の歩兵が側撃する――計画だったのだが、右側は?騎兵への対処が必要だったため機能したのは左側の増田家(十)軍団だけだった。
「放てぇ~~っ」
自慢の手銃が火を吹き、防備の薄い斜め右から撃ちまくられた蛮族がバタバタ倒れる。
コミュニケーション不能な連中もさすがに怯んだ。そこに増田家(士)の尖兵が斬り込んでいく。
「……この兵があれば天下も狙えたはずでござるが」
自分のではない脱糞の臭いがして、増田中弐は邪念を追い払った。
戦場の西側では増田軍が圧倒していた。鋼鉄の戦士たちが?騎兵の中央を食いちぎる一方で、増田騎馬軍団が側面や背後に回り込み、騎射で滅多撃ちにする。
増田島の湿潤な気候が蛮族の合成弓にあわなかった影響もあり、一方的な射撃戦になる。
このまま敵の後方を回り込んで、東の騎兵戦も勝利に導けば完勝。
そんな、計画だったのだが、味方の右翼が時間稼ぎに失敗したため計画が根本から狂っている。
喧騒の中、増田騎馬軍団の指揮官たちは、その事実を忍びに聞かされた。
「父上!」
ある増田騎馬が北を弓でさした。増田典厩は頭をつるりと撫でる。
「まったく、とんだぢゃぢゃ馬ぢゃわい……」
増田軍(四)は敵左翼?騎兵の攻勢をしのぎ続けていた――むしろダメージは?騎兵の方が大きかった――が、
機動力にまさる敵の動きを拘束することはできず、敵左翼の一部はついに本陣にまで乱入してきた。
精強な増田軍(四)に近い右寄りに本陣をおいた方が安全という読みが裏目に出た。
「うろたえるな。うろたえるではない!」
と叫ぶ増田家(八)当主が一番うろたえていた。尻は腸そのものを体外に排出してしまった感触だ。
ナマコならそれを囮にして逃げるのだが、最高司令官ともなれば、そういうわけにもいかない。
「ipip!」
馬廻りが角の派手な?騎兵を相手にしている間に、随伴していた軽装歩兵が足下まで迫ってくる。
「ひかえろ、下郎が!!」
当主は悲鳴をあげると、腰の大業物を抜いて、一刀のもとに小鬼を斬り捨てた。
“!?”
「://」
敵は一瞬硬直する。増田家(八)の当主はかつて伝説的な剣士に師事し、
「ぬりゃ!てりゃっ!」
「それ以上、いけませぬ」
太刀が刃こぼれだらけになったところで馬廻りが主を止めた。四万の後衛は?騎兵を軒並み倒しおえていた。
普段は輜重を護衛している彼らが、増田家(八)では最精鋭なのであった。
輜重が奪われない信頼があるからこそ、増田軍(八)は安心して戦えた(負けられた)。
そして、彼らが防衛された食糧を期待して本隊への合流を目指すことで全体が敗北から早期に立ち直るのであった。
だが、やはり実戦経験の乏しさは問題であり、頭領がみずから戦う事態に後衛はそうとう混乱していた。
そんな最悪のタイミングで敵中央から東にこぼれた大量の歩兵軍団が襲いかかってきた。
最初は東西に引かれていた戦線はいつのまにか、南北に引かれる状態になっており、本陣は最右翼の最前線だった。
敵味方が増田左混が戦っているあたりを中心にして、回転扉のように右回転した結果である。
「ここは一旦、お引きを」
増田匿兵衛が進言する。当主は言い返しかけたが考えを改めて軍師にしたがった。
「くそっ」
「お腰の物は味噌ですかな?」
「……たわけ。うんこに決まっておろうが」
「某もでござる」
見ると増田匿兵衛も漏らしていた。
大将が敵前逃亡したことで増田連合軍の士気は低下、思い思いの方向に退却をはじめた。
あくまでも退却をこばんだ増田家(一)の旧臣たちは敵に突入して討ち死にを遂げた。
「むごい……」
と漏らしつつも、増田家(四)の当主も、死兵の抵抗を利用して戦場から離脱した。
前回
http://anond.hatelabo.jp/20160620020153
次回
Impress Watchがリニューアル(http://www.watch.impress.co.jp/20th/)した。
記事URL構造が過去記事も含めて変わってしまった事はあまり知られていない。
はてななどの各社担当者が自作サーバーのノウハウを紹介 -BB Watch変更する
http://bb.watch.impress.co.jp/docs/news/20091126_331459.html
↓
上記の記事は471usersを集めているが、
リダイレクト先は勿論0user、つまりブクマ無しとなってしまう。
せっかく記事を見つけてブコメも閲覧しようにも見られないのだ。
ではImpress Watchの全過去記事が新URLになっているかと言うとそうではなく、
調べるとPC Wacthでは2009/04/08の記事から変更されているようだ。
■リダイレクトされない
http://pc.watch.impress.co.jp/docs/2009/0407/fujitsuf.htm
■リダイレクトされる
Acer、初のNVIDIA IONベースの超小型デスクトップ「AspireRevo」
http://pc.watch.impress.co.jp/docs/2009/0408/acer.htm
↓
つまり、2009/04/08〜2016/06/01の7年2ヶ月のブコメは簡単に参照できなくなった。
同様の問題はWikipediaのhttps化の時も発生している。
Impressと言えば新聞社等のニュース配信と異なり、過去の記事も削除されることなく
長期保存(最古は96年4月:http://pc.watch.impress.co.jp/docs/article/960417/index.htm)されているので
その事実にはただただ感謝するしかなく、今回のURL変更に文句を言うつもりもない。
ただWikipediaのhttps化の時と同様の話ではあるが、
比較的規模の大きなサイトがURL構造を変更してリダイレクト対応を行った際には、
はてなブックマーク運営側においては別URLの提示を示す等の対応を行って頂きたい。
https:// www.reddit. com/r/flawzz/comments/4lk018/free_service_clash_royale_hack_online_generator/
https:// www.reddit. com/r/flawzz/comments/4lk04g/gems_today_clash_royale_hack_no_human_verification/
https:// www.reddit. com/r/flawzz/comments/4lk06w/2k16_clash_royale_cheats_no_survey_no_human/
https:// www.reddit. com/r/flawzz/comments/4lk09p/boxfile_clash_royale_hack_human_verification/
https:// www.reddit. com/r/flawzz/comments/4lk0df/uploaded_clash_royale_hack_no_survey_ihack_online/
https:// www.reddit. com/r/flawzz/comments/4lk0fy/clash_royale_hack_no_survey_or_download_unique/
https:// www.reddit. com/r/flawzz/comments/4lk0km/gems_gold_clash_royale_hack_tool_no_survey_gsk/
https:// www.reddit. com/r/flawzz/comments/4lk0lw/clash_royale_without_download_gems_generator/
https:// www.reddit. com/r/flawzz/comments/4lk0na/291000_gems_clash_royale_hack_no_survey_no/
https:// www.reddit. com/r/flawzz/comments/4lk0ou/new_upgrade_allows_clash_royale_hack_tool/
https: //www.reddit .com/comments/4k8p9j/no_root_clash_royale_hack_no_survey_no_download/
https: //www.reddit .com/comments/4k8pbe/clash_royale_cheats_no_survey_unlimited_gems_2016/
https: //www.reddit .com/comments/4k8pdx/clash_royale_hack_gems_online_no_survey_updated/
https: //www.reddit .com/comments/4k8pfs/no_verify_clash_royale_hack_no_human_verification/
https: //www.reddit .com/comments/4k8p9j/no_root_clash_royale_hack_no_survey_no_download/
https: //www.reddit .com/comments/4k8pbe/clash_royale_cheats_no_survey_unlimited_gems_2016/
https: //www.reddit .com/comments/4k8pdx/clash_royale_hack_gems_online_no_survey_updated/
https: //www.reddit .com/comments/4k8pfs/no_verify_clash_royale_hack_no_human_verification/
https :// www. reddit .com/comments/4j0h2k/clash_royale_hack_no_survey_cheats_gems_android/
https :// www. reddit .com/comments/4j0h5e/updated_clash_royale_hack_no_download_may/
https :// www. reddit .com/comments/4j0h5e/updated_clash_royale_hack_no_download_may/
https :// www. reddit .com/comments/4j0h8q/clash_royale_gems_gold_elixirs_hack_online_no/
https :// www. reddit .com/comments/4j0hbl/guaranteed_may_clash_royale_gems_generator/
https :// www. reddit .com/comments/4j0hf9/mediafire_clash_royale_cheats_no_survey_apk/
https :// www. reddit .com/comments/4j0hhw/processed_clash_royale_hack_no_human_verification/
https :// www. reddit .com/comments/4j0hjp/99999_clash_royale_hack_no_survey_coded_generator/
https :// www. reddit .com/comments/4j0hm1/download_how_to_hack_clash_royale_10000_gems/
https :// www. reddit .com/comments/4j0hou/today_updated_clash_royale_hack_android_by/
https :// www. reddit .com/comments/4j0hyc/t%C3%A9l%C3%A9chargerclash_royale_unlimited_gems_generator/
https :// www. reddit .com/comments/4j0i3a/select_platform_of_clash_royale_gems_hack_download/
https :// www. reddit .com/comments/4j0i5g/gems_and_gold_hack_of_clash_royale_human/
https :// www. reddit .com/comments/4j0i99/android_clash_royale_hack_survey_download_gems/
https :// www. reddit .com/comments/4j0ica/wait_is_over_clash_royale_gems_hack_no_survey_v42/
https :// www. reddit .com/comments/4j0ica/wait_is_over_clash_royale_gems_hack_no_survey_v42/
https :// www. reddit .com/comments/4j0iet/clash_royale_999999_gems_generator_latest_may_upd/ るベビ
anond:20160426124418 と anond:20160426145507 の続きだゾ。てか長えよ
(略: トークンが定期的に期限切れになるので可用性が下がる。たとえばビデオカメラから複数の動画をアップロードしている途中で切れたらムキーってなる。再認証して途中からできるのもそれはそれで CSRF の温床。AFCP のような場合は期限切れがあってはならないので、パスワード等を預かる認証プロキシの SaaS アプリを筆者は作った。好評だったが、これはもちろん本来あるべきでない欠陥のexploitのはず。)
(略: 個人ユーザ向けのAPI設計ばかりで、雇用者や上司がアカウントを管理するという観点がない。SAMLでは普通にできるのに、OAuthとなるとセキュリティ的に云々と言って拒むサービスばかり。別のUIで既にできてることをAPIにしても意味がない。これまでできなかったことをAPIで可能にするのではなく、単なるシングルサインオンでよければ他にある。実際Googleは個人向けにはOAuthを活用しているが、Google Apps for BusinessはOAuth以外のシステムを使っている。)
(略: 主要な設計ミスは、外部サービスすべてを同等に疑うところ。管理者が各サービスの信用性を判断して権限を調節できるようにしないところ。これまでどれほど多くの製品がOAuthの面倒さのために失敗してきたことか。)
ここまでで「普通の実装における」OAuth がまったくおかしいということはわかりましたが、OAuth が実際うまくいくのはどういうときでしょうか。
初期の OAuth 規格および概念におおよそ付き従っているシステムは一般的に言って、新しい規格ベースのよりもセキュアで、マシです。OAuth 1.0 の実装がすべてセキュアだというのではありませんが、たいてい問題は少ないです。こうしたシステムは通常、次のふたつのアプローチのどちらかに従っています:
とはいえ、このように設計されている OAuth ベースのシステムはごくごく希少で、しかも一般的にこうしたシステムは、他のところで使われている OAuth とは似ても似つかぬものです。OAuth 1.0 規格の方に寄って頑張っていますが、公式には 1.0 は非推奨ですから、こうしたアプローチを使っているシステムはそのうち「アップデート」されて OAuth 2.0 の概念や追加機能すべてを加えて再構築され、セキュリティやユーザビリティをだめにしてしまうことになります。これこそ筆者があらゆる OAuth ベースのものを見逃したくない理由です。もっと古く、もっと機能的な形式の OAuth を使っていても、システムに「改善」が必要だという素敵な考えを管理者のだれかが閃いて台無しにしてしまうからです。ご迷惑をおかけしてすみませんと言うぐらいなら、まったく別のものを使うほうが良いですよね。
他に手はないかと探すとき、人々はよく他の「フレームワーク」にはどんなものがあるかを知ろうとします。しかし、考え抜かれたセキュアな設計を実現するためには必ずしもフレームワークが必要というわけではありません。現状、OAuth とはどのようなものかについての意見はサービスごとに異なっていますので、承認の具体的な動作の仕組みもまったく一定ではありません。そんな中でフレームワークを探しまわるのは、簡単にできることをいたずらに複雑化しているだけのことが多いです。唯一ほんとうに難しい要素、しっかりした規格の必要な要素は、使用する鍵パラメータの改竄を防ぐため変数に署名する方法だけであり、この点に関して、ほとんどの OAuth ベースの実装は一切何もしてくれません。
ウェブサービスの最大手である Amazon は、世界中の企業にサービスを提供する一流プロバイダで、合計 30% 以上という途方もない市場シェアは他者を圧倒しています。Amazon のアプローチは、自分でアプリの認証情報を生成できるコントロールパネルへのアクセスを、すべてのアカウントおよびアカウント管理者に提供することです。この認証情報で、どの Amazon サービスで作業できるか、そのサービスでどの操作を実行できるか、どの権限で作業しなければいけないかを指定できます。この認証情報は必要に応じて「アカウントホルダ」の人が破棄することもできます。
Amazon の API における認証や承認技術には、本質的に制限が多く潜在的に危険性のあるリダイレクトを一切必要としません。Amazon のプロトコルで認証情報は、直接送ることは一切なく、データの署名に使うのであって、これでブラウザを通してパラメータを送る必要のあるときにも改竄不可能にすることができるのです。
Amazon の設計はアカウントの利用状況を API の利用まで適切に把握できますし、API の認証も承認もすべて Amazon 側からスタートし、その際のアプリ認証情報も「Amazon の」コントロールパネルから生成されます。この認証情報はその後、いかなるトークン交換システムも使わず直接 API プロセスで使われます。この設計なら「普通の実装における」OAuth が達成している真のセキュリティ目標をすべて達成し、かつ前述したセキュリティ上およびユーザビリティ上の問題をすべて回避しています。
ひとつ言及せざるをえない短所は、Amazon の権限システムが幾分わかりにくく、あまりユーザに優しくないということです。ただし、このことは何故かほとんどのコントロールパネルにも言えることで、いずれにせよ UI 設計の問題であって、承認プロセス自体の失点ではありません。さらに、Amazon のコントロールパネルはかなりキビキビ使えて、それ自体の API でも使えます。この点たとえば Google の場合のように、筆者の知る限りメタ API もなく、何をするにも何十もの手順が必要なのとは大違いです。
Amazon の認証および承認メソッドは他のサービスプロバイダにも幾つかコピーされています。Google 自身も企業向け製品の一部でこれを利用できるようにしています。Google 自身、純粋な OAuth 設計は企業サービスに向いていないことを認めており、企業サービスには JSON Web Tokens (JWT) の利用を推奨しています。
JWT はサービス間の SSO や API 利用を可能にする規格です。多くの点で JWT は SAML に似ていますが、SAML はややこしくて、XML Security (名前と違って、まったくセキュアではない) の上に構築され、API 利用に向いていないのに比べ、JWT は SAML の主要な目標を、単純かつ使いやすい方法で一切の面倒なく達成しています。HMAC 実装をひとつ用意し、JSON の構築と解析の方法を知っておけば JWT は使えます。既製品をお求めでしたら、膨大な JWT ライブラリが既に存在していますよ。
ただ Google の場合、典型的な JWT 利用法よりも高度で、HMAC のかわりに、もっと高度ですがこの分野では人気の低い RSA デジタル署名を利用するよう要求しています。Google のコントロールパネルではアカウント管理者が自分の企業サービス用に新しい鍵ペアを生成でき、API ログインを署名するために使う秘密鍵をダウンロードできます。こちらのほうが HMAC よりセキュリティは高いですが、Google はプロセス全体を本当に無駄に複雑化しています。コントロールパネルをしょっちゅう完全に再設計して、前と同じことをしたいのに使い方が違っていて混乱する点は言うまでもありません。JWT 利用の実例が必要なら他をあたるようお勧めします。
他に使われている技術は、サードパーティがどんな権限を必要としているかをある種の XML や JSON ファイルで定義してウェブサイトに送信できるようにするサービスのものです。ユーザがあるページを自分のアカウントで訪問し、ファイルの URL (あるいは中身) をそこに貼り付けると、その外部サービスあるいはアプリが求めている権限の一覧やそこに含まれる説明などが表示されるようになっています。それを見て認可したいと思うユーザは、認証情報を生成してそのサードパーティのアプリあるいはサービスに貼り付けます。ユーザは後で無効にしたくなったら認証情報を破棄することができます。これも、開発者におかしな負担を強いることなく、すべてのアカウントに API サービスがあり、権限管理を備え、サービス自体からフローが始まる、実にセキュアな設計です。
承認管理のためにサービス側から提供してもらう必要が本当にあるのは、適切な役職 (管理者やアカウント所有者など) を持つユーザが自分に割り当てられた権限や (望むなら) 期限を持つ認証情報を API 利用のために生成できる何らかのパネルだけです。こうした認証情報はその後、お好みのセキュアな認証システムを通して利用することができます。たとえば HTTP Basic Authentication over HTTPS のような単純なもの、これは事実上どの HTTP ライブラリにも入っていますし、HTTP Digest Authentication、これはもっとセキュアでありながらほとんどの良質なライブラリでサポートされていますし、その他 HMAC, RSA, 楕円関数など認証情報をネットに通す必要のない暗号学的テクノロジーを活用した認証プログラムに基づくものなら何でも使えます。特に HMAC は、承認や認証を実装するほとんどすべての人 (Amazon や、一部の OAuth 実装も含む) によって既に使われています。
こういった種々の実績あるテクニックは、セキュアなプラットフォームを作るために CSRF 対策など複数のフレームワーク同士の相性を勉強する必要があるという重荷を軽くしてくれますし、一般的に、既存アーキテクチャにワンタッチで装着できるようなモジュール化の実装が可能です。ユーザやアプリの認証情報が盗まれる可能性をなくしてくれます。ややこしい CSPRNG を常に使用する必要もありません。このようなシステムは OAuth の生まれるずっと前から存在しており、現在でも一般的です。OAuth は、ユーザの認証情報を要求したり他に弱点があったりするような一部の劣悪な設計のシステムよりはセキュリティが良いかもしれませんが、既にある真の設計を置き換えるものではありません。OAuth が解決すると主張する問題点は実のところ、既存の良く設計されたシステムには存在していませんし、「普通の実装における」OAuth は実のところ、解決すると主張する問題の多くを招き入れるばかりか、最初は存在していなかった問題まで生じさせています。宣伝文句と違って、OAuth にすれば自然と驚くほどセキュアになるというわけではなく、むしろ数々の短所や実装の困難さを考えれば、他の考え抜かれた選択肢のほうがはるかに優れています。
これからサービス設計をして API アクセスを提供することになっている方はどうか、ご自分が実現しようとなさっているのが何なのかを本当に考えてください。他の人がやっていることをコピーするだけで済ませたり宣伝を丸呑みしたりしないでください。どうしてもコピーしなければいけないなら、Amazon (これが最善です) や Rackspace, IBM SoftLayer, Linode, VULTR, Zoho, Zoom ほか、API の素直で健全な認証システムを構築する方法について現時点で多少なりとも理解のあるところをコピーするようにしてください。
2016 年 4月 Insane Coder
OAuth ディスの記事を酒の勢いで訳してみたゾ。前半はつまらないから、「章のまとめ」か、それ以降だけ読むといいゾ。なぜか後半が切れてた。こっちだけでいいゾ anond:20160426145507 anond:20160426150324
http://insanecoding.blogspot.com/2016/04/oauth-why-it-doesnt-work-and-how-to-zero-day-attack.html
認証 (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 のコア) が現在よく利用されている最大の理由のひとつには、「適切に実装されれば」サードパーティのアプリやサービスに各ユーザの認証情報 (パスワード等) を提供しなくて済むという点があります。サードパーティに個人ユーザの認証情報を渡すのは、以下の理由から望ましくありません:
上記の問題点は、OAuth だけでなくあらゆるトークンベースの認証システムでも回避できます。よく OAuth の強みとして挙げられていますが、独自というわけでは全然なくて、他にも同じ強みを実現しつつ OAuth の弱点のない選択肢はあるのです。
さて、確固とした土台に基づいてはいるものの、「普通の実装における」OAuth は、上記の問題を回避しようとして以下のような手順に沿ってシステムに情報を提供します:
このトークンはユーザの認証情報ではありませんから、そしてひとりのユーザとひとつのアプリの組み合わせだけに有効で、指定された権限しか持たず、あとから破棄されるようになっていますから、きちんと前述の問題点を回避しているように思えます。しかし実際には、ちゃんとした土台を核として持っているにも関わらず、OAuth の普通の実装で使われているこのフローは、上に挙げた問題すべてに対処しているとは言えません。
この設計はそもそも危険なスタート地点から始まっています。セキュアなプラットフォーム設計の第一原則は、危険な地点から始まったものは既にダメ、逆転不可能、ということです。手順 1 のせいで、EVS 自体ではなく EVS を利用するサービスから始まっているので、ユーザは最初の一歩からして中間者攻撃を受けたような状態にあります。これは、かかってきた電話に個人情報や口座番号などを教えるようなもので、自分の使っているサービスの者だと名乗っていますが、番号が本物かどうか分からなかったり非通知だったり、という場面のコンピュータ版だと言えます。最近はこういう詐欺がたくさんありますから具体例を挙げる必要はありませんね。要点は、接続を開始する相手が信用できなければ、その接続は一切信用できないということです。EVS 自体の側から手順を始めるのでない限り、上に挙げた目標をすべて実現する API 利用のためのセキュアな認証システムは設計不可能です。
(略: 手順 2 で、それっぽいページに誘導すれば認証情報を盗める)
(略: そうした詐欺を企業自体が後押ししているような風潮もある)
(略: スタンドアロンのアプリなら、ログインを詐称する必要すらない)
この種の攻撃は前述のセキュリティ文書で「4.1.4. 脆弱性を突かれたブラウザや組み込みブラウザを使ったエンドユーザ認証情報のフィッシング脅威」として分類されています。提案されている解決策は?
クライアントアプリがユーザに直接認証情報を求めることは避けるべきだ。加えて、エンドユーザはフィッシングや良い習慣について教育を受けることもできる。良い習慣は、たとえば信用できるクライアントにしかアクセスしないことだ。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 に少しでもアクセス権限のある職員に本来の権限より多い権限を取得させてしまい、本来アクセスできないはずのところに許可が下りてしまう危険があります。別の例では、仮に Facebook が GMail 用の 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 がたくさん見つかります。Google は OAuth の色々な利用方法を提案していますが、その中に、両方を一緒に使うことを広めるフローがひとつあります:
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 業界によくあるやり方で、この既に猛威をふるっている問題は、パレードの参加者がどんどん増えて、人が使っている手法や、使っている「と思う」手法をコピーしていくことで、とどまるところを知らない連鎖になっています。
おそらく、上記のサービスを使っているシステムのうち、この問題のせいで悪用可能なものは多数あることと思います。特にデスクトップアプリでは、コンパイルされたアプリのバイナリから秘密情報がそのまま取り出せることは、サービス側で何も危険なことを要求していなくてもよくあります。Google が OAuth の使い方を多数提供しているうちで、client_secret と redirect_uri を両方受け取るエンドポイントのことが書いてあるのはたったひとつだけだというのは重要な点です。少なくとも Google の場合、redirect_uri があっても、このエンドポイントをウェブブラウザベースのアプリには推奨していません。しかし、だからといって実際に独自ブラウザでそれを使う人や、このフローを標準的なブラウザ用のエンドポイントにコピーする人が一切いなくなるはずがありません。それに加え、Google は例外なのであって、世の中にはセキュアな OAuth フローを受け入れず client_secret (や同等品) を常に渡すよう要求する愚かなサービスが今も満ちあふれており、そのフローがウェブブラウザを通るときでさえも要求しているのです。さらに悪いことに、こうしたサービスの多くはユーザのウェブブラウザを通して「しか」利用できないのですが、これは後ほど詳述します。
https://www.wattpad.com/story/69872652-views-from-the-6-full-album-download
https://www.wattpad.com/story/69873085-views-from-the-6-album-download
https://www.wattpad.com/story/69873406-views-from-the-6-full-album-leaked
https://www.wattpad.com/story/69873878-views-from-the-6-album-leaked
https://www.wattpad.com/story/69874211-drake-views-from-the-6-full-album-download
https://www.wattpad.com/story/69874446-drake-views-from-the-6-album-download
https://www.wattpad.com/story/69874694-drake-views-from-the-6-full-album-leaked
https://www.wattpad.com/story/69874958-drake-views-from-the-6-album-leaked
https ://www. reddit .com/comments/4g4tn6/
https ://www. reddit .com/comments/4g4tnm/
https ://www. reddit .com/comments/4g4to5/
https ://www. reddit .com/comments/4g4tom/
https ://www. reddit .com/comments/4g4tov/
http://codepen.io/anon/pen/GZBwaa
https://www.strava.com/activities/554617197
https://issuu.com/sadnfgdsifyds/stacks/992655dc6de04fdfaef002471d9eaf04
http://paste.bradleygill.com/index.php?paste_id=1681526
http://fuzzywitchfestival.tumblr.com/post/143280497542/4g4tn6
http://definativepro.kinja.com/preview/4g4tn6-1772662723 はてな記法
https://www.wattpad.com/story/69872652-views-from-the-6-full-album-download
https://www.wattpad.com/story/69873085-views-from-the-6-album-download
https://www.wattpad.com/story/69873406-views-from-the-6-full-album-leaked
https://www.wattpad.com/story/69873878-views-from-the-6-album-leaked
https://www.wattpad.com/story/69874211-drake-views-from-the-6-full-album-download
https://www.wattpad.com/story/69874446-drake-views-from-the-6-album-download
https://www.wattpad.com/story/69874694-drake-views-from-the-6-full-album-leaked
https://www.wattpad.com/story/69874958-drake-views-from-the-6-album-leaked
https ://www. reddit .com/comments/4g4tn6/
https ://www. reddit .com/comments/4g4tnm/
https ://www. reddit .com/comments/4g4to5/
https ://www. reddit .com/comments/4g4tom/
https ://www. reddit .com/comments/4g4tov/
http://codepen.io/anon/pen/GZBwaa
https://www.strava.com/activities/554617197
https://issuu.com/sadnfgdsifyds/stacks/992655dc6de04fdfaef002471d9eaf04
http://paste.bradleygill.com/index.php?paste_id=1681526
http://fuzzywitchfestival.tumblr.com/post/143280497542/4g4tn6
http://definativepro.kinja.com/preview/4g4tn6-1772662723 はてな記法
https:// www. reddit. com/4fpkj3
https:// www. reddit. com/4fpkrs
https:// www. reddit. com/4fpkzz
https:// www. reddit. com/4fpla2
https:// www. reddit. com/4fpleb
https:// www. reddit. com/4fplj5
https:// www. reddit. com/4fplnn
https:// www. reddit. com/4fpls2
https:// www. reddit. com/4fplx9
https:// www. reddit. com/4fpm2a
https:// www. reddit. com/4fpm71
https:// www. reddit. com/4fpmb8
https:// www. reddit. com/4fpml5
https:// www. reddit. com/4fpmpw
https:// www. reddit. com/4fpmux
https:// www. reddit. com/4fpn22
https:// www. reddit. com/4fpn7e
https:// www. reddit. com/4fpncg
https:// www. reddit. com/4fpnio
https:// www. reddit. com/4fpnol
https:// www. reddit. com/4fpnsz
https:// www. reddit. com/4fpnz2
https:// www. reddit. com/4fpo33
https: // www. reddit. com /4fphqe
https: // www. reddit. com /4fphqe
https: // www. reddit. com /4fphqe
https: // www. reddit. com /4fphqe
https: // www. reddit. com /4fphqe
https: // www. reddit. com /4fphqe
https: // www. reddit. com /4fphqe
https: // www. reddit. com /4fphqe
https: // www. reddit. com /4fphqe
https :// www .reddit .com/4flokz
https: //www .reddit .com/comments/4fmve2/
https: //www .reddit .com/comments/4fmvem/
https: //www .reddit .com/comments/4fmvfa/
https: //www .reddit .com/comments/4fmvg0/
https: //www .reddit .com/comments/4fmvgi/
https: //www .reddit .com/comments/4fmvh4/
https: //www .reddit .com/comments/4fmvhh/
https: //www .reddit .com/comments/4fmvi4/
https: //www .reddit .com/comments/4fmvin/
https: //www .reddit .com/comments/4fmvj1/
https: //www .reddit .com/comments/4fmvjf/
https: //www .reddit .com/comments/4fmvjv/
https: //www .reddit .com/comments/4fmvk8/
https: //www. reddit. com/ 4f3vfo
https: //www. reddit. com/ 4f3vj8
https: //www. reddit. com/ 4f3vmp
https: //www. reddit. com/ 4f3vqf
https: //www. reddit. com/ 4f3vu0
https: //www. reddit. com/ 4f3vww
https: //www. reddit. com/ 4f3w05
https: //www. reddit. com/ 4f3w42
https: //www. reddit. com/ 4f3w85
https: //www. reddit. com/ 4f3wc0
https: //www. reddit. com/ 4f3wg2
https: //www. reddit. com/ 4f3wjs
https: //www. reddit. com/ 4f3wnh
https: //www. reddit. com/ 4f3wr8
https: //www. reddit. com/ 4f3wu7
https: //www. reddit. com/ 4f3wxs
https: //www. reddit. com/ 4f3x2l
https: //www. reddit. com/ 4f3x6r
https: //www. reddit. com/ 4f3xav
https: //www. reddit. com/ 4f3xe9
https: //www. reddit. com/ 4f3xia
https: //www. reddit. com/ 4f3xlu
https: //www. reddit. com/ 4f3xph
https: // www .reddit .com/ 4e8c7y
https: // www .reddit .com/ 4e8c7y
https: // www .reddit .com/ 4e8c7y
https: // www .reddit .com/ 4e8c7y
https: // www .reddit .com/ 4e8c7y
https: // www .reddit .com/ 4e8c7y
https: // www .reddit .com/ 4e8c7y
https: // www .reddit .com/ 4e8c7y
https:/ /www. reddit. com/ 4e70ke
https:/ /www. reddit. com/ 4e70n7
https:/ /www. reddit. com/ 4e70ps
https:/ /www. reddit. com/ 4e70t6
https:/ /www. reddit. com/ 4e70w2
https:/ /www. reddit. com/ 4e70zi
https:/ /www. reddit. com/ 4e712m
https:/ /www. reddit. com/ 4e7162
https:// www. reddit .com /4e6w86
https:// www. reddit .com /4e6way
https:// www. reddit .com /4e6we3
https:// www. reddit .com /4e6wh4
https:// www. reddit .com /4e6wku
https:// www. reddit .com /4e6wnc
https:// www. reddit .com /4e6wqg
https:// www. reddit .com /4e6wta