質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

1664閲覧

MySQLのデータを、開発者自身が見れないようにするには?

jaoshige1228

総合スコア5

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

1グッド

3クリップ

投稿2020/04/05 06:39

前提・実現したいこと

転職活動用の成果物として、日記アプリを開発しようとしております。
HTML,CSS,PHPを用い、データベースはMySQLを利用するつもりです。

日記というものは、当然ながら、書き込んだ本人以外が閲覧できてはならないと考えます。それが開発者であってもです。

「開発者にも秘匿されるが、書き込んだ本人のみが閲覧できるデータ」をMySQLに格納することは、「PHPのコードやMySQLの設定」にて可能なのでしょうか?
可能であるならば、手段の載っているサイトのURLや、検索方法などをご教授いただけると幸いです。

仮に、不可能もしくは初学者にとって困難であれば、そういったサイトの開発は控えるべきでしょうか?

質問者のスキルレベル

HTML,CSS,JavaScript(jQuery),PHP,MySQLといったWeb系言語を、半年間独学した程度です。
CRUDが可能な簡易的webサイトであれば製作可能です。既に一つのサイトを、さくらサーバーを利用して公開しております。

質問内容の補足

さくらサーバーではphpMyAdminによって、MySQLのテーブル情報を自由に閲覧できます。
質問内容にある「開発者にも秘匿される」というのは、このphpMyAdminにて、テーブル内の情報を閲覧できない状態であることを指します。

検索したワード

「SQL 開発者 秘匿」
「日記アプリ 内容 秘匿」
「SQL 内容 秘匿」

等等……
我ながら的の外れた検索をしている気がしますが、かといってより善い方法が思いつきません。

TsukubaDepot👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/04/05 09:08

google でさえ人は見ていないという。紳士協定を引いてます
tanat

2020/04/05 09:59

> asahina1979さん どちらかというと、googleドライブに格納された鍵付きzipファイルの中身をgoogleが見れるか という要件に近いものなんじゃないかなと解釈しました。
退会済みユーザー

退会済みユーザー

2020/04/05 10:25

@tanat ウィルス検査用ファイルを含むZIPファイルを放り込んだときはちゃんと検知したから zipレベルの暗号化は解いてると思う
tanat

2020/04/05 11:43

> asahina1979さん それは興味深い挙動ですね。 ありがとうございます。 Gmailの挙動としてパスワードzip+さらにzipだとそもそも送れないとかあった気がするので、それに近い感じで暗号化された上からフィンガープリント的にバイナリを判断をしているとか、簡単なパスワードなら総当たりで外してるとか?ですかね。 十分に長いパスワードなら、zipの暗号化であってもgoogleが覗き見は出来ない。。はず。。 (調べてみます。)
退会済みユーザー

退会済みユーザー

2020/04/05 11:51

結構古い記憶だから今は変わってるかもだけどね
guest

回答2

0

ベストアンサー

こんな流れで実装すれば可能かと思います
(が、検索等の機能実装の難易度の上昇やパフォーマンス低下は避けられないので、実用的かどうかは別問題になります。)

大まかな目標

  1. 暗号化されていないデータはサーバに送信されないようにする(サーバ管理者は通信経路のパケットを確認することが出来るため)
  2. データの暗号化/複合はブラウザ内で完結させる
  3. 暗号化/複合キーを原理的にサーバに送信しない仕組みにする(Cookieにキーを保存するのはNG)
  4. 現実的なリソースでは総当たり突破出来ない暗号強度を持った暗号化データとして格納されること

データ投入時の実装

  1. ブラウザ側のJavaScriptで入力フォームの内容を暗号化し、暗号化キーはその場でエンドユーザに入力させる。
  2. キーとなる文字列が短いと、開発者が総当たりで複合出来てしまうので十分な長さのキーを指定させ、十分に強固な暗号化方式を選択すること。具体的にどれくらいの長さであればどれくらいのリソースが必要かは暗号 総当たり等で調べて定義してください。単純にキー入力させると脆弱な長さにしかならないので工夫のしどころだと思います。
  3. PHP側では入力された内容を文字列としてDBに投入

データ表示時の実装

  1. PHPは暗号化対象のデータ以外をキーとしてデータを取得する
  2. ブラウザは暗号化されたデータを受け取った後に、エンドユーザのキー入力 or ブラウザのパスワード管理機能を使って複合キーを使って複合する

検索するとしたら
まずはJavaScript 文字列 暗号化あたりでしょうか。
その後に必要になるのは
JavaScript フォーム送信
あたり。

そういったサイトの開発は控えるべきであるか否か

仮に、不可能もしくは初学者にとって困難であれば、そういったサイトの開発は控えるべきでしょうか?

(不正指令電磁的記録作成罪等に該当する場合を除いては)開発を控えるべきサイトというものは存在しないと思います。

一方で、サイトの公開/使用については

  • サイトが法的に微妙/アウト
  • セキュリティに問題がある
  • リソースを過剰に使う場合

等々の場合

  • (自己使用を含めて)使用を控えるべきサイト
  • 公開/販売を控えるべきサイト
  • レンタルサーバー上で動かすべきではないサイト
  • 公開にあたっては専門家のサポートを必要とするサイト

に該当するケースはありますが、開発難易度と直接関係するものではありません。

投稿2020/04/05 07:10

編集2020/04/05 09:50
tanat

総合スコア18727

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/04/05 09:11

そのウェブクライアントも開発者が作成したものなので総当り攻撃で可能ですね。
tanat

2020/04/05 09:40

ご指摘ありがとうございます。 確かに、キーとして許容する文字列を十分に安全な長さにする等の実装が必要ですね。 十分な強度を持つ=現実的なリソースでは総当たり突破不可能な暗号化である という前提を破棄してしまうと既存の暗号化通信を全て否定することになるので、この辺りの前提、定義と実装上の注意点を追記しますね。
tanat

2020/04/05 09:59

追記しました
jaoshige1228

2020/04/05 11:32

迅速かつご丁寧な回答、誠にありがとうございます。 非常に明確な解決手段を提示いただき、感謝の極みです。 早速、ローカル環境で突貫工事的に試してみましたが……現時点では、うまくいきません(汗) ここに関しましては、まだまだ挑戦し足りない部分がありますので、色々試してみたいと思います。 目的が明確故に、行動を取ることができました。 また、サイト開発についてのご回答も、ありがとうございます。 「公開」と「開発」は、確かに別物でありますね。
tanat

2020/04/05 11:52 編集

> jaoshige1228さん まずはごく簡単な仕様で試してみると良いと思います。 例えば、 1. 暗号化キーを決め打ち+本文も固定でただ暗号化するJavaScriptを実装してみる(出来上がった文字列はconsole.logに出力するだけでも良いです。JavaScript デバッグ等で調べてみてください) 2. 出来上がった文字列を決め打ちの暗号化キーで複合して、元の文字列に戻ることを確認 というところからスタートしてみてください。 その後に、一つづつ機能を追加していくと何がわからないかが把握できます。 1. 暗号化キーを決め打ち+本文も固定でただ暗号化するJavaScriptを実装してみる だと、暗号化キーを決め打ちでは無くエンドユーザーに入力させてみるとか、本文をフォームから拾うとかですね。
jaoshige1228

2020/04/10 22:59

返信いただき、ありがとうございます! なるほど、そういった方法であれば、徐々に目的へと近づいていくことができますね。 今回の質問を通して、暗号化についての見識を少なからず得ることができました。 ありがとうございました。
tanat

2020/04/11 04:40

転職活動用ということであれば、出来上がったものだけではなく、どういった問題をどう解決したのか?というプロセスを説明出来ると強い武器になるかと思います。 頑張ってください。
guest

0

思考実験としては面白いんですけど、実装しようとすると運用ナレッジが貯まるまでコストが相当掛かりそうな気がします。

興味深いので、ヒントになりそうな質問のリンクだけおいておきますね。
暗号化すべき情報とは?
ログイン時のパスワード送信に関して

本件に対しての直接の回答にはなりませんが、面白い観点で回答をいただけてます。
刺激になれば^^

投稿2020/04/05 13:07

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jaoshige1228

2020/04/10 22:56

ご回答、誠にありがとうございます。 こういった点の知識は皆無に等しいので、非常に有難いです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問