※jwtによる認証も検討しましたが、XSSによるセッションハイジャックの可能性を考慮してやめました。
そこでCORSの設定をすることでCSRF対策になるのではと考えております。
JWT 利用が XSS につながるとか、CORS で CSRF 対策するとかがどういうロジックなのか理解できていませんが・・・
①asp.net coreにおいてCORS設定をしても、送信元のドメインを偽装してアクセスしてくることは可能でしょうか(考慮すべきか)?
質問は、CORS ポリシーが適用された特定の origin を偽装してアクセスしてきても、ASP.NET Core 標準の CORS の機能(詳細下記 URL 参照)で偽装を見破ってアクセス拒否することができるか・・・という意味ですか?
ASP.NET Core でのクロスオリジン要求 (CORS) を有効にする
https://docs.microsoft.com/ja-jp/aspnet/core/security/cors?view=aspnetcore-5.0
であれば、私が知る限りですが、答えは No です。
origin に指定されるドメインと要求 IP アドレスを調べるとかの手がありそうですが(思い付きです)、そもそも CORS はセキュリティ目的ではなく、逆にセキュリティを緩和するもので、そのような機能は考えてもなさそうです。
②ほかにベストプラクティスな認証方法はあるでしょうか?
ASP.NET 標準の anti-forgery トークンが使えない以上、JWT + HTTPS がベストだと思います。そのあたりは以下の記事にいろいろ書いてありますので読んでみてください(日本語版もあります。ただし翻訳がアレです)。
Secure a Web API with Individual Accounts and Local Login in ASP.NET Web API 2.2
https://docs.microsoft.com/en-us/aspnet/web-api/overview/security/individual-accounts-in-web-api
関係ありそうなところを抜粋しておきます:
"Unlike some forms of authentication (such as cookie-based authentication), the browser will not automatically include the access token in subsequent requests. The application must do so explicitly. That's a good thing, because it limits CSRF vulnerabilities."
"Note: In particular, the MVC portion of your app might use forms authentication, which stores credentials in a cookie. Cookie-based authentication requires the use of anti-forgery tokens, to prevent CSRF attacks. That's a problem for web APIs, because there is no convenient way for the web API to send the anti-forgery token to the client. (For more background on this issue, see Preventing CSRF Attacks in Web API.) Calling SuppressDefaultHostAuthentication ensures that Web API is not vulnerable to CSRF attacks from credentials stored in cookies."
"Bearer token. A particular type of access token, with the property that anyone can use the token. In other words, a client doesn't need a cryptographic key or other secret to use a bearer token. For that reason, bearer tokens should only be used over a HTTPS, and should have relatively short expiration times."
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/05/05 03:22
2021/05/05 04:50