HTTPの仕様が安全と呼ぶのはGETのほう、POSTを安全と呼ぶと二つの事故が起きる

POSTは安全なメソッドだ、と書かれた解説はたくさんあります。ところが、HTTPの仕様(2022年のRFC 9110)が安全なメソッドと呼んでいるのはGETのほうで、POSTは安全ではない側に分類されています。仕様の言う安全は、秘密が守れることではなく、呼んでもサーバーの状態を変えないことだからです。この記事では、二つの安全を取り違えると何が起きるのかを、GETとPOSTの比較から整理します。

仕様の言う安全は、呼んでも何も変わらないことです

RFC 9110は、GET、HEAD、OPTIONS、TRACEを安全なメソッドとしています。読み出すだけで、サーバーの状態を書き換えないことを前提としたメソッドです。POSTは、データの作成や送信のように、サーバーに何かを起こすためのメソッドで、安全ではありません。同じ仕様には、何度繰り返しても結果が一度と変わらない冪等という性質もあり、POSTはこれも持ちません。

一方、多くの解説が言うPOSTの安全は、データが見えにくいという意味です。GETはパラメータをURLに含めて送り、POSTは本文(ボディ)に入れて送ります。パスワードのような情報がURLや履歴に残らないので、共有やブックマークで漏れる心配が減る。これは正しい説明です。ただ、同じ安全という一語で、仕様の安全と、見えにくさの安全という別物を呼んでいます。

GETとPOSTの比較

取り違えると、二つの事故が起きます

一つ目の事故は、GETで書き換えを受け付けることです。仕様の上でGETは安全、つまり呼んでも何も変わらないはずのメソッドなので、ブラウザや検索エンジンの巡回プログラム、リンクの先読みの機能は、GETのURLを遠慮なく開きます。削除の操作をGETで受け付けていると、誰かがリンクを開いただけで、あるいは機械が巡回しただけで、データが消えることがあります。書き換えの操作をPOSTに任せるのは、見えにくくするためではなく、意図して送ったときにだけ何かが起きるようにするためです。

二つ目の事故は、POSTなら漏れないという油断です。本文に入れたデータも、通信が暗号化されていなければ途中で読み取られます。送信中のデータを守るのはHTTPSで、POSTではありません。POSTで送れば大丈夫、と書かれた設計書は、鍵の掛かっていない引き出しに書類を入れて、表から見えないから安心と言っているのと同じです。見えないことと、取り出せないことは別です。

POSTが冪等でないことも、取り違えの延長で忘れられがちです。通信が途切れて送信ボタンをもう一度押すと、注文や登録が二重にできることがあります。POSTは見えにくいから安全、という理解のままだと、この二重送信がなぜ起きるのかが説明できません。

効果的、の中身も整理し直せます

POSTが効果的だと言われる点のうち、大量のデータや大きなファイルを送れること、JSONやXMLのような入れ子のあるデータをそのまま本文に入れられることは、置き場所の違いから来る実利です。GETはURLの長さに制限があるため、大きなデータには向きません。

点検項目にまとめると、見られて困るデータはURLではなく本文に入れる、通信はHTTPSで暗号化する、書き換えの操作はGETではなくPOSTで受け付ける、の三つになります。ただ、この三つはそれぞれ別の理由に支えられています。一つ目は見えにくさ、二つ目は暗号化、三つ目は仕様の安全です。理由を一つの安全にまとめてしまうと、どれかが欠けたときに気づけません。

GPTsから書き込ませるときは、何が起きるかが問いになります

GPTsのアクションで、会話で集めた内容を外部のデータベースやスプレッドシートに登録させるなら、その操作はPOSTで定義するのが基本です。仕様の言葉で言えば、安全でない操作をAIに任せることになります。

するとこう問えます。AIがその操作を一回余計に呼んだら何が起きるのか。間違った内容で呼んだら、誰が気づいて、どう取り消すのか。会話の中の名前や社内の情報を、どの項目に入れて外へ送らせるのか。どこまでをAIに任せれば十分に安全なのかは、つなぎ先と扱うデータによって変わり、一般的な線はありません。

あなたが作ろうとしているGPTsのアクションのうち、呼ぶとサーバーの何かが変わる操作はどれでしょうか。その操作が二回呼ばれたら、何が起きるでしょうか。

この記事の背景にある考え方は、拙著『ChatGPT 誰でも1時間でできる! はじめてのGPTsのつくり方』の3章7節「考えるGPT」に書きました。評価や判断をAIに任せると速く公平になる一方、最後の判断は人が行うべきだとして、「その理由は、AIは責任を負えないから、と哲学的には言われています。」と書いています。この節を読むと、AIに書き込みの操作を任せる前に、余計に呼ばれたときや間違って呼ばれたときに、誰が気づいて取り消すのかを自分で決めておけるようになります。

自分の仕事に効くAIは、誰が作るべきか。

ChatGPT 誰でも1時間でできる! はじめてのGPTsのつくり方 表紙

『ChatGPT 誰でも1時間でできる! はじめてのGPTsのつくり方』

要件を日本語で書き出せば、それがそのままAIを動かす。現場の知識を持つ人が自分で作り、育てる、内製化のための本です。

読み終えたとき、手元に残るもの

  • 目的、役割、入力、出力をそろえる要件定義の型
  • 評価基準と判断基準を持たせる考えるGPTの作り方
  • テスト用のダミーデータで直していく手順
  • 複数のGPTを分業と協業でつなぐ設計

画面や機能の記述は2024年時点のものです。仕事を分解し、基準を言葉にする考え方は今も変わりません。

Amazonで見る

著者プロフィール・お問い合わせ