2

ユーザーがasp.netMVCアプリケーションのフォームを介してパスワードを変更できるようにする必要があります。私が最初に考えたのは、ChangePasswordアクションをRequireHttps属性で装飾することでした。

ただし、属性が開始されて「要求されたリソースにはSSL経由でのみアクセスできます」と返される前に、暗号化されていないパスワードを送信する必要があります。これは目的を打ち負かしますね。

私は混乱していると確信しており、RequireHttpsは便利です。RequireHttpsを使用して目的を達成する方法があるかどうかを知りたいです。あるいは、それを達成するための他の方法を知りたいです。

アップデート:

以下の回答のおかげで、いくつかのオプションがあります-httpsを使用してiframeにパスワード入力をロードできます。つまり、そこからの投稿はすべて暗号化されます。それ以外の場合は、投稿URLを構成するコードでプロトコルをhttpsに設定できます。

var url = '@Url.Action("changePassword", "Security", new { area = "" }, "https")'

どちらが良いかはわかりませんが、2番目のものを試してみます。コメントを歓迎します。

4

3 に答える 3

6

アプリケーションは、SSLが有効になっているかどうかを制御できません。これは、Webサーバーの構成にのみ依存します。あなたができる唯一のことは、あなたのアプリケーションがネットワーク上で暗号化されていないデータを信頼しないことを確認することです。RequireHttpsはまさにそれを行います。この属性で装飾されたアクションは、プレーンテキストで送信されたデータを処理しません。

于 2013-01-03T16:53:34.983 に答える
2

の実際の使用例は、認証が要求された場合にのみスキームRequireHttpsAttributeを適用することです。https://すべての場合ではありません。RequireHttpsAttributeは、 IAuthenticationFilterインターフェイスのOnAuthenticationメソッドのみを実装します。

OnAuthenticationメソッドはInvokeAuthenticationFiltersメソッド内からのみ呼び出されるため、このRequireHttpsAttribute属性は使用しません。

特定のコントローラーまたはアクションを適切に適用するためhttps://に、以下に基づいて独自の属性を作成しますActionFilterAttribute

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = true)]
public class EnforceHttpsActionFilterAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        base.OnActionExecuting(filterContext);

        if (new[] { "GET", "HEAD" }.Any(verb => String.Equals(filterContext.HttpContext.Request.HttpMethod, verb, StringComparison.OrdinalIgnoreCase))) ;
        {
            string url = "https://" + filterContext.HttpContext.Request.Url.Host + filterContext.HttpContext.Request.RawUrl;
            filterContext.Result = new RedirectResult(url);
        }
    }
}

サイト全体に適用するために、サンプルアプリのインスタンスに使用したweb.configマークアップhttps://に触発されることができます。*.azurewebsites.net

  <system.webServer>
    <rewrite>
      <rules>
        <rule name="HTTPS Redirect in Azure">
          <match url="(.+)" />
          <conditions>
            <add input="{HTTPS}" pattern="^OFF$" />
            <add input="{HTTP_HOST}" pattern="^(.+)\.azurewebsites.net(.*)$" />
          </conditions>
          <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" appendQueryString="true" redirectType="SeeOther" />
        </rule>
      </rules>
    </rewrite>
  </system.webServer>
于 2017-10-20T15:20:18.197 に答える
1

注:[RequireHttps]属性はリクエストを処理しませんHEAD-代わりに例外を与えるため、特定のスパイダーまたはプリフェッチツールがサイトにアクセスしようとするとエラーが発生します。

とにかく、IISでリライトモジュールを使用してこのようなことを行うのが最善です。

    <rule name="Redirect to http" enabled="true" patternSyntax="Wildcard" stopProcessing="true">
        <match url="*" negate="false" />
        <conditions logicalGrouping="MatchAny">
            <add input="{HTTPS}" pattern="off" />
        </conditions>
        <action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" redirectType="Found" />
    </rule>

ここから取得:https ://blogs.technet.microsoft.com/dawiese/2016/06/07/redirect-from-http-to-https-using-the-iis-url-rewrite-module/

重要なヒント:新しいサーバーに移行するときは、リライトモジュールを再インストールすることを忘れないでください。忘れた場合に発生するエラーはやや鈍感です。

于 2017-06-03T02:34:26.733 に答える