ファイルの取り扱いとアップロード
ユーザーにファイルをアップロードさせるのは静かな地雷原で、AIの初稿はほぼ必ず穴をふさいでくれない。
- 型とサイズを検証する。 制限がなければ、誰かが10GBのファイルや実行可能ファイルをアップロードする。誰でもリネームできる拡張子だけでなく、実際の中身をチェックすること。
- ファイル名を決して信用しない。
../../etc/passwdのようなファイル名は、素朴なハンドラに意図したフォルダの外へ書き込ませてしまう(これを path traversal という)。提供された名前を使う代わりに、自前の安全な名前を生成すること。 - アップロードをアプリと同じオリジンから配信しないこと、そしてアップロードされたファイルがコードとして実行されないようにすること。サーバーが実行するフォルダにユーザー提供のファイルが落ちることは、乗っ取りへの直通路だ。
これをすべて自分で作る必要はない——ストレージサービスがほとんどを処理してくれる——が、頼まなければならない。AIは自分からは申し出ないからだ。「アップロード機能を追加して」では正常系しか得られない。「ファイルの型とサイズを検証し、画像以外はすべて拒否し、生成した名前でファイルを保存するアップロード機能を追加して」と言えば、安全に近いものが得られる。