kintoneの「非表示」はセキュリティではないという話
はじめに
以前、ファイル受け渡し用のkintoneアプリについて相談を受けたことがありました。
元々はファイルサーバーで運用していたのですが、
重要情報を含むファイルがある
一週間後には削除したい
ただし、運用で管理するのが大変
削除漏れが発生しやすい
という課題があり、
「kintoneで管理できないか?」
という話になりました。
最初は「レコードアクセス権限」で考えていた
kintoneには、レコードアクセス権限があります。
しかも、
日付フィールド
ステータス
ユーザー条件
などを条件にできるため、
「期限日を過ぎたら閲覧不可」
という設計自体は可能です。
そのため、最初は、
「期限を過ぎたらレコード自体を見えなくする」
方向で考えていました。
しかし、業務側から別の要望が出た
ここで、実際の運用側からこういう要望がありました。
「過去の依頼内容は参考にしたい」
つまり、
過去にどういう依頼をしたか見たい
以前の頼み方を参考にしたい
申請内容自体は残しておきたい
ということです。
ここで問題になります。
レコードは見せたい。でも添付ファイルは見せたくない
つまり、今回必要だったのは、
レコードは閲覧可能
依頼内容も閲覧可能
ただし、添付ファイルだけ期限後は見せたくない
という制御でした。
しかし、kintoneのフィールドアクセス権限には、
「日時条件」
を付けることができません。
つまり、
「1週間後だけ添付ファイルを見えなくする」
という制御が標準では難しいのです。
そこで出てきた妥協案
最終的に出てきたのが、
「期限を過ぎたら添付ファイルを非表示にする」
という案でした。
例えば、JavaScriptで以下のように制御します。
javascript
kintone.app.record.setFieldShown('添付ファイル', false);これなら、
レコード自体は残る
過去の依頼内容も確認できる
画面上では添付ファイルを見えなくできる
ため、運用要件としてはかなり現実的でした。
ただし、これは“セキュリティ”ではない
ここが今回一番重要なポイントです。
setFieldShown() は、
「画面から見えなくする」
だけの機能です。
つまり、
データを削除しているわけではない
権限を変更しているわけではない
ということです。
これはあくまで、
UI制御
です。
「見えない」と「アクセスできない」は違う
例えば、
編集不可
非表示
disabled
CSSで隠す
これらはすべて、
フロント側の表示制御
です。
つまり、
「通常の画面操作では見えない」
だけです。
一方で、本当のセキュリティは、
「そもそもアクセスできない」
状態を作ることです。
実務では「完全な正解」がないことも多い
今回のケースは、まさにそうでした。
例えば、
セキュリティを優先すれば、過去参照ができなくなる
利便性を優先すれば、情報が残り続ける
運用でカバーすれば、削除漏れが発生する
という問題があります。
だから実際の現場では、
「何を優先するか」
を決めながら、 現実的な落としどころを探すことになります。
今回の「期限後は非表示」という設計も、
完璧なセキュリティではないが、運用とのバランスを取った妥協案
として採用されたものでした。
最後に
kintoneは柔軟な反面、
UI制御
権限制御
セキュリティ
運用
を混同しやすい場面があります。
特に、
「見えなくしたから安全」
と思ってしまうのは危険です。
今回の件は、
「UI制御とセキュリティは別物」
ということを改めて考えさせられる経験でした。
次はこの記事を読みませんか?
いいなと思ったら応援しよう!
よろしければ応援お願いします!いただいたチップは、「🐶こん太のおやつ」とクリエイターとしての活動に使わせていただきます!