[.NET]Use of Cryptographically Weak PRNG

在「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:從零開始的軟體開發生活

請大家繼續支持 ^_^