ユーザーが意図した不正行為(軽度に言えば)に対する保護を追加すると、ユーザーが被る可能性のある害がコードに関連していない場合、過剰なエンジニアリングになりますか?
明確にするために、次のような単純なJSON RESTfulサービスを公開しています。
GET /items - to retrieve list of user's items
PUT /items/id - to modify an item
POST /items - to add a new item
サービス自体はブラウザで使用するためのものではなく、ユーザーが制御するサードパーティ製アプリケーション(電話アプリ、デスクトップアプリなど)からのみ使用するものです。また、サービス自体はステートレス(つまり、セッションレス)でなければなりません。
認証は、SSL経由の基本認証で行われます。
私は、次のような1つの可能な「有害な」動作について話しています。
ユーザーはブラウザにGET URLを入力します(理由はありませんが...)。ブラウザは基本認証を要求し、それを処理し、現在のブラウジングセッションの認証を保存します。ブラウザを閉じずに、ユーザーは悪意のあるWebサイトにアクセスします。このWebサイトには、サービスへのPOSTを作成する悪意のあるCSRF / XSRF javascriptがあります。
上記のシナリオは非常にまれであり、ビジネスの観点からはあまり心配するべきではないことを知っています。しかし、状況を改善するために、JSON POSTデータでもユーザー名/パスワードが必要な場合に役立つと思いますか?
または、基本認証を完全に削除し、GETを削除して、認証情報を含むPOST / PUTのみを使用する必要がありますか?GETを介して取得された情報は機密性が高い場合もあります。
一方、カスタムヘッダーの使用は純粋なREST実装と見なされますか?基本認証を削除し、カスタムヘッダーを使用できます。そうすれば、少なくともブラウザーからのCSRF攻撃を回避でき、サービスを使用するアプリケーションはカスタムヘザーでユーザー名/パスワードを設定します。このアプローチの欠点は、ブラウザからサービスを使用できないことです。