stickout

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

    XSS攻击分为:“你的网站攻击别人的网站”或是“别人的网站攻击你的网站”两种。

  在ASP.NET MVC里,这两种攻击情境都内建了相应的防护措施,要防止“你的网站攻击别人的网站”,可以使用Html.Encode、Url.Encode或Ajax.JavaScriptStringEncode辅助方法;

而防止“别人的网站攻击你的网站”则使用AntiForgeryToken辅助方法。

  Html.Encode辅助方法无非就是进行Html编码;Url.Encode辅助方法无非就是进行Url编码;Ajax.JavaScriptStringEncode辅助方法就是Js字符串进行文字编码,确保输出的Js字符串

不会含有恶意XSS攻击字符串。

Ajax.JavaScriptStringEncode辅助方法例:

介绍AntiForgeryToken辅助方法:

视图代码

 1 @using (Html.BeginForm()) {
 2     @Html.AntiForgeryToken()
 3     @Html.ValidationSummary(true)
 4 
 5     <fieldset>
 6         <legend>请输入您的账号、密码</legend>
 7 
 8         <div class="editor-label">
 9             @Html.LabelFor(model => model.email)
10         </div>
11         <div class="editor-field">
12             @Html.TextBoxFor(model => model.email, new { data_val_email="请输入Email地址"})
13             @Html.ValidationMessageFor(model => model.email)
14         </div>
15 
16         <div class="editor-label">
17             @Html.LabelFor(model => model.password)
18         </div>
19         <div class="editor-field">
20             @Html.EditorFor(model => model.password)
21             @Html.ValidationMessageFor(model => model.password)
22         </div>
23 
24         <p>
25             <input type="submit" value="登录" />
26         </p>
27     </fieldset>
28 }

 

注: AntiForgeryToken辅助方法,必须以Html.BeginForm声明才行,单纯HTML的<form>标签是不行的

C#代码

 1 [HttpPost]
 2 [ValidateAntiForgeryToken]
 3 public ActionResult Login(MemberLoginViewModel login, string returnUrl)
 4 {
 5     if (ValidateUser(login))
 6     {
 7 
 8         FormsAuthentication.SetAuthCookie(login.email, false);
 9 
10         if (string.IsNullOrEmpty(returnUrl))
11         {
12             return RedirectToAction("Index", "Home");
13         }
14         else
15         {
16             return Redirect(returnUrl);
17         }
18     }
19 
20     ModelState.AddModelError("", "您输入的账号或密码错误");
21     return View();
22 }

 

posted on 2014-05-14 10:01  stickout  阅读(617)  评论(1编辑  收藏  举报