2013-06-09 3 views
2

Я хочу знать, как защитить данные через почтовый метод, или он достаточно безопасен?!Как защитить данные в форме сообщения?

Я использую следующие на моем портале:

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()) 
       ) 
      { 
       //------ 
      } 

Это безопасно достаточно, или есть лучший способ сделать это?

+2

Вы спрашиваете о «достаточно безопасном»: для любого вопроса безопасности первый вопрос должен быть: против какой конкретной атаки? Чего вы пытаетесь защитить? Мне не ясно, какой вопрос безопасности вы пытаетесь задать. Эти ценности будут свободно доступны клиенту. Это риск для вас? Как я узнаю? –

+0

против несанкционированных данных или инъекций или даже получить почтовые данные, а затем передать проверки на сайтах, открытых с моего портала. Честно говоря, я мало знаю о безопасности, поэтому я хочу защитить свои данные, потому что он открывает все веб-сайты в портал. –

ответ

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. 

} 
+0

Да, это то, что я написал, достаточно ли этого, чтобы защитить данные или все же пользователь может получить эти данные. еще один момент я не могу сделать последнюю проверку, потому что сайты распространяются на многих серверах. И портал в определенном сервер. –

+1

@just_name Затем добавьте хэш только своего файла cookie, а не часть сеанса. Это может избежать одной атаки, что вы пытаетесь защитить, есть ли у вас сценарий, который вы пытаетесь избежать? – Aristos

Смежные вопросы