トークンとパスワードのリセットに関するいくつかの質問を投稿しましたが、最終的にこれをすべて理解することができました. みんな、ありがとう!
したがって、特定の文字がクエリ文字列で機能しないことを読む前に、クエリ文字列をハッシュすることにしましたが、ご想像のとおり、プラス記号は取り除かれています。
クエリ文字列をどのように保護またはハッシュしますか?
これは私が受け取った会社の電子メールのサンプルで、文字列は次のようになります。
AweVZe-LujiIAuh8i9HiXMCNDIRXfSZYv14o4KX0KywJAGlLklGC1hSw-bJWCYfia-pkBbessPNKtQ&t=pr&ifl
私のセットアップでは、単純に GUID を使用しています。しかし、それは問題ですか?
私のシナリオでは、ユーザーは GIUD がなくてもパスワード ページにアクセスできません。これは、クエリ文字列がセッション変数と一致しない場合、ページがオンロードをリダイレクトするように設定されているためですか?
上記のような結果を得るためにクエリ文字列を処理する方法はありますか?
この質問は、知識の習得に関するものです。
アップデート:
ハッシュコードは次のとおりです。
public static string QueryStringHash(string input)
{
byte[] inputBytes = Encoding.UTF8.GetBytes();
SHA512Managed sha512 = new SHA512Managed();
byte[] outputBytes = sha512.ComputeHash(inputBytes);
return Convert.ToBase64String(outputBytes);
}
次に、HASH (UserID) を SESSION に渡してからクエリ文字列として送信します。次のページでは、セッション HASH はクエリと同じではないため、値が一致せず、クエリ文字列が無効になります。
注:すべてのハッシュと暗号化を処理する Encryption というクラスを作成しました。
Session["QueryString"] = Encryption.QueryStringHash(UserID);
Response.Redirect("~/public/reset-password.aspx?uprl=" +
HttpUtility.UrlEncode(Session["QueryString"].ToString()));
また、このページに記載されているすべてを試しましたが、うまくいきませんでした:
C# ですべてのスペースを %20 に置き換えるにはどうすればよいですか?
読んでくれてありがとう。