質問: バックエンドAPIサーバーと通信するクライアントを、JavaScript&HTMLで作成しようとしています。 バックエンドで「正しいクライアントからのリクエストか否か」を調べるためには、クライアントに専用の秘密の文字列を埋め込んでおき、それをリクエストパラメータまたはヘッダに含めて送信するのが一般的なのではないかと思います。 しかし、JavaScript&HTMLでその手法を採用した場合、ユーザは秘密の文字列に容易にアクセスすることができてしまいます。 それにより、(知識のあるユーザであれば)バックエンドAPIを利用した野良サイトを作るなどして自由にAPIを使うことが可能です。 JavaScript&HTMLのクライアントで、「正しいクライアントからのリクエストか否か」を調べるセキュアな方法はありますでしょうか。
回答: ありません。いかなる対策も、改竄をしようとするユーザが解読打破できます。 質問内容からクライアント側がPCであるとします。その環境では、ユーザから隠される情報、ユーザが変更のできない情報はありません。あなたが心血を注ぐことで、ユーザーによるプログラム改竄コストを上げることはできますが、本質的な部分であなたの目的は達成不可能です。 効果的な対策があるとすれは、それはサーバサイドで、クライアントの挙動をチェックをすることでしょう。怪しい挙動・リクエストのパターンを定義し、そのパターンを検知した場合に認証トークンの無効化、もしくは一定時間の ban とします。