安心の説明
ICHIGYO が何を守り、何を守らないか。何を攻撃して破れなかったか。まだ無いものはいつ来るか。この1枚に全部書きます。
6つの仕組み
- ログインは入口で強制 — アプリのコードに認証が無くても、名簿に無い人は1バイトもアプリに届きません。AI がログイン画面を作り忘れても、消しても、関係ありません。
- 名簿は人間だけが触る — 誰が入れるかは管理者がコンソールで決めます。AI は名簿を作れず、変えられません。退職者は名簿から外した瞬間に遮断されます(毎回の突き合わせ)。
- 会社ごとに別のデータベース・別の権限 — 他社のデータには権限レベルで到達できません。アプリのバグでは越えられない層で分けています。
- 外への通信は許可した先だけ — アプリが通信できる相手を管理者が決め、全通信を記録します。AI は必要な宛先を「申告」できますが、自分では許可できません。
- 外に見せるページは、人が承認したパスだけ — ログインなしで開けるページ(案内・問い合わせフォーム・外部からの通知の受け口)は、AI が申告し、管理者がコンソールでパスごとに承認したものだけが開きます。承認していないパスは、今までどおり名簿の人しか入れません。Standard 以上。
- 壊す操作は最初から通らない — データベースの変更は追加だけ(テーブル追加・列追加・索引)。DROP や DELETE は本物のパーサで弾き、拒否した記録も残します。データを1行直すときは人間の承認を通します。
会社のドメイン(例: app.example.co.jp)でも同じアプリを開けます。Standard 以上。
守る範囲は「入口・境界・記録」
ICHIGYO が保証するのは、入口(名簿に無い人は入れない)、境界(会社のデータと通信先が混ざらない)、記録(誰が・いつ・何をしたか、拒否も含めて残る)の三つです。
アプリの画面の中で「誰に何を見せるか」は、アプリを作った AI のコードの責任です。ICHIGYO は今の利用者と札(役割)をアプリに渡しますが、出し分けの中身は保証しません。給与や人事評価のように見る人を厳密に分けたいデータは、別のアプリ(別の名簿)にしてください。計算や業務の判断が正しいかも同じで、アプリを作った人と AI の側の責任です(利用規約)。
AI に頼む点検
ログイン、他の会社のデータと混ざらないこと、外への通信、データを壊す操作は、アプリが何をしても ICHIGYO の入口で止めています。そのうえで、アプリの中の権限、入力の扱い、ログインなしで開くページの中身は、作った人と AI の側で見る範囲です。ここを見るために、ICHIGYO 用の点検表を用意しています。AI に「点検して」と頼むと、この表に沿ってアプリを見直します。
点検は見落としを減らすためのもので、問題が無いことを保証するものではありません。
自分で攻撃して、破れなかったこと(M5.5)
2026-09-01 に運営が本番環境へ実際に攻撃を仕掛けた記録です。その後も、機能を開けるたびに攻撃し直しています(2026-09-11:決済の受け口・書き出し・プレビュー・名簿の口/2026-10-06〜08:ログインなしで見られるページ・独自ドメイン・他のアプリからのなりすまし送信)。破れた箇所は塞いでから開けています。
- スキーマ破壊(DROP TABLE/複文に紛れ込ませる/DELETE/列の削除/関数の中に隠す)→ 全て拒否。理由と代替案を返す
- 許可リスト外への外部送信 → 拒否・記録
- 利用者ヘッダの偽装 → 未ログインは 401 で未到達。ログイン時も2層で除去
- 他アプリのログインクッキーの流用 → アプリ単位のセッションとホスト限定クッキーで無効
- 他社のデータベースへの接続 → 権限レベルで到達不可
- テナントの権限から共有データベースへの接続 → 1件の穴を発見し、修正し、再攻撃で閉塞を確認。データは読めていませんでした(テーブル権限が別の層で守っていた)が、多層防御の破れとして塞ぎました
「作った証拠」ではなく「破れない証拠」を集める工程です。外部の専門会社による検査(ペネトレーションテスト)はまだ受けていません。顧客が20社に達する前に受けます。
バックアップと復旧の事実
- データは AWS 東京リージョンの PostgreSQL に保存し、保存時に暗号化しています。
- データベース全体の自動バックアップを毎日取得しています。運営側の障害からの復旧は全プランで運営の義務です。
- お客様の誤操作からの復元(「昨日に戻す」)は Pro プランで提供します。日付は決まり次第ここに書きます。それまでは、コンソールの「書き出し」でいつでもデータとアプリのソースを取り出せます。
- アプリのコードは版ごとに保管し、コンソールの「デプロイ履歴」からいつでも前の版に戻せます(再ビルド無し・即時)。
更新しても止まらない・勝手に変わらない
- 新しい版は起動確認が通ってから切り替えます。ビルド中・確認中も、社員には今までの版がそのまま見えています。
- 2回目以降の版は「作る人だけが見られる」状態で止まり、人間がコンソールで承認するまで社員の画面は変わりません。
上限の考え方(三層)
- 料金表には、人が理解する数字だけ(データベース容量・作る人・使う人)。
- 作る人向けの仕様には、全部の数字を「保護のための上限」として書きます(同時に処理する操作の数・DB 接続数・メール送信回数・デプロイ回数・外部通信の許可先)。AI には接続時に自動で伝わります。
- 止めたときは、何に当たったか・何をすればよいか・コンソールのどこを見るかを必ず返します。止める順序は「新しいデプロイ → 外部通信 → 大きな書き込み」で、社員のログインと閲覧は止めません。自動の従量課金はありません。
データの扱い
- 保管場所: AWS 東京リージョン。海外には置きません。
- 暗号化: 保存時(データベース・ファイル)と通信時(HTTPS)。
- 削除: 解約後 30 日で削除します。それまでに書き出せます。
- 監査ログの保持: 90 日(Pro は 1 年)。
- 運営者のアクセス: 障害対応に必要な場合のみ。アクセスした事実を記録し、対象のお客様に通知します。
- 置いてはいけない情報: クレジットカード番号・平文のパスワード・マイナンバーの三つ(利用規約)。
- ログイン: パスコードは10分で失効、1アドレス1時間に5通まで。ID方式は連続10回の失敗で15分ロック。クッキーはホスト限定・SameSite=Lax。
まだ無いもの
- 準備中(日付は決まり次第ここに書きます): 誰でも登録できる会員制のサービス/公開するときの自動の点検/作る人が画面を指して直す指示を出す機能/ファイル保管/定期実行(Standard 15分・Pro 1分)/昨日に戻す(データ・Pro)
- 日付未定: テスト環境(アプリとデータベースの分身)/リアルタイム更新(WebSocket)/読み取り専用の接続トークン
- やらないこと: Node.js 以外の実行環境/自動の従量課金/アプリ内の出し分けの保証
制約は「約束の裏返し」か「日付つきの未実装」のどちらかにします。どちらでもない制約を見つけたら、それは不具合なので教えてください。