現在、FlutterやVue等の勉強中なのですが、サーバーサイドアプリの必要性がわかりません。
SPA等で制作する場合サーバーサイドアプリはDBデータの取得・更新程度の役割しか無いと思います。
そこで直接フロントサイドアプリからDB操作を試みようと調べてみましたが、「セキュリティ観点からよくない」という記事を見かけます。
間にサーバーサイドアプリを挟んだとしても間接的ではありますが外からDBを操作していることに違いはないと思います。
サーバーサイドで認証機能を設けてアクセスに制限をかけてセキュリティを高める目的も有るのでしょうがDB接続用のパスワードをより強固なものにすれば解決するのでは?と思ってしまいます。
なぜフロントサイドから直接DBを触ってはいけないのでしょうか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答8件
0
ベストアンサー
フロントからDBへアクセス出来ると言う事は、フロント側の人が適当にプログラムを作り、ユーザー/Passwordを使って接続操作できる事を意味します。
その為、公開環境ではセキュリティーに問題があると言う事と思います。
社内等の非公開のネット環境では、一般的に問題ありませんので、フロントから直接DBを操作可能として、開発側の負担を軽減させます。
3層の環境では、フロント側からはサーバー側プログラムのキック(起動)しか許しません。この時に、引数値(データ)をサーバー側へ一緒に添付します。
サーバー側プログラムは、当然に制限付き開発環境者のみが作成できます。
また、フロント側からサーバーへプログラムの保管ができない様に制限します。
この様にする事で、開発者が意図したデータしかDBへの更新が出来ない様にする訳です。
投稿2021/07/07 01:49
総合スコア553
0
いやー、やっぱりフロントエンドからでもDBを更新したくなりますよね。そんなあなたにぜひ触っていただきたいのがFirestoreです。
https://firebase.google.com/docs/firestore
これはGoogleがFirebaseの一部として提供している、まさに「フロントエンドから直接データの取得・保存ができるDB」です。別に「フロントサイドから直接DBを触ってはいけない」わけではなかったのでした。良かったですね。
もっとも、他の回答者の方々は様々な否定的見解とその理由を書かれているわけですが(そしてそれらが間違っているわけではないのですが)、それは従来からあるDB(おそらくRDBMS)をそのままフロントエンドに大公開するという前提をおいているためです。まあ、普通に考えるとそういう前提になりますよね。それを覆すには、新しい仕組みが必要です。例えばFirestoreでは、セキュリティについては「セキュリティルール」というしくみを導入し、閲覧可能かどうか、変更可能かどうかを細かく設定することができます。これにより、他の利用者や運用者の情報を適切に隠しながら、必要な情報を参照・更新できるようになっています。
https://firebase.google.com/docs/firestore/security/get-started
一方で、単純にセキュリティルールだけですべてが解決できるわけではありません。そもそもセキュリティルールを適切に設定するのも困難です。ちょっと間違えると、一部の人以外には見えてはいけないデータが見えるようになってしまったり、あるいは更新したいデータが更新できなくなってしまったりします。あんまり難しい場合は素直にサーバーサイドにコードを書いた方が早かったのでは…ということになりかねません。
また、データだけではなく、コードについてもすべて公開するわけにはいかない場合もあります。ユーザーには見せたくないロジックもあるわけです。そのような場合、やはりサーバーサイドのコードが必要になります(FirebaseではCloud Function等を使うことになります)。
というわけで、Firestoreのような仕組みが一般的になるにはまだまだ超えなければいけないハードルがありそうです。でも、せっかくすでにある技術なので、興味があればぜひFirestoreで、フロントエンドから直接DBを触る経験を試してみていただくとよいのではないかと思います。
投稿2021/07/13 14:16
編集2021/07/20 19:14総合スコア1877
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
権限の問題が大きいかと。
一般論として、アプリケーションを利用するユーザに与えたい権限と DB で設定できる権限は、乖離があります。
ユーザが必要とする権限を DB に設定しようとすると、必要以上の権限を付与することになるので、少し雑な設計をしただけでセキュリティ的に問題が発生するケースがあります。
また、できるだけ小さな権限で運用しようとすると、各ユーザ(ロール)の権限をアプリ改修の都度洗い出し設定しなおす必要があるので、開発が非常に煩雑になります。
かと言って、権限を見直さなければ、必要以上の権限を残してしまう事になります。
余談ですが、この方法では管理レイヤをまたぐので、部署間の連携も必要となり運営コストアップにつながります。
アプリケーション利用者と DB の権限が完全に一致するようなアプリケーション(例えば、DB のクライアントアプリ)であれば、直接接続しても何ら問題はありません。
*まぁ、外部から DB を直接参照させるの?っていう別のポリシー的な問題は発生しますが。
投稿2021/07/07 04:01
退会済みユーザー
総合スコア0
0
DB接続用のパスワードをより強固なものにすれば解決するのでは?と思ってしまいます。
それはどこに保管するのですか?
ブラウザ内から使えるようにしていては、「誰でもデータベースを自由に触れる」のに等しい状態となります。
投稿2021/07/07 01:51
総合スコア146018
0
フロントの定義が曖昧。
フロント=Webのブラウザで表示してる画面。
クライアント=PCやスマホのアプリ。
DBに接続するためにはパスワードが必要。
JSにパスワード書いてたら外から見える。危険。パスワードを複雑にしてもそのまま見えるんだから全く意味がない。
だからJSからDBに接続なんて最初から不可能。
クライアントでも同じ。アプリ内に埋め込んでたパスワードなどの機密情報が盗まれることはありえる。
アプリからDB接続自体は可能。普通はアプリの外の設定ファイルなどにパスワードを保存。外部に公開しないアプリなら埋め込んでもいい。
今はアプリでもサーバーサイドとの連携が普通だけど。
「フロントやクライアントなどのユーザーに届くものは中身を見られて全部盗まれる前提」
JSだけでなんでもできると勘違いしてる初心者はプログラミング以前の基礎知識が抜けてる。
プログラミングの前にユーザー視点で色々触ってみた経験が足りてない。
投稿2021/07/13 03:27
退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
ODBCなどでアプリとして直接接続しないかぎり
フロントサイドから直接DBを触る仕組みはありません
フロントのすることは所詮APIに値を渡すしてバックから
結果をもらうくらいです
投稿2021/07/07 01:43
総合スコア116724
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/07/07 01:51
2021/07/07 02:05 編集
2021/07/07 02:20
2021/07/07 03:07
0
なぜフロントサイドから直接DBを触ってはいけないのでしょうか?
絶対に触ってはいけないというルールはないので触りたければ触ればいいと思いますが、「セキュリティ観点からよくない」という記事が多いという事実を認識した上でやるかやらないかと思います。自分一人で使うものとかであれば、色んなリスクを承知の上でやってもいいかもしれませんね。
サーバーサイドで認証機能を設けてアクセスに制限をかけてセキュリティを高める目的も有るのでしょうがDB接続用のパスワードをより強固なものにすれば解決するのでは?と思ってしまいます。
どういう実装を想定されているのかちょっと分からないのですが、もしそれで解決するのであれば、そういう前例や紹介記事があってもおかしくないと思います。誰だってサーバレスでサービスを提供できるのであれば、それはすごくありがたいことですから。ですが、それらがないということは、だれもやらないということです。めちゃくちゃ手間をかけて色んなハードルをクリアすれば実現できるのかもしれませんが、それをやるくらいならサーバで簡単に実装した方が楽ということなんだろうと思います。
ただ、逆に考えるとこういう発想から新しい技術が生まれるのかもしれません。もし質問者ご自身で具体的な実装方法の考えがあるのならチャレンジされるといいと思います。
投稿2021/07/07 02:07
総合スコア4853
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/07/07 02:26
2021/07/07 04:01
2021/07/08 05:01
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/07/07 02:24