ログインページのアンチファイリトークン
-
12-11-2019 - |
質問
私は私のログインページに強撃器トークンを実装しました。
今すぐ私はキーボードのキーを押す1人のユーザーがいました、 そして彼らが彼らの資格情報を記入した後にもう一度ログインボタンをクリックすると、それらはエラーページを取得します。
これをリダイレクトするようなこのケースを癒すためのいくつかのより良い方法はありますか 新鮮なログインページ?
ログインページのページは次のとおりです。 / account / logon
ログイン詳細がSUCESSFULLの場合、ユーザーは:ホーム/インデックスページにリダイレクトされます。 ユーザーがボタンを押したボタンを押します。
解決 3
これへの私の解決策は次のとおりです。
ログインページにもう一度ヒットする場合は、ページをリロードします。 これは反射強度トークンの新鮮な負荷を保証する
とすべてが完了
他のヒント
ログインページにASP.NET AntiForgeryTokenを実装しないでください。トークンは、そのページでCSRFを悪用できるようにするために、ログインページの中で、ログインページの中でのユーザー名に基づいています。
しかし、あなたのログインページにいくつかの形式のCSRF保護を使うべきです - https://security.stackexchange.com/ A / 2126/51772
ここでフルソリューションを書きました:
これはあなたのコントローラーをあなたの取得方法フォームに呼ぶ必要なコードです:
private void SetANewRequestVerificationTokenManuallyInCookieAndOnTheForm()
{
if (Response == null)
return;
string cookieToken, formToken;
AntiForgery.GetTokens(null, out cookieToken, out formToken);
SetCookie("__RequestVerificationToken", cookieToken);
ViewBag.FormToken = formToken;
}
private void SetCookie(string name, string value)
{
if (Response.Cookies.AllKeys.Contains(name))
Response.Cookies[name].Value = value;
else
Response.Cookies.Add(new HttpCookie(name, value));
}
.
とhtml.antiforgeryToken()の代わりにあなたのビューに入れるコード:
@if (ViewBag.FormToken != null)
{
<text><input name="__RequestVerificationToken" type="hidden" value="@ViewBag.FormToken" /></text>
}
else
{
<text>@Html.AntiForgeryToken()</text>
}
. user.identity.isauthenticatedさんが他の投稿のように説明したように、私は例外を処理し、ユーザーをHttpantiforgeryToken の場合はホームページにリダイレクトするためのカスタム属性を使用しました。
私はこれが他の方法を使うことの潜在的なセキュリティ上の懸念を回避することを信じています。
public override void OnException(ExceptionContext filterContext)
{
var controllerName = (string)filterContext.RouteData.Values["controller"];
var actionName = (string)filterContext.RouteData.Values["action"];
var model = new HandleErrorInfo(filterContext.Exception, controllerName, actionName);
if (filterContext.Exception is HttpAntiForgeryException)
{
filterContext.Result = new RedirectToRouteResult(
new RouteValueDictionary
{
{ "action", "Index" },
{ "controller", "Home" }
});
filterContext.ExceptionHandled = true;
}
}
.