我想知道如何通过post方法保护数据,或者它足够安全?!
我在门户网站上使用以下内容:
protected Control CreateCommForm(string action)
{
HtmlGenericControl frm = new HtmlGenericControl("form");
frm.Attributes.Add("method", "post");
frm.Attributes.Add("target", "_blank");
frm.Attributes.Add("action", action.TrimEnd());
/////////////////////////////////////////
HtmlGenericControl hdn_sal_a = new HtmlGenericControl("input");
hdn_sal_a.Attributes.Add("id", "hdn_give");
hdn_sal_a.Attributes.Add("name", "hdn_give");
hdn_sal_a.Attributes.Add("type", "hidden");
hdn_sal_a.Attributes.Add("value", Session["empnum"].ToString());
/////////////////////////////////////////
HtmlGenericControl hdn_sal_b = new HtmlGenericControl("input");
hdn_sal_b.Attributes.Add("id", "hdn_give_b");
hdn_sal_b.Attributes.Add("name", "hdn_give_b");
hdn_sal_b.Attributes.Add("type", "hidden");
hdn_sal_b.Attributes.Add("value", Session["secret"].ToString());
/////////////////////////////////////////
HtmlGenericControl hdn_sal_result = new HtmlGenericControl("input");
hdn_sal_result.Attributes.Add("id", "hdn_give_rr");
hdn_sal_result.Attributes.Add("name", "hdn_give_rr");
hdn_sal_result.Attributes.Add("type", "hidden");
hdn_sal_result.Attributes.Add("value", ((99 * int.Parse(Session["secret"].ToString())) + 761).ToString());
/////////////////////////////////////////
HtmlGenericControl hdn_sal_h = new HtmlGenericControl("input");
hdn_sal_h.Attributes.Add("id", "hdn_givel_h");
hdn_sal_h.Attributes.Add("name", "hdn_give_h");
hdn_sal_h.Attributes.Add("type", "hidden");
hdn_sal_h.Attributes.Add("value", role_h.Hash((int.Parse(Session["secret"].ToString()) - 55).ToString(), "SHA512", null));
/////////////////////////////////////////
frm.Controls.Add(hdn_give);
frm.Controls.Add(hdn_give_b);
frm.Controls.Add(hdn_give_rr);
frm.Controls.Add(hdn_give_h);
body.Controls.Add(frm);
return frm;
}
然后
Control frm = new Control();
frm = CreateCommForm(process_url);
Control crl_data = FormContent(block_type, block_id, frm);
PlaceHolder1.Controls.Add(crl_data);
我检查从该门户网站打开的任何网站中的这些值,如下所示:
var hr = HttpContext.Current.Request.UrlReferrer;
if (hr != null && !string.IsNullOrEmpty(hr.AbsolutePath))
{
if (Request.UrlReferrer.AbsolutePath.Contains("master_portal"))
{
if (Request.Form["hdn_give"] != null && !string.IsNullOrEmpty(Request.Form["hdn_give"].ToString())
&& Request.Form["hdn_give_b"] != null && !string.IsNullOrEmpty(Request.Form["hdn_give_b"].ToString()) &&
Request.Form["hdn_give_rr"] != null && !string.IsNullOrEmpty(Request.Form["hdn_give_rr"].ToString()) &&
Request.Form["hdn_give_h"] != null && !string.IsNullOrEmpty(Request.Form["hdn_give_h"].ToString())
)
{
//------
}
这是否足够安全,还是有更好的方法呢?
答案 0 :(得分:1)
请参阅以下链接:
答案 1 :(得分:1)
正如我在代码中看到的那样,您在此行中包含了用户会话与帖子数据的连接,即Session["secret"]
及其哈希值。
HtmlGenericControl hdn_sal_result = new HtmlGenericControl("input");
hdn_sal_result.Attributes.Add("id", "hdn_give_rr");
hdn_sal_result.Attributes.Add("name", "hdn_give_rr");
hdn_sal_result.Attributes.Add("type", "hidden");
hdn_sal_result.Attributes.Add("value", ((99 * int.Parse(Session["secret"].ToString())) + 761).ToString());
HtmlGenericControl hdn_sal_h = new HtmlGenericControl("input");
hdn_sal_h.Attributes.Add("id", "hdn_givel_h");
hdn_sal_h.Attributes.Add("name", "hdn_give_h");
hdn_sal_h.Attributes.Add("type", "hidden");
hdn_sal_h.Attributes.Add("value", role_h.Hash((int.Parse(Session["secret"].ToString()) - 55).ToString(), "SHA512", null));
如果您检查此值是否相同,现在回发后,您可以避免一次攻击。根据您的代码:
if( Request.Form["hdn_give_rr"] != null &&
Request.Form["hdn_give_rr"].ToString()
== ((99 * int.Parse(Session["secret"].ToString())) + 761).ToString())
{
// User come from the same session, having the same cookie.
}