実現したいこと
WEBサイト上で GAS への POST を fetch()
で実行するにあたって、そのPOST値およびレスポンス値を秘匿したいです。
前提・状況
Chrome 拡張機能を作っています。
どのWEBサイトでも「保存」ボタンをappend()
し、クリックすると一部テキストを GAS に POST し、GAS は Notion に保存する。という機能です。
各WEBサイト上で fetch()
して GAS へ POST する流れを想定していますが、その GAS は自分用なのでキーの検証機能を実装しようと考えました。
そこで不安がよぎりました。
不安・疑問
WEBサイト運営者は、そのサイト上のPOST値やレスポンス値を把握できるのでしょうか?
例えば MutationObserver()
が「DOMツリーの変化を監視する」ように、「POST値やレスポンス値を監視する」みたいなことがもしできるのであれば、私が POST するキーは運営者にバレバレになってしまいますよね。
この不安から生じた疑問が、タイトルの通り、POST値およびレスポンス値を、サイト運営者に秘匿する方法です。
(もちろん、そもそもサイト運営者がこれらの値を確認する方法などない。ということでしたら解決です。)
該当のソースコード
考えている fetch()
の流れです。もしサイト運営者がPOST値を監視できるのであれば、この GAS_KEY
はあまり効果がありませんよね・・。
JavaScript
1const requestData = { 2 data1: 'data1', 3 data2: 'data2', 4}; 5const GAS_KEY = 'gas_key'; 6const requestOptions = { 7 method: 'POST', 8 body: JSON.stringify(requestData), 9 headers: { 10 'Authorization': GAS_KEY, 11 'Content-Type': 'application/x-www-form-urlencoded', 12 } 13}; 14const gasEndpointUrl = 'https://script.google.com/macros/s/●●/exec'; 15fetch(gasEndpointUrl, requestOptions) 16 .then(response => response.json()) 17 .then(data => { 18 console.log('data:', data); 19 }) 20 .catch(error => { 21 console.error('error:', error); 22 });
検索したこと
「POST 監視 JavaScript」で検索するとページが行う通信を監視したい。 というご質問がありました。
やっぱりできてしまうのか?!と一瞬焦りましたが、これはサイト運営者が自ら設置した <form>
についての話題のようで、今回のように運営者でない拡張機能側の値には当てはまらなそうだと思われました。
しかしこの事例だけでは当然判断がつかず、さりとて他に有効な検索ワードも思いつきません。
考えたこと
CSRF 対策として使われる仕組みが転用できるかもと考えました。
つまり POST にキーを持たせるだけでなく、GAS 実行の都度異なる値のトークンを発行し、そのトークンを拡張機能側で受け取って都度 POST に含める仕組みです。
この仕組みは、POST値の監視しかできないのであれば有効に思われますが、しかしPOST値の監視だけでなくレスポンス値の監視もできるのであれば、やはり効果がないだろうという結論に至りました。
補足情報(FW/ツールのバージョンなど)
バージョンなど特筆すべき補足は特にございませんが、質問内容に不足情報などあればご指摘頂ければ幸いです。
直接的な正解に限らず、有効な検索ワードを貼って頂くだけでもうれしいです。(私がそれで理解できずさらに質問を重ねてしまうやもしれませんが・・)
どうぞ宜しくお願い致します。
回答4件
あなたの回答
tips
プレビュー