0

これRequireHttpsAttributeで、コントローラー/コントローラー メソッドを SSL 経由でのみ呼び出すことができるようにするために使用できる が得られました。HTTP 経由でメソッドをヒットしようとすると、サーバーは同じコントローラー (メソッド) の HTTPS バージョンに 302 を発行します。

これは、最初のリクエストを安全でない方法で発行しても問題ないことをユーザーに示しています。これが受け入れられるとは思えません。HTTP バージョンがヒットした場合に 404/500 ステータス コードを発行する属性を調べる前に、そのような属性は既に存在しますか?

4

4 に答える 4

2

HTTP バージョンがヒットした場合に 404/500 ステータス コードを発行する属性を調べる前に、そのような属性は既に存在しますか?

いいえ、そのような属性はそのままでは存在しません。

于 2013-03-15T13:51:53.963 に答える
1

これは、最初のリクエストを安全でない方法で発行しても問題ないことをユーザーに示しています。これが受け入れられるとは思えません。HTTP バージョンがヒットした場合に 404/500 ステータス コードを発行する属性を調べる前に、そのような属性は既に存在しますか?

http://の代わりに を使用してこれらの URL に対してアプリケーションをまったく動作させたくない場合はhttps://、何も提供しないでください (404 または接続なし)。

SSL/TLS が使用されていること (および有効な証明書で正しく使用されていること) を確認するのは、最終的にはユーザーの責任であることに注意してください。それらのアドレスへのリンクがhttps://実際に使用されていること、およびユーザーがhttps://少なくとも開始ページで使用されることを期待していることを確認してください。ブラウザーが HSTS をサポートしている場合は、HSTS の使用を検討できます (または、キャッシュされるエントリ ポイントへの永続的なリダイレクトの可能性があります)。

別のコメントから:

URLに関する情報が第三者に漏洩することを望んでいません

クライアントからこの URL を使用してリクエストが行われるhttp://と、サーバー上で何をしてもほとんど意味がありません。手遅れです: 盗聴者が要求を見た可能性があります。(自分のページが外部の Web サイトにリンクしていない場合、リファラーにもそのアドレスは表示されません。) サーバーがプレーンな HTTP ポートをリッスンしていなくても、アクティブな MITM 攻撃者 (または、より簡単に言うと、プロキシ) は、サーバーに到達することなく、そのリクエストをリッスンして URL を取得する可能性があります。

繰り返しますが、ユーザーhttps://が使用されることを期待していることを確認し、安全なページにアクセスしたら、サイトの他のセクションへのリンク/フォーム アクションがすべて を使用していることを確認してくださいhttps://

于 2013-03-15T14:06:10.753 に答える
1

HTTP を使用してページを要求するという単純な行為がユーザー データを侵害しない場合、リダイレクトで十分であり、シナリオに最適なアプローチであると言えます。私たちが対処できることでユーザーを悩ませるのはなぜですか?

于 2013-03-15T13:50:58.250 に答える
0

参考までに、これが私の新しい属性です。

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, 
                Inherited = true, 
                AllowMultiple = false)]
public class HttpsOnlyAttribute : FilterAttribute, IAuthorizationFilter
{
    private readonly bool disableInDebug;

    public HttpsOnlyAttribute(bool disableInDebug = false)
    {
        this.disableInDebug = disableInDebug;
    }

    public virtual void OnAuthorization(AuthorizationContext filterContext)
    {
#if DEBUG
        if (disableInDebug) return;
#endif
        if (filterContext == null)
        {
            throw new ArgumentNullException("filterContext");
        }
        var context = filterContext.HttpContext;
        var request = context.Request;
        var isSecure = request.IsSecureConnection;
        if (!isSecure)
        {
            throw new HttpException(404, "Not found");
        }
    }
}
于 2013-03-15T14:39:53.900 に答える