在「Cross Site History Manipulation (XSHM)」中有使用 Random 來解決 Page History 的問題。
但卻又被掃出有「Use of Cryptographically Weak PRNG」的問題。
因為 Random 在「Cross Site History Manipulation (XSHM)」只是拿來當一般的亂數,所以筆者覺得是沒有關係。
但如果要使用加密演算法等級的亂數,可以使用 RNGCryptoServiceProvider 來產生亂數。
詳細可以參考保哥的這篇「亂數產生器:Random 與 RNGCryptoServiceProvider」。
所以原本「Cross Site History Manipulation (XSHM)」的方式,可以改成以下的方式,
string conditionA = Request.QueryString["id"];
//http://www.dotnetperls.com/rngcryptoserviceprovider
//using System.Security.Cryptography;
string cryptRandom = string.Empty;
using (RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider())
{
// Buffer storage.
byte[] data = new byte[4];
// Fill buffer.
rng.GetBytes(data);
// Convert to int.
Int32 value = BitConverter.ToInt32(data, 0);
if (value < 0) value = -value;
cryptRandom = value.ToString();
}
if (conditionA.Equals("C", StringComparison.InvariantCultureIgnoreCase))
{
Response.Redirect("SayHello.aspx?rn=" + cryptRandom);
}
else
{
Response.Redirect("Page1.aspx?rn=" + cryptRandom);
}
參考資料
Cross Site History Manipulation (XSHM)
亂數產生器:Random 與 RNGCryptoServiceProvider
Hi,
亂馬客Blog已移到了 「亂馬客 : Re:從零開始的軟體開發生活」
請大家繼續支持 ^_^