流入攻击

什么样是 JavaScript 注入攻击?

每当接受用户输入的情节并再一次展现这个情节时,网站就很不难遇到 JavaScript
注入攻击。让我们探讨一个便于受到 JavaScript
注入攻击的具体应用程序。假设已经创办了一个客户反馈网站。客户能够访问网站并输入对产品的上报音信。当客户提交举报时,反馈新闻重新显示在反映页面上。

客户反馈网站是一个简单易行的网站。不幸的是,此网站不难受到 JavaScript
注入攻击。

万一正在将以下文本输入到客户反馈表单中:

<script>alert(“Boo!”)</script>

 此文本表示突显警告音讯框的
JavaScript 脚本。在某人将此脚本提交到客户反馈表单后,信息 Boo!
会在将来任什么人访问客户反映网站时体现

 

的抨击。您可能还觉得别人不会透过 JavaScript 注入攻击搞破坏。

现今,您对 JavaScript 注入攻击的率先感应可能是不理睬。您可能觉得
JavaScript 注入攻击不过是一种 无伤大雅

不幸的是,黑客会通过在网站中注入 JavaScript 进行破坏活动。使用
JavaScript 注入攻击可以执行跨站脚本 (XSS)
攻击。在跨站脚本攻击中,可以窃取保密的用户音讯并将音讯发送到另一个网站。

例 如,黑客可以运用 JavaScript 注入攻击窃取来自其他用户浏览器的 库克ies
值。借使将灵活新闻(如密码、信用卡帐号或社会保证号码)保存在浏览器
库克ies 中,那么黑客可以使用 JavaScript
注入攻击窃取那些新闻。或者,假设用户将灵活音信输入到页面的表单字段中,而页面受到
JavaScript 攻击的侵蚀,那么黑客能够运用注入的 JavaScript
获取表单数据并将其发送到另一个网站。

请中度器重。认真对待 JavaScript
注入攻击并维护用户的保密新闻。在接下去的两局地中,大家将探究幸免 ASP.NET
MVC 应用程序受到 JavaScript 注入攻击的二种技术。

 

措施 1:视图中的 HTML 编码

 

阻拦 JavaScript 注入攻击的一种不难方法是重复在视图中显得数据时,用 HTML
编码任何网站用户输入的数据 

如:<%=Html.Encode(feedback.Message)%>

利用 HTML 编码一个字符串的含意是什么样啊?使用 HTML
编码字符串时,危险字符如 <> 被互换为 HTML 实体,如
<>。所以,当使用 HTML 编码字符串
<script>alert(“Boo!”)</script> 时,它将更换为
<script>alert(“Boo!”)</script>。浏览器在解析编码的字符串时不再举行JavaScript 脚本。而是浮现无害的页面

 

格局 2:写入数据库从前的 HTML 编码

除却在视图中突显数据时行使 HTML
编码数据,还足以在将数据交到到数据库从前使用 HTML
编码数据。第二种办法正是程序清单 4 中 controller 的情况。

如:

public ActionResult Create(string message)
{
   // Add feedback
   var newFeedback = new Feedback();
   newFeedback.Message = Server.HtmlEncode(message);
   newFeedback.EntryDate = DateTime.Now;
   db.Feedbacks.InsertOnSubmit(newFeedback);
   db.SubmitChanges();

   // Redirect
   return RedirectToAction(“Index”);
}

 

请小心,Message 的值在提交到数据库从前是在 Create() 操作中经过 HTML
编码的。当在视图中重新突显 Message 时,Message 被 HTML
编码,由此不会履行其余注入到 Message 中的 JavaScript。

总结

平常,人们喜爱使用本学科中研商的第一种方法,而不爱好使用第三种办法。第二种办法的题目在于在数据库中最终会保留
HTML
编码的数据。换言之,数据库中的数据会蕴藏奇怪的字符。那有啥样坏处呢?假使急需用除网页以外的样式显得数据库数据,则将遭遇题目。例如,无法随便在
Windows Forms 应用程序中彰显数据。

社会保险, 

 

 原文链接:http://msdn.microsoft.com/zh-cn/dd320308.aspx

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注