Scribble at 2023-01-26 12:06:10 Last modified: 2023-01-26 12:12:07

そろそろ自社のコーポレート・サイトについては、問い合わせフォームだけでも新しく書き直しておきたいので、設計を始めている。コードを見る限りセキュリティ上の問題はないと思っているが、とにかく多重投稿に弱い作りなので、HeadlessChrome を使ったクラウド・ワーカーのテンプレ貼り付けを何度も繰り返して受け付けてしまい、そこから役職者が読む Google Chat のルームに重複して問合せ内容を投稿してしまう。裏の validation などで使う PHP のコードは僕が書いたものを流用しているらしいが、JavaScript に依存する、single page のフォームなんてものを実装すると、得てしてこういうことになる。

こういうフォームの設計に特有の問題は、CSRF 対策としてセッションや Cookie を使っていながら、それを適正に最後まで処理していないところにある。フォームの送信が終わったら Cookie の内容やセッションを破棄して静的な HTML に飛ばすと同時にキャッシュを削除してしまえば、多重投稿など誰もできなくなる。バックボタンも無効だし、戻れたとしてもキャッシュが残っていないからである。これは、もちろん銀行をはじめとする個々の手続きが厳格にトランザクションとして扱われるようなサイトであれば当たりまえの仕様であり、中小企業のコーポレート・サイトで採用していけないわけがない。

また、今回は新しい仕様も盛り込むことにした。幾つかアイデアはあるが、一つは問い合わせフォームで受けた内容を一時的に保管し、即座に管理側へメールで通知したり役職者の Google Chat ルームへ投稿しないようにして、あるていどの方針によって破棄するものを無視したうえで本当に通知するべきものだけをバッチ処理で通知するようにする。そこで採用できる方針は幾つかあるが、もちろん多重投稿の可能性を考えて、当日以内で重複しているメールアドレス(これは入力を必須にしている)の問い合わせ内容は無視するようにしたい。そして、これだけではなく、だいたい営業なんて同じところが何度も送ってくるわけなので、全期間にわたっても一定の条件で無視する。これにより、営業目的の問い合わせフォーム利用は初回だけに制限されて、それ以降は全て無視してしまうような設計にしたい。これで、最近はやたらと何度も営業で通知してくる「副業クラウド」とか「M&A総研」とか「アイドマホールディングス」とかは二度と通知しなくて済むようになるだろう。あと、他にも社名で ban するような条件を作ってもいいのだが(あくまでも架空の例だが、「株式会社オチョクリ」とか「イテマエ株式会社」とか、大和言葉を片仮名にしただけの社名とかは、アホがやってるベンチャーに決まってるから無視してもいいだろう)。

それから、クラウド・ワーカーとかがテンプレで貼り付けてくる営業目的の通知は、その多くがフォームで文字数制限があるという注意書きを無視してくるので、もちろん途中で内容が途切れている。これも、いったんは1,000文字以内と注意書きしておいたうえで、わざと全文を受け入れる。そして、バッチ処理の際に1,000文字を越えていたらテンプレ貼り付けと見做して無視するという方針もありえる。ただ、個人の問い合わせでもクレーマーとか頭の弱い人とかは注意書きを無視して幾らも作文を投稿してくるので、そういう人々を無視するのも後で面倒なことになるから、他に何かテンプレ特有の条件で処理した方がいい。もちろんだが、ユーザ・エージェント文字列に "headless chrome" の文字があるときは、問答無用で削除である。

  1. もっと新しいノート <<
  2. >> もっと古いノート

冒頭に戻る


※ 以下の SNS 共有ボタンは JavaScript を使っておらず、ボタンを押すまでは SNS サイトと全く通信しません。

Twitter Facebook