年別アーカイブ 2018

takahashi 著者:takahashi

MBaaSのFirebase、脆弱性により情報流出が発覚

Googleが提供しているサービスであるFirebaseから、なんと合計1億件以上の情報流出(Gigazine)が確認されたようです。

合計1億件以上の個人情報がFirebaseの脆弱性によって公開状態に – Gigazine

Firebaseはモバイルアプリのバックエンドに必要な機能(ログイン管理やプッシュ通知など)を一括して提供してくれるmBaaS(mobile Backend as a Service)です。

Firebaseの始め方 – Qiita

Firebaseを使うことで、本来自前でサーバーを用意してアプリのバックエンドを構築しなければいけないところを、Firebaseで対応している機能であればすべてこのサービス上で賄える、というサービスのようです。(恥ずかしながら知りませんでした。)

Gigazineの記事によると、Firebaseとの連携処理がちゃんと行われていないアプリが原因だったとのことです。

この脆弱性はFirebaseデータベースの認証が適切に行われていないときに顕在化するもの。2017年第2四半期に見つかった、アプリ開発者によるデータ格納の保護が不完全なときに情報が露出してしまう「HospitalGown」と呼ばれる脆弱性の変種であると考えられています。

Appthorityのディレクターであるセス・ハーディ氏は「このFirebaseの脆弱性は膨大な量の機密情報を公開してしまうような重大かつ危機的なものです。多くの『脆弱なアプリ』があり、多種多様なデータが公開されてしまっているという事実は、企業がアプリの開発者に頼れず、アプリストアによるチェックや単純な『マルウェアスキャン』でも対策できないということを示します。GDPRやHIPAA、PCIといったデータ保護の規則を守るために、今後はこの種の脆弱性を見つけられるよう、深いアプリ分析に投資する必要があるでしょう」と述べています。

Firebaseのサービスを利用していなければ影響を受けなかったインシデントなので、個人的には”パブリッククラウドの危ない面”が露呈してしまったのかな、という印象です。

対策がされているとはいえ、複数のユーザーで共有している環境である以上、使用する際はこういった危険性も考えて置く必要がありそうですね。

  • この記事いいね! (0)
takahashi 著者:takahashi

[間もなくGoogle ChromeでSSL必須化。確認しておくべきこと。] SSLって何?

いよいよ、前から予告されていたSSL必須化(HTTP(非暗号化)接続というだけで警告を表示するようになる仕様変更)がChrome 68から適用されます。

いよいよGoogleが本気。Chrome 68から全HTTPサイトに警告! – 常時SSL Lab.

もしあなたがサイトを運営していて、SSLを利用可能にしていない場合、画像の下のな表示がアドレスバーに常に表示されるようになります。
回避するためには、サイトをSSLに対応させないといけません。

そもそも、SSLとはなんぞや…という方のために、簡単に説明します。
SSLを理解する前に、インターネットの仕組みを簡単に簡単に理解しておく必要があります。

今は家にPCやスマホ・タブレットが複数台ある、という方は多いと思います。
複数台のPCやタブレットなどを同時にインターネットへ接続するために、ルーターを設置している方が多いと思います。

細かい説明は割愛しますが、ルーターを設置すると、大抵の場合はそこにLANと呼ばれるネットワークが構築され、そのLAN全体をルーターを介してインターネットに接続することで、ルーターに接続されている複数台の端末が、同時にインターネットへ接続できるようになります。

簡単に言ってしまえば、インターネットというのは、ルーターやLANを相互に接続してできた巨大なネットワークなんです。
つまり、インターネット上には、自宅に設置したルーターのように、あなたの通信を中継する機器をいくつも経由して、目的のサイトへたどり着けるようになっています。


引用元:JPRS

そしてこの”通信を中継する機器”は、仕組み上誰でも設置が可能です。

また、インターネットのベースとなった仕組みでは、”一部の経路が切断されても、他に通信経路があれば通信を継続できるようにする”仕組みになっています。
先程書いたように、インターネットはネットワークを相互につないでいる構造になっているので、目的のサイトにたどり着くまでの経路は何通りもあります。

そのうちのどの経路が選ばれるかは一定ではなく、状況に合わせて、最も最適なルートが選択されます。

つまり、自分がインタ―ネットへ送信した情報がどの経路を通過するのかはわからない(決まっていない)のです。

通信経路は固定ではなく、かつ経由する機器もだれのものかわからない…そんな仕組みなので、例えばもし経由する経路上にサイバー犯罪を企てる人が設置した機器を経由してしまった場合、自分が送信した解読された場合はその内容が盗まれてしまったり、改変されたりしてしまう可能性が出てきます。

もしその時に自分が送っていた情報がパスワードやクレジットカード情報だったら…最悪ですよね。

そうならないために、自分が送付する情報を”暗号”にして、自分と通信相手にしか解読することができないようにする仕組みがあります。

これが、SSL(TLS)と呼ばれるものです。

SSLを利用するためには自分のサイトが動いているサーバーに、SSL証明書をインストールする必要があります。
SSL証明書は発行を行っている”認証局”と呼ばれる業者から取得する必要があります。

通常は有料で、有効期限があるので、有効期限が近づくたびに購入しなおす必要があります。

ただし、最近はLet’s Encryptという、更新するまでの期間が短い代わりに無料で利用できるSSLもあります。

これでSSLをサイトに導入して対応完了…!と行きたいところですが、まだ他にも気を付けないといけない点があります。

また次回説明します。

  • この記事いいね! (0)
takahashi 著者:takahashi

JDKの無料配布はJava 10が最後となり、11以降は有償化される模様

“30億のデバイスで走るJava”という宣伝ができるぐらい、今やITの世界で欠かせなくなったJava。
そんな Javaですが、いままで開発ツールのOracleJDKは無料で公開されており、だれでも利用することができました。

ところがこのOracleJDK、少し前にJava11から有償化されることが決まりました。

Oracleが無償でJDKを提供するのは「Java 10」が最後、Java 11以降はOSSコミュニティでのサポートに – スラド

Java 11からは、現在のようにOracle公式サイトからダウンロードできる形ではなくなり、有償契約した人のみ入手することができるようになります。

その代わり、オープンソース版であるOpenJDKに対し、現OracleJDKが備えている機能と同等のものが公式に導入されることになっているようで、機能面ではOracleJDKとOpenJDKは同等になるため、OpenJDKを使用すれば今後も無料で使い続けられるようです。

ではOracleJDKとOpenJDKの大きな違いは何かというと、Oracle公式によるサポート、さらにはサポート期間の違いのようです。

OpenJDKのサポート期限は次のリリースまで、となっていますが、OracleJDKについては3年ごとにリリースから8年間サポートされるLTS版が出されるようです。

Oracle Javaの無償配布終了で何が起こるのか? – セカイノカタチ

“Oracle JDK有償化”と聞くと、「なんてこった…」と一瞬思ってしまいますが、ふたを開けてみたところ、かなりユーザーにとってメリットとなる変更のようですね。

  • この記事いいね! (0)
村上 著者:村上

【Windows】Word保存時に「ディスクの空き容量が不足しているため保存できません」エラー

ちなみに未解決です。

Wordを編集・保存した時に遭遇したエラーで「ディスクの空き容量が不足しているため保存できません」とのこと。
ほかにももう1つファイルを開いていて、そちらは問題なかったのになぜこのファイルだけ…?

検索時にヒットしたページはこちら。

Word で文書を保存するとエラー メッセージが表示される、またはプログラムが応答を停止する
https://support.microsoft.com/ja-jp/help/813997/you-receive-an-error-message-or-the-program-stops-responding-when-you

ですが、結局それらしい解決策は見つけられませんでした。

なお、サイトに掲載されていた解決方法・回避策はこちら。

この問題を解決するには、ディスク ドライブの増設やディスク圧縮ユーティリティの使用により、ディスクの空き領域を増やします。

注: ウイルス対策ソフトウェアが実行中の場合は、それを無効にしてみてください。 これで問題が解決される場合は、ウイルス対策ソフトウェアの製造元に更新プログラムまたは回避策についてお問い合わせください。

・不要なプログラムを終了することによってディスク領域をある程度回復できる場合があります。
他のプログラムを終了してから Windows がページング ファイルのサイズを変更するまでに数分かかることがあります。
・必要のないファイルを削除してディスクの空き領域を増やします。
たとえば、ディスク クリーンアップを実行します。 これを行うには、次の手順を実行します。

 

で、結局一度ファイルを保存せず閉じて、再度開いて修正・保存をしたところ、何事もなかったかのように保存が完了しました。
…謎です。
ということで、原因はさっぱりわかりませんでしたが、なるべくファイルは一度にたくさん開かずに、必要最小限にしようとは思います。

  • この記事いいね! (0)
著者:杉浦

読みやすいソースコード

 この記事を読むよりリーダブルコードを読んだ方がよほど良いと思います。Amazonで売っている電子版は見つかりませんでした。リーダブルコードはQiitaの記事でよく引用されたり技術書ランキング | テック・ブック・ランク”、5万部売れたり(技術書にしては多いです)でよく読まれています。
 O’Reilly Japan – リーダブルコード
 コードの記述は想定外の動作を起こさず、正しく動作する記述であることが最も重要視され、次いで理解しやすさ、時々実行速度が優先されます。実行速度が三番手なのは雑なコードでも要求に対して十分高速な時が少なからずあるからです。理解しやすいコードはそのコードを読む、未来の自分、共同開発者、ユーザの助けになります。未来の自分と書くと語弊がありますが、この未来というのはわりと短期です。一月もすれば読まない部分のコードの記憶は怪しくなります。
 理解しやすいコードに必要な条件に誤解が起きないというものがあります。誤解が起きない書き方というのは、接続詞である演算子や括弧を少なくして多重コードを避ける、変数名や関数名の意味を一意に決まる限定的な言葉にする、などの書き方です。
 読みにくい多重コードは三項演算子、関数呼び出しが特にそうです。

hoge = a?b?c:d:e
hoge = a?b?c:d?e:f:g?h:i
hoge = a(b(c,d(e()),f(g(h(),i))))

 二重だけでもちょっと躊躇います。下二つはもう大惨事です。
 変数名の意味を一意にすることの効果は、コードの理解に必要な文章量を少なくする効果でもあります。良い命名がされたコードはコードの一部を読むのみでプログラムが分かります。悪い命名というのは例えば、次のような命名です。

results = Database.all_objects.filter("year <= 2011") 

この results には何が含まれているだろうか?

  • 「year <= 2011」のオブジェクト
  • 「year <= 2011」ではないオブジェクト
  • Dustin Boswell (著), Trevor Foucher (著), 須藤 功平 (解説), 角 征典 (翻訳). リーダブルコード (P.30).
     このような場合、言葉の意味を考えるなり調べるなりしてより限定的な言葉を選ぶことで解決します。調べる時は類語や色々な人のコード中に頻出する名前を調べるといいです。この例の場合はfilterの代わりにselectやexcludeが推奨されます。

    • この記事いいね! (0)
    著者:ym

    コンテナとデータマイニング

    Docker Hub に限らず、Amazon もそうですが。

    Docker Hubから誰でもダウンロードできるコンテナイメージに暗号通貨採掘ボットが潜んでいた – TechCrunch Japan

    こういったボットだけでなく、予めプログラムを仕込んだものを配布できるわけですから、テンプレートとして用意されているイメージで運用を始めるということはとても怖いです。しっかりとコンテナの元となるテンプレートの出元の確認を取った上で、利用することが重要ですね。

    採掘した額9万ドル相当ですか。

    データマイニングとか聞くと、20年ほど昔、DES の解読などのチャレンジが行われていたを思い出します。

    DES暗号の解読コンテスト「DES Challenge III」が22時間で破られる

    まだサイトがあって動いているのに驚きましたが、distributed.net- Client Downloads こんなソフトです。インターネット上で協力してくれる有志が、自分のPCへインストールして、CPUの空き時間を提供して解析に参加するといった、仕組み。私も参加したりしていました。懐かしいです。

    • この記事いいね! (0)
    著者:杉浦

    javascriptの比較演算子==、!=と===、!===

    ==、!=と===、!===は曖昧な比較と厳密な比較です。==、!=と===、!===を使い分ける事で以前書いた暗黙の型変換に悩まされない比較を行うことができます。
     javascriptは暗黙の型変換を行う言語です。暗黙の型変換とは、黙って値の型(文字列、整数、真偽値等)を変える、という動作です。この暗黙の型変換は便利な一方で予期せぬ挙動を引き起こすことがあります。例えば、次の関数を考えます。この関数が行いたいことは、引数の値を+1して返す、ということです。

    (inc = function(v){
    	return v+1;
    })();
    

     この関数は次の結果を引き起こします。

    a=inc(2);
    //aは3
    a=inc("2");
    //aは"21"
    

     javascriptは親切にも文字列型である引数に合わせて、数値として扱いたい1を文字列型に変換してくれました。この様に暗黙的な型変換をして欲しくない時があります。if文では次の様なコードが例に挙げられます。

    (hoge = function(msg){
    	if(msg == ""){
    		//msgが空なら返す
    		return;
    	}
    	//msgを使ったして欲しい処理
    })();
    

     javascriptは数値0を文字列””に暗黙的に変換します。そのためmsgに格納されている値が数値0の場合、動作はifの中に入り込み、msgを使ったして欲しい処理を行わずにhoge(msg)を抜け出すものになります。==、!=は比較の際に暗黙的な型変換を行う比較演算子なのに対し===、!==は比較の際に型変換をさせない比較演算子です。これを用いて次の様に記述した場合、msgに格納されている値が数値0であってもif文の中に入り込まずに、msgを使ったして欲しい処理を行います。

    (hoge = function(msg){
    	if(msg === ""){
    		//msgが空なら返す
    		return;
    	}
    	//msgを使ったして欲しい処理
    })();
    

     

    • この記事いいね! (0)
    村上 著者:村上

    【JavaScript】IEでの「’)’がありません」エラーの原因と対処法

    後輩のコードを見ていて発見した Internet Explorer 固有のバグです。
    今回遭遇するまで、こんな現象が起きることを知らなかったので、備忘録も兼ねています。

    で、コードはこちら。

    function checkStr( message = "" ){
        if( message != "" ){
            // 処理
        }
    }
    

    一見何の問題もなさそうですし、Google Chrome や Microsoft Edge では問題なく動作しました。
    が、どうしてもIEではダメで、「‘)’がありません」というエラーが表示されました。

     

    で、対処法ですが、そもそもの原因は関数の引数にデフォルト値を指定したことが原因のようでした。
    IEではJavaScriptの関数での引数のデフォルト値の設定には対応していないようですね。
    そのため、引数の「message = “”」を 単に「message」に修正すれば問題なく動作しました。

    修正後のコードは下記のとおりです。

    function checkStr( message ){
        if( message != "" ){
            // 処理
        }
    }
    

    1行目の関数の引数のデフォルト値を指定しないように修正しました。

     

    以上、IEでの関数エラーの対処法でした。
    最初はエラー文を鵜呑みにしてカッコの数があっているかを確認していましたが、原因は全く違いましたね。
    たまにこういった見当はずれのエラー文があったりするので、デバッグ作業は難しいです。
    今回は思い付きで関数の引数を消してみたら解決したので良かったですね。
    同じことでお悩みの方は、是非参考にしてください。

    • この記事いいね! (0)
    著者:ym

    スマート家電コントロール

    この製品ではないけど、最近 TV CM で自動でスマートフォンと連携して自動で調整とか CM していますけど、これっと普通のリモコンでもできるでしょ?てかエアコンって自動で温度調整ついてるじゃん。なんて思いますが。

    https://www.livesmart.co.jp/

    スマートフォンと連携すると、まだまだ機能が増えますしね。

    自宅の Amazon Echo にスマートな家電をそろそろくっつけたいので、LS mini でいいので、安いうちにほしいですね。

    • この記事いいね! (0)
    村上 著者:村上

    【Excel】セルに入力した値を変えずに値に単位を付ける方法

    タイトル通り、Excelでセルに入力した数値などを変えずに、「○○人」や「××円」などの単位を追加する方法です。
    例えば下の画像のようにする方法。

    表示しているのは「100人」ですが、データ自体は「100」となっています。
    これは、単純にセルに単位を入力してしまうと文字列になってしまい、データが扱いにくくなってしまうので、その対策のためです。

    以前書いた、日付に曜日を表示する方法とほぼ同じです。

    【Excel】日付を曜日付きで表示する方法
    https://cpoint-lab.co.jp/article/201804/【excel】日付を曜日付きで表示する方法/

    というか、この曜日の表示がその応用かな。

     

    方法ですが、まず単位を追加したいセルで右クリックし、メニューからセルの書式設定を選択。

    すると下のようなウィンドウが表示されるので、左側のメニューから「ユーザー定義」を選びます。

    あとは、画像のように、中央辺りにあるテキストエリアに表示したい形式を指定すればOKです。
    私は今回、値の後ろに「人」を追加したかったので、選択肢から数値を表示している項目を選び、その後ろに「”人”」と追加しました。
    あとは、OKボタンを押せば完了です。

     

    作業としては以上です。
    簡単ですね!
    ですが、Excelを使い始めたばかりのときは、意外とこの方法を知らなかったりするので、ビギナーさん向けにまとめました。
    Excelに苦手意識を持ってしまっている後輩もいるので、初心者の方に、「Excelって難しくないよ」というメッセージが伝わればいいなと思います。

    • この記事いいね! (0)