u-ryo's blog

various information for coding...

Author: U-ryo

Images in README.md on Github

| Comments

GithubREADME.mdにscreen shotとか画像を貼りたかったんですけど、どうしたものなんでしょう。説明用のimagesをsource codeと一緒に置いておくというのも何か野暮なので。幾つかやり方があるようです。

  1. image用の別branchを切る(e.g. https://github.com/cakecatz/garage)
  2. Githubのissueを利用する(GitHub Readme Images Tutorial (screenshots in readmes))
  3. Githubのwikiを利用する(GitHubに画像ファイルを保存してREADME.mdで表示する方法)

issueに画像をDrag and Dropすると、https://user-images.githubusercontent.com/... に自動的にuploadしてURLが得られるなんて知りませんでした。でもこれ、いつまで持っててくれるんでしょう、というのと、消したい時に消せるのかな? というのがあって。やっぱり自分でcontrol持っておきたいでしょう。(GitHubのissueを悪用して画像をホストする)

別branchを切ると、一旦画像以外全部消さないとならなくて、 何となくそれがちょっと嫌だったので、結局wikiを利用しました。 一度何でもいいのでWikiのpageを保存しないとならないみたいです。 一度保存しちゃえば、上記ページに書いてあるようにgit clone https://github.com/.../XXX.wikiで取ってこられて、images作って置けちゃうんですね。へー。

Gitignore

| Comments

前も書いたような気がしますけど、.gitignoregitignore.ioで。ここでgenerateしたものに置き換えてみたんですが、git statusはあんまり変わりませんでした。記述量は確かに増えていたので、良くはなっているんでしょう...

AndroidStudio用に引っ張ってきたんですけど、そのままだと.idea/kotlinc.xmlが入ってきてしまうようです。kotlinc.xmlはversion管理不要ですよね? 逆に、.idea/gradle.xmlはversion管理下に、という話がAndroid Studioのバージョン管理対象ファイルAndroid Studioでバージョン管理下に置かないもの第35回 バージョン管理 ─プロジェクト管理ファイルについて[後編]と出て来るんですが、gitignore.ioのfileではexplicitlyにignore対象なんですよね...

試してみると、特に.idea/が無くてもAndroid Projectとして開けますね。じゃ全部要らないのかな。

Personal Information Leak Incident

| Comments

先日派遣先で、5万数千件にのぼる個人情報漏洩を見付けてしまいました。

その会社ではチンケなECサイトをやってるんですけど、 といっても再販の再販までされてて何百人にも使われちゃってますが、 中身は2000年代前半〜中盤のcode。未だにJSP(一部Java)。 今やもうJavaEEから外れたっていうのに。 OSやlibrary、middlewareもsupport切れで無いものは無いという。 http/https混在、userのpasswordもDBに平文で保存してるくらい、 設計思想からして古いままのものです。WAFも入ってないといいますし。 早晩、こんなことが起こるだろうと傍で見ていて思っていましたが、 現実になり、しかも発見者がぼくだとは。 ぼく一応これ、部外者なんですけど。 同じように派遣されててそっちも手伝っている同僚から、 こんなaccessが沢山来てるってattack patternを見せられて。 不覚にも最初は一般的な定期巡回sql injectionかと思ってました。 Googleで調べると、そういうのが載ってたんです。

(jsql-injection かとも思ったんですが、試してみるとちょっと違うかも。 Havij ProはWindowsだしちょっと怖いので入れてません)

ともあれ、だから単なる下調べ的なattackかと思ってました当初は。 しかし、

  1. IP遮断してもIP変えてやって来るくらいしつこい(IP元はHK,US,JP,CN,UK等々)
  2. しかも同じようだが微妙に違うrequestを大量にする

というところからすぐにピンとくるべきでした。 翌週になって、そういえば見せられたqueryに このサイト固有の名前が入っていたな、 というところから、ちょっと実際に叩いてみたんですね。 そしたら...

あらま。

確かによく見たらqueryの中に「MAIL、PASSWD、TEL」の文字が。 見事に抜かれてました。 各queryの違いは、lImItの数。 これを変えて、順々に取って行ってたんですね。 後でわかったことですが、固有名が無くてもinformation_schemaから table名1個ずつ抜けるんですね。

attackがあったのが木曜、ぼくが気付いたのが翌週月曜、 log解析依頼されて、調べてみるとMAIL AddressとかPASSWDが5万数千件は 抜かれてました。 その他、抜かれてたのはショップ運営者の方のID、MAIL、PASSWDも。 それは6月19日に起きてました。 今までずっと気付いてなかったという。 再販先と連絡取って、すぐサイト全体落としたんですけど、 全体をこれまでのオンプレミスサーバ群からクラウドに移行したということで、 また再開したそうです(WAFは入れると言ってはいましたが) (しかも移行したといってもミスがあるらしくすぐにはうまく行っていないとかで、 自分でやっといて直せないなんてアホの極みだと。 その不具合修正をぼくに求めてくるという。 確かにぼくはJava expertなので、 なんで見当違いのところで騒いでるのかくらいの指摘はしてあげましたけど、 自分の尻くらい自分で拭ったらどうですか?と)。

色々信じられません。

元々彼らの思考には付いていけてなくて。 今自分がやらされているprojectの方でも、 serverのlogic追ってったら「これ認証無いですよ」 って言っても改善せずそのまま、 他人の電話番号とか情報を抜けるPOC作って示しても、 「そのPOC書くのにどのくらい時間かけた?」とか聞いてくる始末。 もう匙投げてました。 っていうか、こんな人もいるんだ、と勉強になりました。 更に言えば、日本のsecurity意識って一般的にはこんなもんなんでしょうか。

本当は、この実態を再販先等に告発した方が社会正義のためだと 思うんですけれども、 西宮冷蔵社長の例を鑑みても告発者が報われない社会なのは明らかなので、 黙っているしか無いのかと悲しい思いをしています。

早くこんなとこから抜け出さないと、イケマセン。

Getting Prize S Level Programmer at Paiza

| Comments

先日、Paizaのスキルチェック時間切れ0点を取ってしまったので、 癪だからランクS、本気で取りに行きました。 ひとりすごろくは第一次制限時間の40分を超えてしまったので、 全ケース通ったんですけど95点でSではなくA判定。 やっぱり時間が大事なんですね。 Javaで「早く」書くのは確かにキツイです。 ので、次は50点の制限時間が2時間のビリヤードの玉突きに挑戦しました。 こちらは、問題中にヒントを書いていてくれていることもあり、 60分で解答を提出、ようやっとSランクをゲットできました。 今までAランクでいっか、とか思ってて、S問題はゆっくりやって、 再チャレンジでcodeをbrush upして100点を取ってたんですけど、 それより時間が大事、なんですかね。 いや、実務では分を争う程、そこまでsevereではないので... それに、paizaでいくら頑張っても、 小さいとこばっかりであんまり行きたい先が無いので、虚しいんです。

Challenging Paiza TSP

| Comments

8/13はPaizaの日、ということで、巡回セールスマン問題を出題していました。 Paizaラーニングでも巡回セールスマン問題のさわり(貪欲法)を取り上げていて、 2-OptやSimulatedAnnealing(焼きなまし法)を学んで、 いざ書いてみたんですが、なかなかうまく行きません。 テストデータは有名ドコロがあります。 まずはatt48で2-Optでやってみたものの、 交差線が多く、全然それっぽい経路が得られません。 なんでーーー!? Javaによるまんまのコードがあったので、 読み解いていったんですけど時間かかっちゃって、 結局Paizaの締切9/12に間に合いませんでした... 何たること。

どうも、キモはswapにあるようで、 点を交換すると総延長が短くなる場合、 当然点を交換するんですが、 当該点だけを交換するだけじゃなく、 そこから真ん中へ向かってずっと点を交換していくんですね。 そうかー。

悔しいから、久し振りにPaizaのS問題やってみました。 最も簡単そうな最小辞書順列にしてみました。 けれど、問題の意味を理解するのと、JavaのStreamで書ききったために、 制限の2時間、あっという間に過ぎてしまいました。0点確定です。トホホ。 しかも、提出したコードは、2つの場合だけ通らずに、80点。 どうしてコケる時があるのか、思い当たるフシもなく、未だにわかっていません。 テストデータ、見せて欲しいです。