Cross Site History Manipulation (XSHM) 要如何解呢?
最近有個系統被掃到有「Cross-Site History Manipulation: XSHM」的Issue。
什麼Code會被找出有這樣子的問題呢? 如下面的Pattern,
If (CONDITION)
Redirect(Page B)
我們被掃到的點會在 if ,程式碼如下,
string conditionA = Request.QueryString["id"];
if (conditionA.Equals("A", StringComparison.InvariantCultureIgnoreCase))
{
Response.Redirect("SayHello.aspx");
}
else
{
Response.Redirect("Page1.aspx");
}
那要如何解決呢?
我們可以著重在 History,所以可以讓要轉過去的Page跟之前的URL不重覆,如下,
string conditionA = Request.QueryString["id"];
Random rnd = new Random();
string ranValue = rnd.Next().ToString();
if (conditionA.Equals("A", StringComparison.InvariantCultureIgnoreCase))
{
Response.Redirect("SayHello.aspx?rn=" + ranValue);
}
else
{
Response.Redirect("Page1.aspx?rn=" + ranValue);
}
如果有更好的做法,請跟大家分享哦! 謝謝!
參考資料
Cross-Site History Manipulation: XSHM
Hi,
亂馬客Blog已移到了 「亂馬客 : Re:從零開始的軟體開發生活」
請大家繼續支持 ^_^