前提・実現したいこと
node.jsアプリにメールアドレスとパスワードを設定してログインログアウト機能...といったよくある機能を付けたいです。
疑問
ユーザー設定などを行いたいのでよく使っているfs
モジュールを使用したいですが、
セキュリティ面では安全なのでしょうか?
fs
モジュールは、ユーザーの個人情報が入るわけなので結構不安です。
まとめ
知りたいことを簡単にまとめると、
➀ fs
モジュールで個人情報等が入っているファイルを管理するのは危険?
➁ ➀が危険ならどういったものを使えばいい?
という感じです。よろしくお願いします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答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総合スコア21203
0
➀ fsモジュールで個人情報等が入っているファイルを管理するのは危険?
fs
モジュールで管理する、ということは、通常のファイルとしてそれらのデータを管理することとなります。
セキュリティ面ではファイルの位置や中身を考えれば最善策は取れますが、それより問題となりかねないのが排他制御の問題です。同じファイルに複数のスレッドから同時に読み書きを行おうとすると、簡単にファイルは壊れます。
➀が危険ならどういったものを使えばいい?
ある程度規模のあるシステムでは、データベースを活用するのが適切です。排他制御はデータベースエンジン側で造り付けてあるので、そこは活用するだけとなって考慮することが減ります。
投稿2020/08/31 06:24
総合スコア146229
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/08/31 06:48
0
個人情報を扱うファイルをfsモジュールで管理するのは危険?
ファイルで管理するか DB で管理するか以前に、認証システム(というか、この場合、会員管理システムになると思いますが)を自前で作るのは、たいてい危険です。素直にライブラリやフレームワークを使用してください。
一般論として、初学者が要件定義/設計のできる分野ではありません。
個人情報を取り扱うシステムを作成する必要があるのであれば、十分な経験と知識を持つ方に上流工程をサポートしてもらうことをオススメします。
投稿2020/08/31 22:12
退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
個人情報を扱うファイルをfsモジュールで管理するのは危険?
ユーザ数、アクセス数が増えると、排他処理ができないためファイルの破損リスクが増加します。
データベースの場合、トランザクションの考え方があるため、正しいキューで処理されます。
基本は、ファイル管理ではなく、データベース利用を考えます。
例外として、個人が修学/趣味の目的で作る少人数に限定して公開するサーバーの場合はファイルも有効といったところでしょうか。
セキュリティ面で安全なのでしょうか
複数名で運営管理する場合は「内部からの漏洩」が最大の懸念事項と思います。
テキストファイルのように手早くコピーできてしまう状態での管理手法は、リスクでしかありません。
投稿2020/08/31 21:26
総合スコア5434
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/09/01 02:08
退会済みユーザー
2020/09/02 04:49 編集