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

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

新規登録して質問してみよう
ただいま回答率
85.34%
Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Q&A

解決済

4回答

1206閲覧

個人情報を扱うファイルをfsモジュールで管理するのは危険?

退会済みユーザー

退会済みユーザー

総合スコア0

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

0グッド

0クリップ

投稿2020/08/31 05:47

編集2020/08/31 05:48

前提・実現したいこと

node.jsアプリにメールアドレスとパスワードを設定してログインログアウト機能...といったよくある機能を付けたいです。

疑問

ユーザー設定などを行いたいのでよく使っているfsモジュールを使用したいですが、
セキュリティ面では安全なのでしょうか?
fsモジュールは、ユーザーの個人情報が入るわけなので結構不安です。

まとめ

知りたいことを簡単にまとめると、

fsモジュールで個人情報等が入っているファイルを管理するのは危険?
➁ ➀が危険ならどういったものを使えばいい?

という感じです。よろしくお願いします。

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

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

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

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

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

guest

回答4

0

ベストアンサー

fsモジュールで個人情報等が入っているファイルを管理するのは危険?

はい、まぁまぁ危険です。
しかし質問者さんの懸念と私の懸念はかなりギャップがあると思うので解説していきます。

サービスの提供者は、利用者から個人情報を受け取る場合、
下記の事を要求されます。

  • 情報を漏洩させない <- 質問者さんの懸念
  • 情報が勝手になくなったりしない <- 私の懸念

漏洩するかしないかで言えば、
fsコマンドはNode.jsの標準モジュールですのでウィルスが混入するか否かの点で相当セキュアです。
何処かの誰かが作ったライブラリで知らない内に漏洩してたという懸念はありません。

まぁ、Node.jsで書いたコード越しにユーザーに他人の情報を勝手に渡したらアウトですが、
それ言い始めたらWebサービスなんてするなみたいな話になっちゃうのでお互い頑張りましょ。


既製品のどんなシステムも結局Webサーバのマシンがハッカーの手に落ちて抜かれたらアウトです。

個人開発のような人生オワタを避ける為に究極的には持たないというアプローチは有効です。
ログインせざるを得ないサービスを開発する場合でも、
GoogleのFirehoseやAWSのcognitoといったサービスに委託して極力持たなかったり、
OAuthのようなGoogleやTwitterのサービスのログイン情報を間借りする形がよく取られるアプローチです。

例えば企業ではリスクをとって個人情報を抱える決断を行い、
パスワードのような要らない情報はSHA-1のようなハッシュ化で潰してしまうといった対策になります。
これで万が一漏洩してもちょっとだけ安心。

Webサービスのセキュリティのアドバイスなんかを行ってくれる会社なんてのもありますから、
個人情報を抱える必要はあるが、漏洩するとヤバイケースでは利用することも視野に入れましょう。


問題は情報が勝手になくなったりしない方で、
fsでの個人情報の管理は相当神経質に実装する必要があります。

インターネット黎明期の掲示板サイトなんかは
テキストファイルに利用者の書き込み情報を書き足すという方式で運営していました。
その結果、大変な事になります。

複数人の利用者が同時に書き込むようなケースで、
Aさんの発言だけがファイルに反映され、BさんやCさんの発言は衝突して消されてしまうという問題です。
なので、同時書き込み耐性としてファイルのロックといった様々な技術を駆使することになります。
まぁそのロック処理も大問題なんですけどね。

  • ファイルをロックしたプロセスが解除する前にエラーで落ちてロックしっぱなしになる
  • AとBの2ファイルをロックしたいプロセスが2個あり、それぞれのプロセス片方のファイルをロックしてしまいお見合いしたまま一生解除待ちになる(デッドロック)
  • 上記を高度に解決しつつ高速なファイルの読み書き

その辺の問題に立ち向かった人類の汗と涙の結晶がMySQL等の関係データベースです。
teratailにも沢山プロのエンジニアが居ますが、MySQLに匹敵するようなファイルベースの読み書きロジックをほいと作れるような人間なんて居ないと言い切って良いでしょう。
まさに人生を賭けた大プロジェクトになるわけですよ。

自分ひとりが自宅内でWebサーバ建ててこっそり使う程度ならいざしらず
広く公開して不特定多数の人に使ってもらう事がゴールならば、
絶対にやめとけ、既製品使えとアドバイスします。

投稿2020/08/31 07:16

編集2020/08/31 07:32
miyabi-sun

総合スコア21203

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

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

退会済みユーザー

退会済みユーザー

2020/09/01 02:08

> パスワードのような要らない情報はSHA-1のようなハッシュ化で潰してしまうといった対策になります。 これで万が一漏洩してもちょっとだけ安心。 ここがものすごく引っ掛かります。 適当に修正しません?SHA-1を消すか、もしくはちゃんと書くか。
退会済みユーザー

退会済みユーザー

2020/09/02 04:49 編集

> GoogleのFirehoseやAWSのcognitoといったサービスに委託して極力持たなかったり、 > OAuthのようなGoogleやTwitterのサービスのログイン情報を間借りする形がよく取られるアプローチです。 認証の移譲?中核を自分で実装しない&持たないことが最も大事なメッセージだと思い、その具体的記述が他の皆さんになかったので、高評価しました。
guest

0

➀ fsモジュールで個人情報等が入っているファイルを管理するのは危険?

fsモジュールで管理する、ということは、通常のファイルとしてそれらのデータを管理することとなります。

セキュリティ面ではファイルの位置や中身を考えれば最善策は取れますが、それより問題となりかねないのが排他制御の問題です。同じファイルに複数のスレッドから同時に読み書きを行おうとすると、簡単にファイルは壊れます。

➀が危険ならどういったものを使えばいい?

ある程度規模のあるシステムでは、データベースを活用するのが適切です。排他制御はデータベースエンジン側で造り付けてあるので、そこは活用するだけとなって考慮することが減ります。

投稿2020/08/31 06:24

maisumakun

総合スコア146233

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

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

maisumakun

2020/08/31 06:25

「危険」とは、どのような危険性を考えていますか?
退会済みユーザー

退会済みユーザー

2020/08/31 06:48

何らかの形で個人情報ファイルを閲覧してそこからユーザーの個人情報が流出したり...とかです
guest

0

個人情報を扱うファイルをfsモジュールで管理するのは危険?

ファイルで管理するか DB で管理するか以前に、認証システム(というか、この場合、会員管理システムになると思いますが)を自前で作るのは、たいてい危険です。素直にライブラリやフレームワークを使用してください。

一般論として、初学者が要件定義/設計のできる分野ではありません。

自前で認証システムを作るのは危険なのでしょうか?

個人情報を取り扱うシステムを作成する必要があるのであれば、十分な経験と知識を持つ方に上流工程をサポートしてもらうことをオススメします。

要件定義~システム設計ができる人材になれる記事

投稿2020/08/31 22:12

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

個人情報を扱うファイルをfsモジュールで管理するのは危険?

ユーザ数、アクセス数が増えると、排他処理ができないためファイルの破損リスクが増加します。
データベースの場合、トランザクションの考え方があるため、正しいキューで処理されます。

基本は、ファイル管理ではなく、データベース利用を考えます。
例外として、個人が修学/趣味の目的で作る少人数に限定して公開するサーバーの場合はファイルも有効といったところでしょうか。

セキュリティ面で安全なのでしょうか

複数名で運営管理する場合は「内部からの漏洩」が最大の懸念事項と思います。
テキストファイルのように手早くコピーできてしまう状態での管理手法は、リスクでしかありません。

https://cybersecurity-jp.com/security-incident-case/8418

投稿2020/08/31 21:26

AkitoshiManabe

総合スコア5434

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.34%

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

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

質問する

関連した質問