「xml」を含む日記 RSS

はてなキーワード: xmlとは

2017-03-19

http://anond.hatelabo.jp/20170319132149

日本のお役所PDF大好きなのは、知っている。霞ヶ関から吐き出される有効資料は、ほぼpdf

一方で、e-statなどでは、ネ申エクセルや方眼エクセルとは、別の方向でcsvデータを公開している。

今、株価が上昇しているIT企業様は、PDFhtmlとを比べるような使い方はしていないのでは?

世界は、IT企業htmlPDFとを比べたらどちらを重用しているのか?

  

googlejava script 推しのJQueryを良く使ってるし、これからは、人工知能時代からxml形式とか、マークアップ言語は、良く出てくると思うよ。

Facebookphpなんでしょう?リア充御用達で、Twitterよりも株価資本も安定している。

これからは、you tubeとかLINEみたいなツールがどんどん出てくるから、先のことは分からないよね。

オープンソースでもGit hubみたいなツールが使われているんだし。。  

そう言えば、perlcgiは、ほぼお亡くなりになりましたね。

2017-03-02

大手SIerの現状

Excelマクロなんて使ってないんだけど、Excel保存するときxmlがなんとかってエラーが出るなぁ」

大手SIerプロパー2名の会話が漏れ聞こえてきた。




それxmlじゃなくて、xlsmのことですか?

xlsxファイルの中身がxmlということを知らないんですか?

というか、xml自体知らないんですか?




こんな人達が、基幹系システム新規構築しようとしていることが恐ろしい。

こんな人達が作ったシステムを、使わされる人たちが哀れでならない。




完全に呆れてしまった。

2017-02-23

.iniファイル

このまえSIerPHPプロジェクトで、パラメーターを設定ファイルに外だししようって話になって「.iniファイルの読込ルーチンはどうする? だれか作れる? ○○さんがもってるかも」って話になってたから、PHPなら標準でxmljsonの読込関数がありますよって言ってみたけど「あ、こいつまた小難しいこと言ってる」みたいな空気になって流されたな。

ホットエントリ内閣府CSVやばいって記事で思い出した。

2016-11-06

http://anond.hatelabo.jp/20161105032504

かなり時代錯誤を感じる。ネタであって欲しい。もしかしてITリテラシー低すぎ?というか、好きなソフトウェアは何なんだよ。ノーカンプラ???

高い

"Excel" なら安い。アプリの数百円からデスクトップ版の1.5万程度。ていうか、¥14,526で売ってる。

https://www.amazon.co.jp/dp/B015SMNVAK/

重い

Excelが重いとかどれだけ糞スペ。

Windowsしか動かない

Mac, iOS, Android, ブラウザでOK。

よくバグる

それはExcelに限った話ではない。ソフトウェアである以上多少のバグはしゃーない。つかリソースが糞なせいじゃねーの?滅多に落ちないが。

検索性が悪い

イミフ普通に検索出来るだろ。

共有PCとかだと高確率で使えない(Excelが導入されてないから)

ブラウザでOK。

Markdown表現できるレベル資料とかもはや何のためにExcel使ってるのかわからない

それはExcelのせいじゃなくて使う人間馬鹿なんだろ。

タブ表示が面倒臭い

ショートカットご存知無い?馬鹿?ページスクロールも面倒臭そうだな。見なくていいよ。

バージョン管理システム管理した場合Diffが見にくい

それはそのバージョン管理システムが糞なんだろ。Diffを見るだけならWinMerge+xdocdiff普通にやすいが。馬鹿なの?

セル結合死ね

嫌ならマクロで一括解除&復元でもしろマクロからでも普通に扱えるし、イミフ。罫線も死んじゃうの?

Excel製ワイヤフレームとか手書きの方が多分まだ保守やす

知らんがな。使い方の問題だろ。ExcelじゃなくてWordならいいのか?馬鹿

お節介な補完がうざい

嫌ならOFFにしろよ。馬鹿

方眼紙死ね

Excel方眼より良いものがあれば使わないだろ。普及度、使い勝手トータルでExcel方眼より良いものがあればぜひ教えろ。

学生相手Office持ってる前提でいろいろ求める風潮

しろ、今の大学Office使わないところあるの?マジ?普通総合大学ならITの授業あるだろ??レポートOffice使うだろ???

それとも持ってるけど使えない脳足りん系?F欄なのかな。

つか、Excelの話じゃないのか?

AシートとBシートで別々の人が全く関係ない作業しててもマージするとコンフリクト起こる

形式(.xlsx)はXMLZIPで固めただけだから分解して好きにしろ

2016-10-27

つの間にかコボラーになりつつある

から個人しこしこやってた40代おっさんですが、そろそろコボラーみたいな位置になってきたなとつくづく思います

使える言語VCVBDelphiJavaPython、8086系アセンブラこんなところでしょうか。

これで引き合いがあるのはVBDelphiが使えることです。JavaEJB経験ありますおっさんはいらないのでしょう。

それはともかく需要があるのは良いことですから移植作業をするわけですね、しこしこと。

その頃の中小の開発現場なんてドキュメント残ってないことが多いですからコードを元に解析するわけです。

ACCESSやらMSSQL使っていても正規化とか全く考えていないだろうモノからなんとか書面に起こすわけです。

テーブル名がTBL0001とかそんな感じです。

それでもって次は変換プログラム作成です。

新しいUIを作る人(別の人です)の要望に合わせたようにxmlを出力するツールを作るわけですね。

ここ2年くらいずっと似たような仕事をしてきました。

著名なI○○さんやN○○に頼んだってところほど怪しい。

いや、お金貰ってますし同世代の尻拭いと考えればありなんですけど、昔のソフトってエクスポート考えてないの多すぎでしょ。

囲い込みなのだろうけど。

多分COBOLより長続きしないんだろうな、とは思っています

でもまぁ、仕事のあるうちは細々と便利屋として頑張ろうと思いますしこしこしこしこ

2016-10-25

gmailフィルタードメイン一括変更

会社メールドメインが変わることになって山のようなフィルターも全部変更しないといけなくなった

最初のいくつかは手動でやってたけどあまりにもめんどくてぐぐったらいいほうほう見つけた

フィルターxmlエクスポートしてドメイン部分を一括置換してそれをインポートすりゃいいらしい

脳汁出た

2016-10-20

RSSって何?

なんかどこのサイトいってもフォーマットであるとか更新されてるかどうかわかるとか購入とか色々書いてあるけどさっぱり分からん

例えばFacebookボタンとかならFacebookシェアするボタンとか用途と共に書いてある、ツイッターも同じだけど

RSS活用してる用途とかは全然書いてくれてない

一体設置したらどうなのかとかどう使われるのかとかそこんところ抜け落ちてフォーマットだとか言われてもまるで理解できない

Wikiでさえ3パターン意味の揺らぎがしょっぱなにあってさらに混乱する

 

RSSアールエスエス)は、"Rich Site Summary"の略で、サイト概要記述する為のXML形式文書です。 このRSS提供したり、提供されたRSSのことをRSSフィードRSS feed)といいます。」

いやこの説明じゃ全然分からんから

なんでこの説明説明できた気になってんの?

RSSが何らかのサービスによって使われる要素ならそのサービスの内容と運用方法も照らし合わせて説明してくれよ。

なんでITってたまにこういうとんちきな説明だけで済ませようとすんのかね。

ひょっとして頭悪いんじゃないの?

2016-07-18

Vimフィルタコマンドで使うUNIXコマンド

http://vim-jp.org/vimdoc-ja/change.html#filter



Vimにはフィルタコマンドといって、テキスト任意UNIXコマンドで処理するExコマンドが用意されている。

用意されていて、実際強力なんだけど、Vim組み込み機能で間に合うことも多くて、下記以外はあまり使っていない気がする。

以前はVim正規表現に慣れないからとPerlを使ってたりもしたけれど、Vim正規表現も悪くないかなとなって。こう。

何かおすすめUNIXコマンドがあったら教えてください。

bc

簡単計算をするときに使う。1行に計算式を書いて「:.!bc<CR>」あるいは「!!bc<CR>」とすると計算ができる。

(小数を扱いたいときは-lオプション指定する)

「<C-r>=」で代用できる。

sh

長めのコマンドを実行するときに使う。「:%!sh<CR>」とすると書いたシェルスクリプトを実行できる。

最近Bashの<C-x><C-e>で良い気がしてる。こちらだとヒストリで戻って<C-x><C-e>として再編集することもできるので。

column

簡単な整列をするのに使う。ビジュアルモード選択して「!column -t<CR>」とすると整列ができる。

(デフォルトのセパレータがスペース二つなので、一つにしたければ-oオプション指定して「!column -to' '<CR>」という風にする)

vim-easy-alignやvim-aligntaが入っているならそれでいいかも。

jq, xmllint, pup

それぞれJSONXMLHTMLを整形するのに使う。JSONは「:%!jq .<CR>」、XMLは「:%!xmllint --format -<CR>」、HTMLは「:%!pup<CR>」。

ただ「jq . <JSONファイル> | vim -」としていたりして、直接Vimの中で使ってない場合が多いかも。

awk

連番を振る時、重複行を削除する時、指定した列を抜き出す時、などなど、色々なことに使える。

それぞれ「:%!awk '{printf"\%-6d \%s\n",NR,$0}'<CR>」、「:%!awk '\!a[$0]++'<CR>」、「:%!awk '{print$2}'<CR>」といった風にする。

tee

保存するために管理者権限必要場合sudoと一緒に使う。「:%!sudo tee %<CR>」とすると保存できる。

編集中のテキストを何処かに残すため……と思ったけど:wで事足りる。

2016-07-03

Javaしかwebアプリ作ったことなかった俺がphp入門したんだけど

すげー楽でワロタ

つーかなんだよ、JSPって

なんだよ、ストラッツって

大体デプロイするのになんでwarの中に参照ライブラリ入れてくれないんだよ

なんでクラスファイル漏れることがあるんだよ

xml地獄ってなんだよ。

今は2016年だぞ。未来なんだぞ。いつまでもくだらねー仕事やらせんなや。もうJava案件やりたくねーんだよタコ。バーカバー

2016-06-11

初心者にはSaStrutsは難しすぎた

前回、JSP?を軽く勉強たから今回は、フレームワークを導入した。

とりあえずチュートリアルサンプルをimportした。

前回の教訓もあって、プロジェクトをimportしたあとプロジェクトのファセットから動的Webモジュールとして設定。

Warデプロイで動くかと思ったら

HTTPステータス 404 - /sa%dstruts%dtutorial/と文字化けっぽいエラー

困った。。。

プロジェクトのファセットの隣にランタイムってやつを発見Tomcatにチェックを入れてみたら

HTTPステータス 404 - /sa-dstruts-dtutorial/

文字化けが直った。

あとは、デプロイメントの記述子の設定を確認。ウェルカムページのweb.xmlが見当たらない…

プロジェクトの中にあるはずだけど、仕方ないから参照してるページにコピペ

Eclipseリフレッシュして、動かすと・・・

チュートリアルページきたああああああ!!!

Javaってのは難しい言語だ。なんで環境設定こんな複雑なんだろう

http://anond.hatelabo.jp/20160608115003

2016-05-29

富士通退職した話」に言及とついでに自分の話でも。

自分も前に富士通に居て既に退職してます。後で詳しく書くけど、ソフトウェア開発職に居たです。

富士通を退職した話

彼のへの感想

富士通はクソでっかい会社なんだし、サイト見ればメインフレームやってるのだって判るんだから、開発職を希望したらメインフレーム関連の開発やる可能性あるのは当然予見出来るだろうし、それを想像してなかったのなら情弱とかブコメで言われてしまうよね。あと何も記述が無いか想像だけど、「それほど有能ではない」と判断された可能性もある。と言っても学生が思う「開発者として有能かどうか」ってのと会社でのそれってのは別物で、要するに学生自身自分が実績もあって優秀だと思っても、会社的にはそうでないのよね。そうなると(後述の富士通入社して10年が経った人の話にもあるのだけど)新人能力客観的判断材料って大学資格応用情報レベル以上)程度なのよね。資格に関しても基本情報なんてMARCHクラス以上の人間なら受けたら取れて当然だから、「有能かどうか」の判断材料にならない。就活の際に本気でIT業界に入りたいかどうかの判断材料にはなる程度。自分の同世代富士通本体に入ってソフトウェア開発関連に配属された人のプロフィールを見たけど、確か偏差値的には少なくとも神戸大学とか千葉大学あたりの修士しか居なかった覚えがある。あと確か2~3人がソフ開持ってた気がする。だから、この増田がどの程度だったのかなと。

ただ、20人月案件が具体的に何かは判らないのだけど、自分の在籍していた当時でも炎上巨大案件というのはあって、(自分が知ってるのは確かデジタルテレビがどうのこうのとか言ってた)、そういうのに入社して間もなく入ってしまうと自身勉強等が出来なかったり潰されたり最悪死んだりするんで、そういう意味でも逃げるのは正解の一つ。(自分炎上案件に放り込まれ新人が寮で死んでたとか話を聞いたことある

上司対応はまあこれだけ見ればクソだわな。


富士通を退職して思うこと

はあ、としか。この人がこう判断した際の判断材料にするであろう自己体験を具体的に書いてないので、意識高い系がフカしてるようにしか見えない。あと、たった3年しか居なくてあの巨大企業経営とか体制とか理解出来るんかね?と思わないでもない。自分とは部署が違うだろうから当然かもしれないけど、自分体験とは違うなーって感じ。自分は、外から見たら馬鹿みたいな事やってるように見えるかもしれないけど、経緯や目的巨大企業特有問題があってそうなってるんだなって思う事が多々あった。


富士通に入社して10年が経った - blog

近い時期に入社したと思われる。具体的な話が自分経験と一致してる。特に富士通ソフトウェア開発と言えばミドルウェアの開発が主だというのは、富士通内部じゃないとなかなか(特に学生なんかじゃ)判らないかなと。

それでこれらの話を見てどんな人が富士通(というか大企業)に向くのかなと考えたんだけど、「やりたいこと」そこまで明確じゃないけどコンピュータは嫌いじゃないって感じで、地頭がまあまあ良くて勉強に関しても要領よくやれる(要するにそこそこの大学に行って卒業した人)、それでそこそこ安定した職・収入目当てな人かなと。ってコレ書いててふわふわしてる人みたいであまり良い印象の人物像じゃないな。マッチングミスはどうしても起きると思うし、学生の頃に思う「やりたい事」って往々にして変わったり間違いだったりするし、そもそも学生の頃に明確な「やりたい事」がある人の方が少数派でしょ。だからこういうそこそこ優秀だけどふわふわしてる人の方が良いんじゃないかなとか。逆に、ちゃんと「やりたい事」が明確にあるけどまあ安定はしたいって人はどうしたらいいのかって言うと、自分みたく大企業の子会社を狙うと良いんじゃないかなと。子会社ならその会社がやってる事が理解やすいし、入った後の配属の希望も大きく違ったものにはなりにくいし。まあ子会社子会社で色々アルかもしれないけど。

で、自分入社から退社までの話。

入社10年ぐらい前。入ったのは富士通の子会社で主にミドルウェアの開発をやっている所でした。入社して1~2年したら子会社の統廃合とのことで富士通本体連携してる部署自分がそうだった)は富士通本体になりますとのことで富士通本体の方に移ったという経緯ですね。別に待遇とか元々本体と同じだったから変わらず、事務関連が小回りきかなくなったぐらい。入社してから退職までは5年ぐらいでした。辞めた理由実家事業を継ぐ事にしたため。

入社して数ヶ月の時にある温泉地にある某所でその手の開発をやってる子会社沢山と

富士通本体ソフト開発配属の人達研修をやったのだけど、その際に富士通本体人達と知り合った。(この際に全員のプロフィール冊子が配られた)そのときは流石子会社に入る人達本体とじゃレベルが違うな~と思いましたね。(ちなみに自分MARCHより下の院卒。)

自分が配属されたのは某製品部署API部分チーム。その製品C言語Java言語からも使えるように出入り口を用意する部分。中でやってる事は指定されたIPポートプロトコルに沿ってデータ投げるだけなんだけどね。ちなみに配属希望の際は「そこそこの忙しさの所がイイ」と言っていました。「バリバリに働きたい」と言ってた同期は多忙ヤバい所に配属されてました。他にもチームがいくつかあったけど、それらのうちの一つは例の「山奥の工場」でしたね。自分が配属された当時はC言語APIリニューアルするって開発してたのだけど、設計担当Javaしかやったことない人で色々とC言語流儀に反してて後々のメンテが大変でした。まあそれでもリニューアル前よりは遙かに良くて、以前はユーザに見せてる関数名が ○○search1 ○○search2 ○○search3 とかでしたね(ちなみに機能はそれサーチか?思うのもあった)。もっと酷かったのが初期製品Javaの公開メソッドで、マニュアルには「このメソッド引数○○を□□を指定した場合戻り値Objectを△△にキャストしてください。××を指定場合は…」という「これ製品にして売ってたんだ…」と思うレベル。もちろんコレがダメだったってのは開発側も認識していて当時は既にリニューアル済みだったけど。リニューアル済みでも少し微妙だったけどね。

これは、ミドルウェアの開発をやってる人達って基本的C言語が主でJavaとかをやってる人がほぼ居なかったからだと思う。上司もそういうのは良くないってのは認識してた。対象OSWindowsLinuxSolarisだったけど、そんなにたいした事やってなかったからほぼ同じコードだったような。ソケットの一部だけ違ってたっけかな。

それでそのバージョンの開発が終わったあたりで、.NET Frameworkが出始めてきたので次バージョンでは.NET FrameworkAPIを作る事になりまして、自分が少し勉強していたのでそれの設計から担当する事に。当時は.NET Framework 1.1で今思えば少し時期が早かったと思う。2.0Genericが出てからやった方が良かったと思うんだけど、そういうの政治的判断だし結果論だしなー。それまでにRubyとかオブジェクト指向言語に触れてその辺の勉強もしていたので、.NET用のAPIに関しては設計実装結構良い感じに出来たと思う。ああ、そういえばRuby用のAPI効率化の開発ツールとかの名目仕事中に勝手に作ってたなあ。他にもC言語APIも内部実装がクソすぎ!とキレてユーザ公開関数インターフェースだけ同じで中身をフルスクラッチした事も。もちろん絶対LDしてるんで完全に趣味なんだけどな。これでAPIC言語Java.NETになった訳だけど、現場案件で使われたのってほぼ全てJavaだったと思う。(開発中のサーバテストアプリC言語だけど)。要するに自分が数年関わったコードが世の中ではほぼ使われてない訳でして、取りそろえとして必要だったとはいえ世の中の役に立ってないってのは嬉しくは無かったですね。まあ、大企業仕事なんてそういうもんです。.NETに関してはそのバージョンが出る頃はその製品があまり売れてなかったんだか使われたって話は聞かなかったですね。ほほほ。大企業に勤めるのならこういう覚悟必要かもね。

で、.NETAPIが出来たあたりに開発ネタがなくなって保守気味になってきたので、人員整理作業整理との事でインストーラと切りたいけど一度やったからには切れない補助製品担当が増える事に。インストーラWindowsがInstallShieldというクソみたいな言語上で作られたものLinuxSolarisシェルスクリプトのもので、InsallShieldの方のコードはあまりにクソなのでリファクタリングさせてもらった。この辺の開発は少なかったのだけど新OS対応(Vistaとか)とか保守作業が大変だった覚えある。

んで、これらの作業が終わったあたりでこの製品でやることが無くなってきたのと同時に、この製品派生製品の話が出てきてて、それは1機能1exeで提供されてて、それらを纏めるバッチ処理機能部分を担当することに。バッチ処理の内容・順番を記述するのにXMLを使う事になったのでXMLのパーサが必要なのだけど、色々調べたら富士通内部でパーサ作ってたのでそれをもらって使う事に。そのパーサはC++からじゃないと使えなかったのだけど、趣味C++勉強してたので何とかなった。あと、結構OSの知識(プロセスとか)が必要WindowsLinuxSolarisで動くコードを書く必要があってまあまあ大変でした(と言ってもifdefで切り分けるだけなんだけど)。けど、これらの開発は自分が一から設計してコードを書いていたので楽しかったですね。それでこれが完成するかしないかあたりで、このバッチ処理機能が他の開発中の製品バッチ処理に使えないかとか話が出てきたあたりで自分退職する事に。(退職の話は1年ぐらい前に話し合って決定済み)引き継ぎをして退職ということになりました。最後は溜まった有給を使う予定でまだ在籍中だけど部屋を引き払って実家に帰ってたのだけど、打ち合わせに来て欲しいって言われてしま実家から何日か通ったのは良い想い出。というかまさか実家から朝8時に間に合うとは思って無かった。

振り返ってみて残業時間は月40~60時間が多かったかな。100時間超えた時は上司に怒られた。あと退職前の1年ぐらいはうちの事業本部(だったかな?)単位残業禁止になってホント残業0時間になった時期があった。他の部署の人の話で、どう考えても狂ってる上司の話とかを聞いてると上司とかの運は良かったと思う。あと、やっぱり仕事でみっちりプログラミングが出来たのは運が良かったと思う。富士通ソフト開発で C C++ C# Java シェルスクリプト InstallShieldとか(そんなに深くはないけど)色々やれた人間はそうそう居ないんじゃないかな。同期とかの仕事は年上の人の派遣の人に指示出したり取り仕切ったりする仕事とか、保守サポートみたいな開発じゃない仕事の話も良く聞いていたので、ソフト開発のキモ体験出来たのは良かったです(こなみ)。

2016-04-26

anond:20160426145507 の続き

anond:20160426124418anond:20160426145507 の続きだゾ。てか長えよ

(略: トークンが定期的に期限切れになるので可用性が下がる。たとえばビデオカメラから複数動画アップロードしている途中で切れたらムキーってなる。再認証して途中からできるのもそれはそれで CSRF の温床。AFCP のような場合は期限切れがあってはならないので、パスワード等を預かる認証プロキシSaaS アプリを筆者は作った。好評だったが、これはもちろん本来あるべきでない欠陥のexploitのはず。)

(略: 個人ユーザ向けのAPI設計ばかりで、雇用者上司アカウント管理するという観点がない。SAMLでは普通にできるのに、OAuthとなるとセキュリティ的に云々と言って拒むサービスばかり。別のUIで既にできてることをAPIにしても意味がない。これまでできなかったことをAPIで可能にするのではなく、単なるシングルサインオンでよければ他にある。実際Googleは個人向けにはOAuth活用しているが、Google Apps for BusinessはOAuth以外のシステムを使っている。)

(略: 主要な設計ミスは、外部サービスすべてを同等に疑うところ。管理者が各サービスの信用性を判断して権限を調節できるようにしないところ。これまでどれほど多くの製品OAuthの面倒さのために失敗してきたことか。)

普通実装における」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 サービス作業できるか、そのサービスでどの操作を実行できるか、どの権限作業しなければいけないかを指定できます。この認証情報必要に応じて「アカウントホルダ」の人が破棄することもできます

AmazonAPI における認証承認技術には、本質的制限が多く潜在的危険性のあるリダイレクトを一切必要しません。Amazonプロトコル認証情報は、直接送ることは一切なく、データ署名に使うのであって、これでブラウザを通してパラメータを送る必要のあるときにも改竄不可能にすることができるのです。

Amazon設計アカウントの利用状況を API の利用まで適切に把握できますし、API認証承認もすべて Amazonからスタートし、その際のアプリ認証情報も「Amazon の」コントロールパネルから生成されます。この認証情報はその後、いかなるトークン交換システムも使わず直接 API プロセスで使われます。この設計なら「普通実装における」OAuth が達成している真のセキュリティ目標をすべて達成し、かつ前述したセキュリティ上およびユーザビリティ上の問題をすべて回避しています

ひとつ言及せざるをえない短所は、Amazon権限システムが幾分わかりにくく、あまりユーザに優しくないということです。ただし、このことは何故かほとんどのコントロールパネルにも言えることで、いずれにせよ UI 設計問題であって、承認プロセス自体の失点ではありません。さらに、Amazonコントロールパネルはかなりキビキビ使えて、それ自体API でも使えます。この点たとえば Google場合のように、筆者の知る限りメタ API もなく、何をするにも何十もの手順が必要なのとは大違いです。

Amazon認証および承認メソッドは他のサービスプロバイダにも幾つかコピーされていますGoogle 自身企業向け製品の一部でこれを利用できるようにしていますGoogle 自身純粋OAuth 設計企業サービスに向いていないことを認めており、企業サービスには JSON Web Tokens (JWT) の利用を推奨しています

JWT はサービス間の SSOAPI 利用を可能にする規格です。多くの点で JWT は SAML に似ていますが、SAML はややこしくて、XML Security (名前と違って、まったくセキュアではない) の上に構築され、API 利用に向いていないのに比べ、JWT は SAML の主要な目標を、単純かつ使いやす方法で一切の面倒なく達成しています。HMAC 実装ひとつ用意し、JSON の構築と解析の方法を知っておけば JWT は使えます既製品をお求めでしたら、膨大な JWT ライブラリが既に存在していますよ。

ただ Google場合典型的な JWT 利用法よりも高度で、HMAC のかわりに、もっと高度ですがこの分野では人気の低い RSA デジタル署名を利用するよう要求していますGoogleコントロールパネルではアカウント管理者自分企業サービス用に新しい鍵ペアを生成でき、API ログイン署名するために使う秘密鍵ダウンロードできます。こちらのほうが HMAC よりセキュリティは高いですが、Googleプロセス全体を本当に無駄に複雑化していますコントロールパネルしょっちゅう完全に再設計して、前と同じことをしたいのに使い方が違っていて混乱する点は言うまでもありません。JWT 利用の実例必要なら他をあたるようお勧めします。

他に使われている技術は、サードパーティがどんな権限必要としているかをある種の XMLJSON ファイル定義してウェブサイト送信できるようにするサービスのものです。ユーザがあるページを自分アカウント訪問し、ファイル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

http://no-oauth.insanecoding.org/

2016-03-04

window.OBR = window.OBR||{};(function(OBR){window.OB_releaseVer="01000501";window.OBR=window.OBR||{};OBR.k=OBR.k||;OBR.La=OBR.La||{};window.OBR$=function(d){return document.getElementById(d)};OBR.d=OBR.d||function(){var d={},a={v:function(){return d},h:function(a){d.X=a;d.cb=;d.startTime=(new Date).getTime()},startTime:function(){return d.startTime},log:function(a){var e=((new Date).getTime()-d.startTime)/1E3;1E3>d.cb.length&amp;&amp;d.cb.push(e+" >"+a)},printLog:function(){if(d.X.c.dj)window.console.log(d.cb.join("\n"));else{var a=d.X.b.Ia();a&amp;&amp;(a.innerHTML=d.cb.join("
"),a.style.display="block")}return d.cb.join("\n")}};a.h(OBR);return a}();OBR.printLog=OBR.d.printLog;OBR.H=function(){this.J=[]};OBR.H.prototype.add=function(d,a){var c;"string"===typeof d&amp;&amp;"function"===typeof a&amp;&amp;(c={},c.name=d,c.ai=a,this.J.push(c))};OBR.H.prototype.Qf=function(d){var a,c;OBR.d.log("remove event :"+d);a=0;for(c=this.J.length;a<c;a+=1)if(this.J[a]&amp;&amp;this.J[a].name&amp;&amp;this.J[a].name===d)try{this.J.splice(a,1)}catch(e){OBR.d.log("rm evnt err: "+e)}};</p&gt;

OBR.H.prototype.o=function(d,a,c){var e,b,f,g;a=a||[];c=!!c;OBR.d.log("event fire:"+d);e=0;for(b=this.J.length;e<b;e+=1)if(f=this.J&amp;&amp;this.J[e]?this.J[e].name:"",g=this.J&amp;&amp;this.J[e]?this.J[e].ai:null,f===d&amp;&g)try{g.apply(this,a)}catch(h){OBR.d.log("fire event *"+d+"* error: "+h)}!0===c&amp;&amp;this.Qf(d)};OBR.H.prototype.sa=function(){this.J=[]};OBR.b=OBR.b||function(){var d={},a={},c=document,e=OBR,b=null;a.v=function(){d.X=e;return d};a.h=function(a){e=a};a.Ba=function(){return function(){}};a.Gi=function(){var a=window.jQuery;return void 0!==a?!(/1\.(0|1|2|3|4)\.(0|1)/.test(a.fn.jquery)||/^1\.1/.test(a.fn.jquery)||/^1\.2/.test(a.fn.jquery)||/^1\.3/.test(a.fn.jquery)):!1};a.F=function(a){return null===a||isNaN(a)?null:e.n("outbrain_widget_"+a)};a.Ia=function(){return e.n("ob_holder")};a.ne=function(f){var g=a.Ia();null===g&amp;&amp;(g=e.b.createElement("div",</p&gt;

"ob_holder"),g.style.display="none",f?e.b.insertBefore(g,f):document.body.appendChild(g));return g};a.Vc=function(){if(!e.n(e.c.Pb)){var f=e.b.createElement("iframe",e.c.Pb),g=f.style;g.display="none";g.width="1px";g.height="1px";f.src="about:blank";(g=a.Ia())||(g=a.Va());e.b.Q(f,g)}};a.Va=function(){if(c.body)return c.body;var a;a=e.b.K("","","body",!0);return 0>=a.length?c.lastChild:a[0]};a.createElement=function(a,g,b,e){var d;a=c.createElement(a);"string"===typeof g&amp;&amp;a.setAttribute("id",g);"string"===

typeof b&amp;&amp;(a.style.cssText=b);for(d in e)e.hasOwnProperty(d)&amp;&amp;a.setAttribute(d,e[d]);return a};a.G=function(a){if(e.c.$d===e.c.Od)try{c.createStyleSheet().cssText=a}catch(g){OBR.d.log(g)}else{var b=c.createElement("style"),d=c.body?"string"===typeof c.body.style.WebkitAppearance:!1;b.type="text/css";c.getElementsByTagName("head")[0].appendChild(b);b[d?"innerText":"innerHTML"]=a}};a.N=function(a,g,b,d){var m=c.createElement("script");m.type=e.c.wj;m.src=a;m.charset="UTF-8";m.async=!!g;m.defer=!1;b&amp;&amp;

e.b.s(m,"load",function(a){var f=a.target;f&amp;&amp;setTimeout(function(){f.parentNode.removeChild(f)},3E3)});d&amp;&amp;e.b.s(m,"load",d);return m};a.Cl=function(a,g){var b=e.b.createElement("link",a);b.setAttribute("rel","stylesheet");b.setAttribute("type",e.c.Eh);g&amp;&amp;b.setAttribute("href",g);return b};a.ih=function(a){var g=e.n("ob_iframe");g&amp;&amp;(g.src=a)};a.Hf=function(){var a;a=isNaN(a)?1E5:a;return Math.floor(Math.random()*a)};a.nk=function(a,g,b){return a.replace(g,b)};a.Ll=function(){var f;if(f=OBR.n("objsonpp"))if(a.kj())a.Ka(f.parentNode)&amp;&amp;

f.parentNode.removeChild(f);else return OBR.n("objsonpp");f=c.createElement("iframe");f.id="objsonpp";f.tk&amp;&amp;(f.tk="seamless");(f.frameElement||f).style.cssText="width: 0; height: 0; border: 0";f.src="";c.body.appendChild(f);return f};a.R=function(a){var g,b;b=c.getElementsByTagName("head");try{b&amp;&amp;0<b.length?b[0].insertBefore(a,b[0].firstChild):(g=c.getElementsByTagName("script"),g[0].insertBefore(a,g[0].firstChild))}catch(d){e.d.log("Err insertToHead:"+d)}};a.Kl=function(a){a=a||OBR;return"function"!==</p&gt;

typeof a.H?(OBR.d.log("namespace.EventManager not function"),null):new a.H};a.O=function(a){return encodeURIComponent(a)};a.Ka=function(a){return null!==a};a.pj=function(f){var b,c=!1;if(a.Zc(f))return!1;b=f.Oe().recMode||"";f=f.Oe().dynamicWidgetLayout||"";b=e.c.rk[b]||"";"2"===b&amp;&amp;"1"===(e.c.sk[f]||"")&amp;&amp;(c=!0);c||"1"!==b&amp;&amp;"3"!==b||(c=!0);return c};a.Zc=function(a){return void 0===a||null===a};a.tj=function(b){return a.Zc(b)||""===b};a.getElementsByClassName=function(b,g){g||(g=document);return g.getElementsByClassName?

g.getElementsByClassName(b):a.K("class",b,"*",!0,!0,g)};a.K=function(b,g,e,d,m,l){var p,q,n;p=[];e=e||"*";d=!!d;m=!!a.tj(m);e=l?l.getElementsByTagName(e):c.getElementsByTagName(e);l=0;for(q=e.length;l<q;l+=1)n="class"===b?e[l].className:e[l].getAttribute(b),null!==n&amp;&amp;(!1===m&amp;&amp;(n=n.toLowerCase(),g=g.toLowerCase()),(n=""===b?!0:d?-1<n.indexOf(g):n===g)&amp;&amp;p.push(e[l]));return p};a.Wb=function(a,b,c){a.detachEvent?a.detachEvent("on"+b,c):a.removeEventListener&amp;&amp;a.removeEventListener(b,c,!1)};a.s=function(a,</p&gt;

b,c){a.attachEvent?a.attachEvent("on"+b,function(){c.call(a)}):a.addEventListener&amp;&amp;a.addEventListener(b,c,!1)};a.Q=function(a,b){try{b.appendChild(a)}catch(c){e.d.log("Fail insert into Dom:"+c)}};a.lb=function(b){b=e.n(b);!a.Zc(b)&amp;&amp;a.Ka(b.parentNode)&amp;&amp;b.parentNode.removeChild(b)};a.insertBefore=function(a,b){return b.parentNode.insertBefore(a,b)};a.isArray=function(a){return a instanceof Array?!0:"[object Array]"===Object.prototype.toString.call(a)};a.sb=function(a,b){var c=/htt(p|ps)?:\/\/127\.0\.0\.1(:\d\d\d\d)?/i;

return/^htt(p|ps)?:\/\/([\w\-]*|[\w\-]*\.[\w\-]*)\.outbrain\.com(:\d\d\d\d)?/i.test(a)||c.test(a)?a:b};a.al=function(a){a=a.replace(/^(\s*)/g,"");var b=c.createElement("div");b.innerHTML=a;return b.childNodes};a.Ua=function(a,b){return a?a.getAttribute(b):null};a.xa=function(a,b,c){a&amp;&amp;a.setAttribute(b,c)};a.I=function(a,b){var c=RegExp("[ '\"|]"+b+"[ '\"|]");a&amp;&amp;!c.test("|"+a.className+"|")&amp;&amp;(a.className+=" "+b)};a.ma=function(a,b){a&amp;&amp;typeof b===e.c.$k&amp;&amp;(a.classList?a.classList.remove(b):a.className=

a.className.replace(RegExp("(^|\\b)"+b+"(\\b|$)","gi")," "))};a.$=function(a,b){a=a.replace(/[\[]/,"\\[").replace(/[\]]/,"\\]");var c,e;try{return c=RegExp("[\\?&amp;]"+a+"=([^&amp;#]*)","i"),e=c.exec(decodeURIComponent(window.location.href.replace(/\+/g," "))),null===e?b:e[1]}catch(d){return b}};a.sh=function(a){"string"===typeof a&amp;&amp;0<a.indexOf("#")&amp;&amp;(a=a.substr(0,a.lastIndexOf("#")));return a};a.ie=function(a){var b=e.c.ga+"/strip_default.png";a.src!==b&amp;&amp;(a.alt="",a.title="",a.src=b)};a.Oh=function(){var a=</p&gt;

null,b,e,d=null;if("string"===typeof window.OB_MP_feed)a=window.OB_MP_feed;else if((b=c.getElementsByTagName("head"))&amp;&amp;0<b.length)for(e=b[0].getElementsByTagName("link"),b=0;b<e.length;b+=1)if(d=e[b],null!==d.type&amp;&amp;("application/rss+xml"===d.type||"application/atom+xml"===d.type)&amp;&amp;null!==d.href&amp;&amp;""!==d.href){a=d.href;break}return a};a.D=function(a,b){var c=null;a.currentStyle?c=a.currentStyle[b]:window.getComputedStyle&amp;&amp;(c=document.defaultView.getComputedStyle(a,null).getPropertyValue(b));return c};</p&gt;

a.xk=function(){var b=a.Ia(),g,c;a.Ka(b)&amp;&amp;(g=e.b.createElement("span","ob_a"),a.insertBefore(g,b),g.innerHTML=".",c=a.D(g,"color"),a.lb("ob_a"),g=e.b.createElement("a","ob_a"),g.setAttribute("href","void(0)"),g.innerHTML=".",a.insertBefore(g,b),b=a.D(g,"color"),a.lb("ob_a"),c="rgb(0, 0, 0)"===c||"#000000"===c?"#555":c,a.G(".ob-tcolor{color:"+c+"} .ob-lcolor{color:"+b+"} .ob-bgtcolor{background-color:"+c+"} .item-link-container:hover .ob-tcolor{border-color:"+c+"} "+(document.addEventListener?"":".odb_li:hover .ob-zapping-icon,.odb_div:hover .ob-zapping-icon,.item-container:hover .ob-zapping-icon,.ob-dynamic-rec-container:hover .ob-zapping-icon,.odb_li:hover .ob-textual-zapping-icon,.odb_div:hover .ob-textual-zapping-icon,.item-container:hover .ob-textual-zapping-icon,.ob-dynamic-rec-container:hover .ob-textual-zapping-icon{display:none !important;}")))};

a.Ke=function(b){var g=a.Ie("property","og:url","meta","content");null===g&amp;&amp;(g=a.Ie("rel","canonical","link","href"));null!==g||b||(g=window.location.href);null===g&amp;&amp;(g="");return g};a.Ie=function(b,g,c,e){var d=null;b=a.K(b,g,c,!1);null!==b&amp;&amp;0<b.length&amp;&amp;(d=b[0].getAttribute(e));return d};a.jh=function(b){var g,c,d;g=b.g("tracking",!1);c=b.g("comScoreEnabled",!0);d=e.c.je;!1===g&amp;&amp;(!0===c&amp;&amp;!1===d&amp;&amp;!b.Pe())&amp;&amp;(a.Vc(),g=b.q("pid",""),b=e.n(e.c.Pb))&amp;&amp;(b.src=e.c.ga+"/"+e.c.Ub+"3rd/comScore/comScore.htm#pid="+</p&gt;

g,e.c.je=!0)};a.Ei=function(){var b=a.Lb(8);"string"===typeof window.name&amp;&amp;(""===window.name||-1<window.name.indexOf("frame"))?(window.name=b,b=window.name):"string"===typeof window.name&amp;&amp;""!==window.name&amp;&amp;(b=window.name);return b=e.b.O(b.substring(0,9))};a.Lb=function(a){var b,c;b=[];a="number"===typeof a?a:8;for(c=0;c<a;c+=1)b.push("0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz".charAt(Math.floor(61*Math.random())));return b.join("")};a.me=function(a){for(var b="",c=0;c<a.length;c++)b=</p&gt;

b.concat(a[c]?"1":"0");return parseInt(b,2)};a.Xc=function(b){var g=b.getElementsByTagName("a")[0];if(null===b.offsetParent||0===b.offsetHeight||0===b.offsetWidth||0===b.clientHeight||0===b.clientWidth||"none"===a.D(b,"display")||"hidden"===a.D(b,"visibility"))return!1;var c=parseInt(a.D(b,"padding-top"),10)+parseInt(a.D(b,"padding-bottom"),10);return 0===b.clientHeight-c||g&amp;&amp;"none"===a.D(g,"display")?!1:!0};a.Oc=function(a){for(var b in e.La)if(e.La.hasOwnProperty(b)&amp;&amp;e.La[b].l===a)return e.La[b];

return null};a.Rl=function(a){for(var b in a)if(a.hasOwnProperty(b))return!1;return!0};a.Ga=function(a,b){return"function"!==typeof a?null:void 0===b?a():a(b)};a.kj=function(){return"Microsoft Internet Explorer"===navigator.appName};a.Fh=function(a,b){return a*b};a.Ge=function(a){if(!a||""===a)return[];a=a.replace("","").replace("http://","").replace("https://","").replace("www.","").replace("www2.","").split("/");a.pop();return 0<a.length?a:[]};a.ki=function(b,g){var c=a.Ge(b),e=[],d="";if(g>=c.length)d=

c.join(".");else{e[0]=c[0];for(d=1;d<=g;d+=1)e[d]=c[d];d=e.join(".")}return d};a.ti=function(){return"http"+("https:"===c.location.protocol?"s":"")};a.si=function(){var b,g;b=c.getElementById("widgetVersionSync");null===b&amp;&amp;(b=a.createElement("iframe","widgetVersionSync"),g=a.createElement("div",null,"display:none; height:0px; width:0px; border:none;"),g.appendChild(b),a.Va().appendChild(g));return b};a.ql=function(b){var g;g=window.OB_releaseVer;isNaN(g)||(isNaN(b)||g>=b)||(b=a.ti()+"://widgets.outbrain.com/external/sync/outbrainjs.html?needToBeVer="+

b.toString(),g=a.si(),g.src=b)};a.Sg=function(b){b=b.g("widgetVersionSync",0);isNaN(b)||""===b||(b=parseInt(b,10)||0,a.ql(b))};d.Rc=function(){if(b)return b;var a;try{var g=window.localStorage;g.setItem("OBtst","");g.removeItem("OBtst");a=g}catch(c){a={$b:{},setItem:function(a,b){this.$b[a]=b},removeItem:function(a){this.$b[a]=void 0},getItem:function(a){return"undefined"!==typeof this.$b[a]?this.$b[a]:null}}}return b=a};a.hg=function(a,b){d.Rc().setItem(a,b)};a.Qc=function(a){return(a=d.Rc().getItem(a))?

a:null};a.Gh=function(){d.Rc().removeItem("OB-USER-TOKEN")};a.h(OBR);return a}();OBR.ya=function(d,a,c,e,b,f,g,h,k){var m,l;m=this;l=0;k="function"===typeof k?k:OBR.b.Fh;m.start=function(){var p;l+=1;OBR.b.Ga(d,l)?OBR.b.Ga(a,l):(p=OBR.b.Ga(h,l))?OBR.b.Ga(e,l):(p=l===f&amp;&amp;1E3!==f)?OBR.b.Ga(e,l):(OBR.b.Ga(c,l),p=g?k(l,b):b,setTimeout(function(){m.start()},p))};m.start()};OBR.re=OBR.re||{fj:function(){return"complete"===document.readyState}};

OBR.Hc=function(){var d={},a=[];d.add=function(c){a.push(c)};d.remove=function(c){a.splice(c,1)};d.top=function(){return 0<a.length?a.shift():null};d.jj=function(){return 0>=a.length};d.Jl=function(){return a};d.qh=function(){a=[]};return d};

OBR.Ra=function(){function d(e,b){a.pb="resolve"===e?function(a){a&amp;&amp;a(b)}:function(a,g){g&amp;&g(b)};a.Pa=a.kk=function(){throw Error("Promise already completed.");};for(var f,g=0;f=c[g++];)f[e]&amp;&amp;f[e](b);delete c}var a={},c=[];a.pb=function(a,b){c.push({resolve:a,reject:b})};a.Pa=function(a){d("resolve",a)};a.kk=function(a){d("reject",a)};return a};

OBR.Ag=function(d){var a={},c=null,e,b;a.onClickOrAutoplay=void 0;a.onDisplayReady=void 0;a.onError=void 0;a.fetch=function(a){null===c?(c=a,b&amp;&amp;b(c,this),b=null):(c=a,OBR.Ja.of([this]))};a.shown=function(a){e=a;OBR.Ja&amp;&amp;OBR.Ja.pl(d.widgetId,d.playerId,e)};a.stopTimer=function(){if(this.tg){window.clearInterval(this.tg);var a=document.querySelector('[data-ob-player-id="'+d.playerId+'"] .timerNumber');a&amp;&amp;(a.textContent=a.parentElement.getAttribute("data-time"))}};a.placed=function(){OBR.Ja.ol(d.playerId)};

a.uj=function(a){b=a;c&amp;&amp;b(c,this)};a.Ue=function(){return d};a.Hl=function(){return e};a.Nl=function(){return d.when};return a};OBR.Fg=function(){var d={},a="00.000",c=null,e=null,b=0;d.start=function(){null===c&amp;&amp;(c=new Date);null!==e&amp;&amp;(b+=new Date-e)};d.stop=function(){var f=new Date(new Date-c-b),g=f.getUTCSeconds(),f=f.getUTCMilliseconds();e=new Date;return a=(9<g?g:"0"+g)+"."+(99<f?f:9<f?"0"+f:"00"+f)};return d};</p&gt;

OBR.rd=OBR.rd||function(){function d(){var a=window;a.googletag=a.googletag||{};a.googletag.cmd=a.googletag.cmd||[]}function a(a,g,c,e){var d=window;d.$revee&amp;&amp;d.googletag.cmd.push(function(){d.$revee.track({obpid:a,obsid:g,obdid:c,obpu:e});b.d.log("revee fire:"+e);b.d.log("revee fire id:"+c)})}var c={},e=!0,b;c.h=function(a){b=a;c.cc={}};c.Yb=function(f){if(f&amp;&amp;!1!==f.g("activateRevee",!1)){d();var g=f.q("pid",0),h=f.q("sid",0),k=f.q("did",0),m=f.ka();e||c.cc[k]?e&amp;&amp;(e=!1,f=b.b.N(b.c.U+"rva.outbrain.com/analytics-v1.js",

!0,!0,function(){m=document.location.href;a(g,h,k,m)}),b.b.R(f)):a(g,h,k,m);c.cc[k]||(c.cc[k]=!0)}};c.B=function(){e=!0;c.cc={}};c.h(OBR);return c}();OBR.c=OBR.c||function(){var d={},a={},c=OBR,e;a.Cg="opera";a.Od="msie";a.zg="firefox";a.xg="chrome";a.Eg="safari";a.Bg="mozilla";a.Al="boolean";a.$k="string";a.Vl="object";a.gl="undefined";a.Ul="number";a.Pb="ob_iframe";a.$e=!0;a.Ff=0;a.ec="outbrain_widget_";a.wj="text/javascript";a.Eh="Permalink | トラックバック(0) | 23:14

2015-12-30

Excelが最強格闘技である

今、ちょうどExcelを使っている所でこれを書いている。

何故書いているかというと、XMLデータインポートを待っているからだ。


若い時は、Excelで全てをこなそうとする日系企業、はたまたドメ会社を心の底からバカにしていたのだが、年月が経ち、結果としてExcel最強説を私めが、提唱させていただきたい。


Excelが嫌いだった理由は、1 ダサい 2 ダサい 3 ダサい 4 経理じゃないんだから 5 これだけ洗練された仕組みがあるのにExcel使ってるの? 6 ダサい 7 重い

…などなどの理由である


昔の自分へ、反駁を試みたい。


Excelの素晴らしい所

・大抵の会社と人が使っている (若しくは互換性のある仕組みを使っている)


大学研究室であれば、実験的なものを使うことでもよかろう。しか社会はそうなっていないのだ。近所の八百屋も取り敢えず使い方は分からないまでも、Excelが入っているものなのだ

これは大きい。

逆に言うと、これだけ日本で浸透しているからこそ、ダサいとも言えるのだが。


Excel方眼紙

よくExcel方眼紙否定論者を見かける。こういう奴らは、Excel方眼紙の利点を理解していない。Wordでやってみろ。計算スムースに出来ないではないか。結果Excelで良いのである


・もはや表計算ソフトではなく、Officeのものである


Excel否定論者は、否定したいがあまり過去Excelイメージしか持っていない。実際長いこと使っていると、Excel表計算ではなく簡易的なデータベースとして大きく進化していたり、フォーマットの違うファイルを取り敢えず一回Excelに入れて吐き出しをさせるなど、文字列の扱いが遥かに得意になっていることに驚きを禁じ得ない。


VBAや数式など

以前はマクロ信者をただの狂信者だと思っていた。今でも一部はそうである。なぜならマクロ信者や数式教徒は、可読性を一切考えないオナニーしかしないからである

しかし中級程度まで熟達すると、多くのオフィスワーカーを不要にしてしまうすぐれものである


そろそろ30M程度のXML直感的に操作するためにインポートも終わる。もちろんこれだけ言ってもExcelダサいダサいがゆえに枯れている素晴らしい仕組みなのである


#加筆

しかし、逆に汎用的なツールになってきた事で、かなり重くなりつつあり、複雑な事をしないものGoogleスプレッドシート最近移管した。色々難しいもんである

2015-11-12

参考訳:拡散したJavaシリアル化の脆弱性についてApache Commons声明

原文:https://blogs.apache.org/foundation/entry/apache_commons_statement_to_widespread

原題Apache Commons statement to widespread Java object de-serialisation vulnerability

翻訳日:2015年11月12日(午後にタイトル日本語しました)

----

2015年11月1日 火曜日

Apache CommonsJavaオブジェクトのデシリアライゼーション脆弱性に関するステートメント

著者:Bernd Eckenfels(コミッター), Gary Gregory(Apache Commons副責任者)


AppSecCali2015 でGabriel Lawrence (@gebl) と Chris Frohoff (@frohoff) によって発表された "Marshalling Pickles - how deserializing objects will ruin your day" は、信頼されないソースからシリアル化されたオブジェクトを受け取るときセキュリティ問題をいくつか明らかにしました。主な発見は、Java オブジェクトシリアライゼーション(訳注:seriarization/シリアル化/直列化=ネットワークで送受信できるようにメモリ上のオブジェクトデータバイト列で吐き出すこと。シリアル化されたJava オブジェクトRMIなどのリモート通信プロトコル使用される。)を使用する際に任意Java関数の実行や操作されたバイトコードの挿入さえもを行う方法説明です。


Frohoff氏のツールである ysoserial を使って、Foxglove Security社のStephen Breen (@breenmachine) 氏はWebSphereJBossJenkinsWebLogic、OpenNMSといった様々な製品調査し、(http://foxglovesecurity.com/2015/11/06/what-do-weblogic-websphere-jboss-jenkins-opennms-and-your-application-have-in-common-this-vulnerability/) に各々の様々な攻撃シナリオ記述しています

両者の調査活動は、開発者Javaオブジェクトシリアライゼーションに信頼を置きすぎていることを示しています認証前のシリアル化されていないオブジェクトにも。

Javaにおけるオブジェクトのデシリアライゼーション(訳注:de-serialization/非直列化=ソフトウェアで扱うことができるように、送受信されたデータを元に戻すこと)が行われるとき、大抵は想定された型にキャストされ、それによって、Javaの厳しい型のシステムが、得られた有効オブジェクトツリーだけを保証しています

不幸にも、型のチェックが起こるまでの間に既にプラットホームコードが生成されて、重要ロジックは実行されてしまっています。そのため、最終的な型がチェックされる前に、開発者コントロールを離れた多くのコードが様々なオブジェクトの readObject() メソッドを通じて実行されてしまます脆弱性のあるアプリケーションクラスパスから得られるクラスの readObject() メソッドを組み合わせることで、攻撃者は(ローカルOSコマンドを実行するRuntime.exec()の呼び出しを含めて)機能を実行することができます

これに対する最も良い防御は、信頼されていないピア通信相手)とは複雑なシリアルプロトコルを使うことを避けることです。ホワイトリストアプローチ http://www.ibm.com/developerworks/library/se-lookahead/実装するように resolveClass をオーバーライドするカスタム版の ObjectInputStream を使うと、影響を制限することができますしかしながら、これは常にできることではなく、フレームワークアプリケーションサーバがエンドポイント提供しているような時にはできません。簡単な修正方法がなく、アプリケーションクライアントサーバプロトコルアーキテクチャを再検討する必要があるため、これはかなり悪いニュースです。

これらのかなり不幸な状況において、エクスプロイトのサンプルが見つかっています。Frohoff氏は、 Groovy ランタイムSpringフレームワークApache Commons コレクションからクラスを組み合わせるサンプルのペイロードに gadget chains (ガジェット・チェーン)を見つけています(訳注:provided)。これはこの脆弱性エクスプロイトのためにより多くのクラスを組み合わせられることは完全に確実なことで、しかし、これらは今日攻撃者が簡単に得られるチェーンです。

(Twitter画像)https://blogs.apache.org/foundation/mediaresource/ce15e57e-94a4-4d7b-914c-8eb8f026659c

この脆弱性のために利用される(訳注:blamed)ことができない確かな機能実装するクラスができ、安全性が信用できないコンテキストにおけるシリアル化を利用されないようにするような既知のケースの修正ができたとしても、少なくとも分かったケースだけでも継続的修正していくことが要求されますモグラ叩きゲームを始めるだけであるかも知れませんが。実際にはこれは、オリジナルチームが Apache Commons チームに警告が必要だと考えていない理由で、それゆえに比較的、活動開始が遅れました。

Apache Commons チームは InvokerTransformer クラスのでデシリアライゼーションを無効化することによって commons-collection の 3.2 と 4.0 のブランチにおける問題対処するために、チケット COLLECTION-580(http://svn.apache.org/viewvc/commons/proper/collections/branches/COLLECTIONS_3_2_X/src/java/org/apache/commons/collections/functors/InvokerTransformer.java?r1=1713136&r2=1713307&pathrev=1713307&diff_format=h) を使っています議論されているやるべきことのアイテムは、変化させる仕組み毎(per-transformer basis)に、プログラマティックに有効にするような機能提供するかどうかです。

これには前例がありますOracle と OpenJDK JRE の一部であったり、バイトコードを挿入して実行することを許したりする com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl クラスで、セキュリティマネージャー定義されているとデシリアライゼーションを拒否します。

これはシステムプロパティ jdk.xml.enableTemplatesImplDeserialization=true とすることで無効にできますApache Commons Collection は、本来よりもこの実行モデルは一般化していないため、セキュリティマネージャー存在独立したこの機能無効化することを計画しています

しかしながら、明確化のために述べておくと、この便利な"ガジェット"は、唯一知られている方法でもなければ、特に未知のものでもありません。そのため、インストールされたものを強化されたバージョンApache Commons Collection に置き換えることが、アプリケーションをこの脆弱性に対抗できるようにするわけではありません。

このブログポストレビューのために Gabriel Lawrence に感謝したいと思います

Apache Commons Collection は、Java コレクションフレームワークに加えて追加のコレクションクラス提供する Java ライブラリです。InvokerTransformerコレクションにあるオブジェクトを(特にリフレクション呼び出しを通じてメソッドを呼び出すことで)変換するために使うことができる Transformer ファンクションインターフェース実装の一つです。

一般のSallyによる2015年11月10日午前10字15分にポスト | コメント[1]

コメント

OracleWeblogicセキュリティアラートを発行しています

http://www.oracle.com/technetwork/topics/security/alert-cve-2015-4852-2763333.html?evite=WWSU12091612MPP001

提供されている回避策は、T3プロトコルへのアクセス(とリバースプロキシーにおけるT3メソッドフィルタリング)です。

2015-11-04

一太郎ビューアが高性能

http://anond.hatelabo.jp/20151104181322

どうやら、あるようだぞ。再現性次第では MS Word viewer も要らなくなる??

http://www.justsystems.com/jp/download/viewer/ichitaro/

 一太郎ビューアで読み込めるファイル形式一太郎Ver.2以上のファイル一太郎11以上の圧縮ファイル(jtdc,jttc)
 ・一太郎2004以上の電子署名セキュリティ文書(jtsd)
 ・Microsoft Word 2013~Ver5(doc/docx)
 ・Lotus 1-2-3(123/WK4/WK3/WJ3/WJ2、Ver98まで)
 ・リッチテキスト形式(rtf)
 ・テキスト形式txt)
 ・XMLテンプレートクリエーターファイル(jtdx)
 ・OpenDocument(odt)

2015-10-30

http://anond.hatelabo.jp/20151030101330

XMLに変換する前にexcelだったりするのはあるあるだぜ。

いまだとgoogle スプレッドシートなんかが良く使われるらしいが、ワイはiCloud上で動くnumbersお勧めしたい。

CSVとかに出せて更にはwebでも編集できてiOS端末とかでも観られるんだぜ。

http://anond.hatelabo.jp/20151030042729

現役のプログラマーさんとのことで質問があります


ゲームデータ管理ややりとりってどんなものを使ってます

敵やプレイヤーステータスアイテム効果説明文とかの。


例えばゲーム内ではSQLiteプランナーとのやりとりではExcelとか。


以前にプレイしていたゲーム攻略Wiki生データっぽいのが書き込まれ

ことがあって、それがxmlだったらしくて普段はどんなツールを使用してるのが

疑問だったので。

2015-10-24

http://anond.hatelabo.jp/20151024023259

そんなのは問題じゃない。

それよりひどいのはETMLがXMLとしてまったく整形式(Well-Formed)になってないこと。読んでて気持ち悪くて気持ち悪くて仕方がない。あの部分だけでいいから、だれか直してくれないかな。

2015-08-31

今はまだつらい人へ

8/31でニコ生の配信終わっちゃいますね。

見たいんだけど、今はまだ気持ちの整理がついてない。

でも今日で消えちゃうのどうしよう。


って人の手助けになればいいと思います

今見るのが辛かったら、あとから見てもいいじゃない。


ニコ生 タイムシフト録画あたりで検索して

http://ch.nicovideo.jp/nico-lab/blomaga/ar8759

http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q12134841282

この辺のページ見て?ってなってる人にわかやすいようにまとめただけなので、すでにわかってる人は読んでもあん意味ないと思います。すいません。


※注意

この話を読む大前提として「OSWindows」で「ファイル拡張子を表示する」設定にしてください。

Windows7の人

http://121ware.com/qasearch/1007/app/servlet/qadoc?QID=013547

Windows8/8.1の人

http://121ware.com/qasearch/1007/app/servlet/qadoc?QID=013988

あとこれどうしてもタイムシフト放送保存したい人のために手っ取り早いタイムシフト放送保存の仕方しか書いてないんで、生放送録画の仕方とかは他で調べてください。すいません。


1)Microsoft .NET Framework 4.5.1 のインストール

http://www.microsoft.com/ja-jp/download/details.aspx?id=40779

行ってダウンロードボタンクリックして落ちてきたファイルを実行。

今コレ見てる人だったら多分、入ってないからわずインストールしてok。

すでにインストールされてる場合自動インストールを止めてくれるので多重インストール心配とかはしなくていいです。


2)kakorokurecorderの取得

http://com.nicovideo.jp/community/co310049

ここ飛ぶとコミュニティに入りますかみたいなこと聞かれるんで、入る的なものクリックすると「正式ダウンロード配布先1」ってとこに

・kakorokuRecorder Ver.1.5.4 (2013/11/04)

 [コミュ掲示板6558]

って書いてあるんで、ページ上のメニューから掲示板に入って投稿6558番を探して(ちょっとがんばればすぐにたどり着けるよ)リンクを踏む→「3079099.zipダウンロードします」っていうボタンクリック→出てきたリンククリック

(って思ったけど投稿7820にも同じリンク貼ってあったんでそこから行けます。すぐたどり着けるはず)

これでkakorokurecorder154.zipってファイルが取得できるので解凍


3)rtmpdump.exe差し替え版の取得と差し替え

http://nht.r.ribbon.to/

からrtmpdump-2.4-git-20131007_20131123.zipダウンロード解凍して、出てきたrtmpdump.exeってファイルをkakorokurecorder154.zip解凍したフォルダに突っ込んでrtmpdump.exeを上書き更新する。


4)kakorokurecorderの使い方

取得したファイル解凍すると中に「kakorokuRecorder.exe」ってファイルが出てくるんでダブルクリックするとソフトが立ち上がる。

ツールオプションアカウント設定→ニコニコ動画アカウントの共有ってとこで「次のブラウザCookieを共有する」にチェックつけて自分が普段ニコニコ動画を見るのに使っているブラウザ指定する。

ここでChrome使ってる人だけはChrome仕様変更のせいでそのままでブラウザCookieを取得できないので、一回kakorokurecorderを閉じて、

https://github.com/namoshika/SnkLib.App.CookieGetter/releases

から

SnkLib.App.CookieGetter.Sharp.v2.3.0.zipというファイルダウンロード解凍して「NET45」ってフォルダに中に入ってる3つのファイルと2つのフォルダをkakorokurecorder154.zip解凍したフォルダに入れて上書き更新(NET45フォルダじゃなくてNET45フォルダの「中身」を上書きすること)。すると「Chrome自分ニコニコアカウント名)」っていうのが選択項目に出てくるようになるんでそれを選択。

あとツールオプション→録画→録画保存先フォルダで録画する先を指定しとく。


あとは

・メイン画面に戻って「放送URL」ってとこに自分の録画したい番組URLを入れる

・「録画リスト追加」ってボタンを押すとボタンの下の画面に放送IDとか変換とか状態 待機中 とか出てくるんで録画開始ボタンを押す

・画面右側に録画したい番組の画面とか出てきて録画開始されるので終了まで待つ

・終わった時に「権利者名_放送ID(放送タイトル)_timeshift1.xml」「権利者名_放送ID(放送タイトル)_timeshift1.flv」って2つのファイルが出来てれば任務完了です。

放送時間によってはファイルが分割されてtimeshift2ってファイルがもう一組出来るかも。要は.xmlと.flvファイルが一組ずつ出来てればいいってことです。.xmlコメント時間などを指定するファイルで、.flv動画本体


5)録画したファイルを見るには

コメント無しで見る場合

パソコン場合 VLC Player

http://www.videolan.org/vlc/index.ja.html

とりあえずこいつ入れとけば見れるはず。ちゃんと録画出来てるかどうか確認するにはまずこいつで再生してみよう。音がちゃんと鳴るか、音ズレしてないかまず確認するのおすすめ

同じアプリiOS用もアンドロイド用もあるのでストアから落としてきてコピーすればスマホでもファイル見れるよ。VLCアプリストア検索すると出てくるよ。

VLC Playerは上手く使うとファイルは家のPCNAS上においたままWi-Fi経由でスマホストリーミング再生とかできるから動画収集癖のある人には色々やってみるのオススメだよ。


コメントありで見る場合

パソコン場合 こめたんぷれいや

http://putin999.web.fc2.com/

あたしはこれのver0.2.1.2使ってます

これだけだとflvファイル再生できないので

https://code.google.com/p/lavfilters/downloads/list

からLAVFilters-0.60.1.exeっていうの落としてきてインストールしてから使ってください。

同名の.xmlファイルと.flvファイルを同じフォルダに入れてから再生すればコメント付きで見られます

スマホコメント付きで見る方法ちょっとわかりません。ごめんなさい。


6) 最後

要は.flvファイルさえ確保できればあとはmp4に変換してストリーミングしたりDVDに焼いて見るようにしたりはいつでもグーグル先生に聞けば教えてくれるんで、とにかく確保確保。

2015-07-04

android メディアサーバー暴走について

まとめ

android メディアサーバー暴走は、画像音楽動画ファイル等(メディアファイル)の破損

あるいは、メディアファイルデータベースの破損が原因。

メディアファイルデータベースが破損した場合は、データベースを削除すれば勝手に再作成されて問題は解決する。

メディアファイルの破損が原因の場合は、破損したファイルを取り除いてやる必要がある。

対象となるファイルは[本体/default-capability.xml]に記載されている。自分場合は、拡張子

jpg,jpeg,bmp,gif,png,3gp,wav,mp3,mp4,3gp,m4a,flac,ogg,m3u,m4v,mkv,avi,xvid のいずれかのものだった。

ネット情報を見ると、動画ファイルが破損する場合が多いようだ。

破損ファイルを削除し、データベースを削除すれば問題は解決する。

ただし、ファイルの破損が保存媒体由来のものである可能性もあるため、保存媒体寿命が来てないか留意する必要がある。

メディアストレージの削除

設定-アプリ-すべて-メディアストレージ-データを消去

経緯

android スマホバッテリー消費量が異常に多くなる。

操作していると、過加熱により強制終了するほど。

電源管理から電池消費量を確認すると、メディアサーバーが異常に電池を食っていることを確認

起動して放置しているだけでメディアサーバーが働いて本体が熱くなるため、今回の異常の原因は、メディアサーバー暴走が原因と推測した。

ドコモに行くが、OSの初期化必要と言われたので自力で解決することに。

ネットで調べると、SDカード劣化によるメディアファイルの破損が主な原因として挙げられていた。

そこでSDカードを抜いて再起動してみるが暴走は収まらなかった。

データベースの破損が原因の可能性もあるとのことなので、メディアストレージの削除を試してみたが、暴走は収まらなかった。

yahoo ファイルマネージャー画像動画音楽ファイルを除外してみるが、問題は解決しない。

何か取りこぼしているファイルがあると考える。

yahoo ファイルマネージャーの『新着』を見ると、default-capability.xml更新されていることに気づく。

このファイル名で検索すると、SDカードマウント時に作成されるものらしい。

データベース作成の際に更新されたものだと考えて中身を見てみると、メディアファイル拡張子散見される。

メディアファイル定義されている。ものと思われる。

extension タグの要素をすべて抽出する。

jpg,jpeg,bmp,gif,png,3gp,wav,mp3,mp4,3gp,m4a,flac,ogg,m3u,m4v,mkv,avi,xvid

これらの拡張子検索したところ、最近入れたアプリogg ファイルが使われていることが判明。

アプリデータを退避し、一度アンインストール

データベースを削除し再起動すると、メディアファイル暴走が収まった。

2015-06-24

ニトリHTMLソースみたんだけど

&lt;html lang="ja" xml:lang="ja"&gt;

&lt;head&gt;

&lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8" /&gt;

&lt;link rel="stylesheet" href="/wcsstore/ec/css/common1_1ja_JP.css" type="text/css"/&gt;


IBMWebSphere Commerceってやつを使って居るみたいだ

2015-06-17

6/16の日記

日記なのだから日記を書こうと思う。

■7:00 起床

 最近使い始めたアラームアプリは簡単な計算問題を解く必要がある。

 今日は27-13。

 最初は良かったけど、最近は寝ながらでも問題を解けそうなので、

 問題難易度を上げようと思う。

■7:05

 ベットに寝ながらネットサーフィンをする。

 昨日Newspickで書いたコメントいいねがついていた。

 やっぱりアイコンを女の写真にしておくと食いつきがいい。

■7:30 出社準備

 ベットから這い出て軽いストレッチの後シャワーを浴びる。

 またネットサーフィン

 未だにテスト駆動開発とか言ってるのを見つけて懐かしい気持ちになる。

 去年死んだでしょ?

■8:40 家出

 自宅を出て駅へ。

 どういうことか、行くときに反対方向にすれ違ったおばちゃんと

 5分後ぐらいに別の交差点で会う。

 数年かけて最短コースを探索したつもりだったけど、

 まだ他に抜け道でもあるのか。

■08:57 電車に乗る

 今日電車が遅れてきた。

 最近時間通りだと驚くぐらいだ。

 同じ車両に綺麗な女性を見つける。

 彼女に会えただけで今日家を出てよかったと思える。

■09:30 会社最寄駅到着

 今日フレックス出社。

 09:15には出社する予定だったはずだけど気にしない。

 コンビニでお昼ご飯を買う。

 今日会計モバイルSuicaで払おうとしたら、

 言う前に店員がSuicaタンバイしてくれていた。

 有能。一緒にLINEIDも渡してくれたら完璧だった。

■09:45 会社到着

 遅刻した気がするがいつものごとく何も言われない。

 この会社就職して良かったと思える瞬間。

 スマホロッカーに入れて、PCの電源を入れて一休みする。

 今日も一仕事終わった感。

10:00 仕事開始

 くだらないメールを読んでくだらない電話に回答して

 ネットサーフィンする。

 近くにいる今年配属された新人ちょっかいを出す。

 相変わらず真面目で面白味のないやつだ。

 2ch二次裏ニコ動ネトゲはてな発言小町も知らないらしい。

 うむ、その生き方が正しい。

11:30 まだ仕事

 やっと雑用が終わってEclipseを立ち上げる。

 起動を待ってる間にネットサーフィン

 木村岳史の極言暴論コラム、今度は「中国にも抜かれるIT後進国ニッポン

 人月商売が引きずり込む奈落」らしい。

 この記事Facebookいいねランキング一位なんだけど…IT後進国だと実感するわ。

12:30 昼休み 

 朝コンビニで買ったごはんを食べる。

 今日は早く帰るだろうと思い、残業用に残しておいた菓子パンも食べる。

12:45

 「達人プログラマー」を読み返す。本に書いてあるようには上手くいかない。

 自分けがDRY原則割れ窓理論を守ってもしょうがないんや…

 昼寝。

■13:00 午後の仕事再開

 人から質問を受ける。

 「この社内業務用のサイトがやたら遅いんだけどなんで?」

 あーとりあえずF12押してからF5押してください。デバックできます

 …このサイト、ただプルダウン表示するだけでサーバと六千回通信してる…!?

■13:30

 摩訶不思議サイトの件はもっとPHPに詳しい人に投げる。 

 いつも思うけど、どうやったらあんなつくりにしようと思えるのか。

 IT後進国

 やっと自分コーディング作業を開始する。

 といっても朝だらだらしているうちにだいたい考えていたので、

 あとはタイプするだけ。

■14:00

 タイプに飽きてきた頃に別の人から質問を受ける。

 「去年君が作ったプログラム見てるんだけど、

  あれなんで実コード10行程度なのに10画面もあるの?」

 一時期私の中ですべてXMLに書くのが流行った時期があるからですよ。

■14:30

 本気で飽きたので業務と関係のない自動プログラムを作って遊ぶ。

 あとは上司にこのExcelを開かせれば楽しいパーティーの始まりだ!

 だいたいこういう調子に乗っているときはよくないことが起きる。

■15:10

 そして顧客から障害発生の連絡を受ける。

 幸い運用は止まっていないけど今まで見たことのない挙動をしてる。

■15:30

 障害の原因特定。現地の担当に連絡して対処してもらう。

 一段落したけど、担当から

 「今日は様子を見るので遅くまで残っておいて」とのこと。

 昼に菓子パン食べたの後悔。

■16:00~

 記憶がない。

 たぶん仕事ネットサーフィンしてた。

■21:00

 帰宅準備。

 帰り際に同じフロア女の子からしかけられる。

 「いつも椅子に浅く寝るみたい座ってますよね。

  落ちないかな、と思っちゃいます。」

 これはプログラマー伝統的なポーズなんだよ。

 古事記にもそう書いてある。

■21:30

 スマホを取り出すとこの前の日曜に遊んだ女子大生からLineが来てた。

 「ブラック企業って本当にあるんですか??」

 大学生らしい質問だと思う。

 企業ブラックホワイトで分けられないんだよ。

 

 他に一つ下のフロアで働いてる女性に送ったLine

 もう一週間未読放置されてる。徹底的すぎるでしょ。

 事務連絡っぽく送ったんだからせめて既読ぐらいつけてくれてもいいのに。

■22:00 晩御飯

 スーパー惣菜を買って帰って食べる。

 スプラトゥーンの対戦実況動画にもそろそろ飽きてきた。

 ココア神拳動画はよ。

23:50

 この日記を書き始める

2015-03-25

Android Installer Hijacking Vulnerability

仕組みがわりと凝ってて面白い

http://researchcenter.paloaltonetworks.com/2015/03/android-installer-hijacking-vulnerability-could-expose-android-users-to-malware/

  1. マルウェア作者はまず、SD読み書きとインターネットアクセス権限くらいしかない「権限的には無害っぽい」アプリAを作成し、アプリストア等に上げて被害者インストールさせる (アプリAそのもの無害だこの時点では直接的な被害を及ぼさなし、Google Play での配信でもよい)
  2. 実はこのアプリAは、PackageInstaller の監視をしている。(rooted 端末であれば logcat を見る、そうでなければ /sdcard などの、3rdアプリストアが .apk一時的に置くディレクトリ監視)
  3. 被害者は、1. の作者とは関係のない、全く問題のない野良アプリBをインストールしようとする。この時、アプリBは /sdcard などにいったんダウンロードされ、それを PackageInstaller が読み取って、権限確認等のダイアログを出す。
  4. ここでアプリA は PackageInstallerActivity を検知し、/sdcard に一時的に置かれた「アプリB.apk」を、マルウェアに置き換えてしまう!(ネット越しにダウンロードしてきて上書きしてしまうか、あるいはアプリAに内包されていたマルウェアを取り出し、上書きする)
  5. 被害者が「ふんふんパーミッション問題ないしオッケー!」と思ってインストールボタンを押すと、4. で上書きされたマルウェアを知らないうちにインストールしてしまう!

要するに PackageInstaller が権限チェックするタイミングと、実際にインストールするタイミングの間に、対象の .apk を置き換えてしまうという手法となります。(Google Play ストアからインストール場合は、一時的な .apk は /sdcard などではなく端末内のセキュアな場所に置かれるために、書き換えることができません。)


また Android 4.3 以降は、権限チェック時に AndroidManifest.xmlチェックサムを記録しておき、インストール時にももう一度それを確認するように PackageInstaller が修正されているようです。(一部のベンダの端末では 4.3 でもこのチェックをしていないので脆弱性の影響を受ける)


さらには、4.4 以降であれば、上記のチェックサム確認の他に、そもそもアプリ自由に /sdcard を書き換えることができなくなっているので、.apk を書き換えること自体ができなくなっていますね。


ユーザにできる自衛策としては、Google Play からのみアプリインストールする、といったところでしょうか。

あるいは、/data/local/tmp はアプリからは書き換え可能でしたっけ?

できないのであれば、PC で .apk ファイルダウンロードしたのち、adb install でインストールする、という手もありなのかな。



あ、ちなみに Amazonアプリストアアプリ (ややこしいな) は既にこの問題対処しているようなので、Amazonアプリストアは安心して利用しても大丈夫かと思います


[※2015/03/26 トラバブコメでの指摘に合わせて少々書き直しました]

2015-02-11

SpringBootアプリjavafxを使って配布しやすくしよう

概要

Javaで開発されたアプリケーションにはインストールにまつわる難点がある。

それによりせっかく興味をもってくれたユーザーも試す前に諦めてしまいがちである

また、サーバーサイドアプリケーションJavaである場合デプロイ監視の際の難点が多く運用者を悩ませてきた。

javafxで導入されたパッケージャを用いることで各OSネイティブインストーラーの作成が可能になり、この問題を解消・緩和できる。

SpringBoot などを用いた ExecutableJar作成するアプリケーションであれば、サーバーサイドアプリケーションであっても一部制限があるものパッケージングできる。

問題点の整理

Javaで開発されたアプリケーションの配布には以下の問題点がある。

解決方法として

javafx-maven-pluginを使うとよい。javafxと冠しているが実態パッケージングツール

javafxの冠があるがためにスタンドアロンアプリ開発者以外を遠ざけている感あり。

Windows(msi/exe), Linux(rpm/deb), Mac(dmg) など各OSディストリビューション固有のパッケージングが行える。

公式ページ( http://zenjava.com/javafx/maven/ )では更新が止まっているが、Github( https://github.com/zonski/javafx-maven-plugin )とMavenRepository( http://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22com.zenjava%22%20AND%20a%3A%22javafx-maven-plugin%22 )を確認するとちゃんと開発は続いている。

実際にどのようにすればパッケージングできるか

まずアプリケーションmaven アプリとして開発する。

pom.xml に以下を追加する。

mainClassはSpringBootなら@SpringBootApplicationのついてるクラスですね。

vendor適当組織や個人の名前を入れておきましょう。

※ 以下の XML が化けるのは増田不具合仕様っぽい。 http://anond.hatelabo.jp/20100205210805

&lt;plugin&gt;
  &lt;groupId&gt;com.zenjava&lt;/groupId&gt;
  &lt;artifactId&gt;javafx-maven-plugin&lt;/artifactId&gt;
  &lt;version&gt;8.1.2&lt;/version&gt;
  &lt;configuration&gt;
    &lt;mainClass&gt;[main method class]&lt;/mainClass&gt;
    &lt;vendor&gt;[Vendor Name]&lt;/vendor&gt;
  &lt;/configuration&gt;
&lt;/plugin&gt;

あとはそのままビルドすればよい。

maven clean jfx:native

ビルドが終わると target/jfx/native 以下に、ビルドしたOS/distributionに合わせて msi, exe, deb, rpm, dmg ができあがります

本当であればクロスビルドできてしかるべきなのですが、まだ実現はされていないようです。

これらのパッケージは Widonws であれば Program Files(x86) に、Linux系であれば /opt/ の下にインストールされるようです。

/opt/app-name/ の下には app と runtime の2つのディレクトリがあります

app の下にはビルドした jar ファイル依存ライブラリが置かれています

runtime の下には実行用の jre が配備されています

実行ファイルにそのまま引数を渡せば jar 実行時の引数としてそのまま渡されます。(-Xmxなどはまだ未検証です)

課題

OS毎の注意点

ログイン ユーザー登録
ようこそ ゲスト さん