Вы можете вычислить и передать хэш ваших параметров вместе со строкой запроса. На целевой странице снова вычислите хеш и сравните его с хешем строки запроса, если оба они не совпадают, это означает, что URL-адрес был изменен.
Вы можете создавать функции внутри служебного класса, например
const string secretKey = "%%YoUrSeCrEtKeY##";
public static string CreateTamperProofUrl(string pageUrl)
{
try
{
return HttpUtility.UrlEncode(CreateDigest(pageUrl.Trim()));
}
catch (Exception)
{
throw;
}
}
private static string CreateDigest(string pageUrl)
{
string urlToEncode = secretKey + pageUrl + secretKey;
var hasher = new MD5CryptoServiceProvider();
var encoder = new UTF8Encoding();
byte[] hashedDataBytes = hasher.ComputeHash(encoder.GetBytes(urlToEncode));
string signatureData = Convert.ToBase64String(hashedDataBytes);
return signatureData;
}
public static bool IsValidDigest(string pageUrl, string receivedDigest)
{
if (receivedDigest == null)
{
return false;
}
string expectedDigest = CreateDigest(pageUrl);
if (string.Compare(receivedDigest, expectedDigest) != 0)
{
return false;
}
else
return true;
}
На вашей целевой странице просто отметьте это
if (!Page.IsPostBack)
{
if (Request.QueryString["Digest"] != null)
{
// compare the digest
string id = Request.QueryString["fid"];
string digest = Request.QueryString["Digest"];
if (Utility.IsValidDigest(id, digest))
{
lblStatus.ForeColor = System.Drawing.Color.DarkGreen;
lblStatus.Text = "Valid digest received";
}
else
{
lblStatus.ForeColor = System.Drawing.Color.Red;
lblStatus.Text = "Url is tampered!";
}
}
}