什么是JavaScript注入攻击?


Posted in Javascript onSeptember 14, 2016

Javascript可以作为黑客攻击网站的一种工具,其中注入js(javascript)恶意脚本就是其中一种手段之一,那么下面,大家来学习一下如何预防js的注入攻击呢?以下有一个不错的陈述,跟大家分享:

什么是 JavaScript 注入攻击?
每当接受用户输入的内容并重新显示这些内容时,网站就很容易遭受 JavaScript 注入攻击。让我们研究一个容易遭受 JavaScript 注入攻击的具体应用程序。假设已经创建了一个客户反馈网站。客户可以访问网站并输入对产品的反馈信息。当客户提交反馈时,反馈信息重新显示在反馈页面上。

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

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

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

此文本表示显示警告消息框的 JavaScript 脚本。在某人将此脚本提交到客户反馈表单后,消息 Boo! 会在将来任何人访问客户反馈网站时显示的攻击。您可能还认为别人不会通过 JavaScript 注入攻击搞破坏。

现在,您对 JavaScript 注入攻击的第一反应也许是不理会。您可能认为 JavaScript 注入攻击不过是一种无伤大雅,不幸的是,黑客会通过在网站中注入 JavaScript 进行破坏活动。使用 JavaScript 注入攻击可以执行跨站脚本 (XSS) 攻击。在跨站脚本攻击中,可以窃取保密的用户信息并将信息发送到另一个网站。

例如,黑客可以使用 JavaScript 注入攻击窃取来自其他用户浏览器的 Cookies 值。如果将敏感信息(如密码、信用卡帐号或社会保险号码)保存在浏览器 Cookies 中,那么黑客可以使用 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 应用程序中显示数据。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jquery插件开发之实现jquery手风琴功能分享
Mar 10 Javascript
js实现搜索框关键字智能匹配代码
Mar 26 Javascript
jQuery插件ajaxfileupload.js实现上传文件
Oct 23 Javascript
jQuery插件FusionCharts实现的2D面积图效果示例【附demo源码下载】
Mar 06 Javascript
Angular.JS利用ng-disabled属性和ng-model实现禁用button效果
Apr 05 Javascript
推荐三款日期选择插件(My97DatePicker、jquery.datepicker、Mobiscroll)
Apr 21 jQuery
基于jQuery实现手风琴菜单、层级菜单、置顶菜单、无缝滚动效果
Jul 20 jQuery
微信小程序数据存储与取值详解
Jan 30 Javascript
10 种最常见的 Javascript 错误(频率最高)
Feb 08 Javascript
详解VUE自定义组件中用.sync修饰符与v-model的区别
Jun 26 Javascript
Bootstrap标签页(Tab)插件切换echarts不显示问题的解决
Jul 13 Javascript
关于微信小程序bug记录与解决方法
Aug 15 Javascript
jQuery实现可拖拽的许愿墙效果【附demo源码下载】
Sep 14 #Javascript
再谈javascript注入 黑客必备!
Sep 14 #Javascript
AngularJS 表达式详解及实例代码
Sep 14 #Javascript
Knockout结合Bootstrap创建动态UI实现产品列表管理
Sep 14 #Javascript
js注入 黑客之路必备!
Sep 14 #Javascript
AngularJS 模块化详解及实例代码
Sep 14 #Javascript
AngularJS 过滤与排序详解及实例代码
Sep 14 #Javascript
You might like
php DOS攻击实现代码(附如何防范)
2012/05/29 PHP
PHP 类相关函数的使用详解
2013/05/10 PHP
浅谈laravel框架sql中groupBy之后排序的问题
2019/10/17 PHP
javaScript对象和属性的创建方法
2007/01/15 Javascript
JQuery 学习笔记 选择器之三
2009/07/23 Javascript
javascript数组去掉重复
2011/05/12 Javascript
JavaScript中使用stopPropagation函数停止事件传播例子
2014/08/27 Javascript
轻松理解JavaScript闭包
2017/03/14 Javascript
vue高德地图之玩转周边
2017/06/16 Javascript
深入浅出es6模板字符串
2017/08/26 Javascript
Bootstrap Table快速完美搭建后台管理系统
2017/09/20 Javascript
JavaScript实现带有子菜单和控件的slider轮播图效果
2017/11/01 Javascript
Vue 中mixin 的用法详解
2018/04/23 Javascript
vue.js层叠轮播效果的实例代码
2018/11/08 Javascript
Vue+Node实现商品列表的分页、排序、筛选,添加购物车功能详解
2019/12/07 Javascript
python中stdout输出不缓存的设置方法
2014/05/29 Python
使用python编写android截屏脚本双击运行即可
2014/07/21 Python
python的tkinter布局之简单的聊天窗口实现方法
2014/09/03 Python
浅谈机器学习需要的了解的十大算法
2017/12/15 Python
Python中使用支持向量机(SVM)算法
2017/12/26 Python
Python 记录日志的灵活性和可配置性介绍
2018/02/27 Python
Flask和Django框架中自定义模型类的表名、父类相关问题分析
2018/07/19 Python
Python3+Appium安装使用教程
2019/07/05 Python
深入解析神经网络从原理到实现
2019/07/26 Python
Python 使用 prettytable 库打印表格美化输出功能
2019/12/26 Python
python matplotlib画盒图、子图解决坐标轴标签重叠的问题
2020/01/19 Python
如何将PySpark导入Python的放实现(2种)
2020/04/26 Python
python基于socket模拟实现ssh远程执行命令
2020/12/05 Python
CSS3制作半透明边框(Facebox)类似渐变
2012/12/09 HTML / CSS
HTML5在canvas中绘制复杂形状附效果截图
2014/06/23 HTML / CSS
台湾深度自由行旅游平台:Tripbaa趣吧
2017/10/10 全球购物
Lookfantastic美国/加拿大:英国知名美妆购物网站
2019/03/27 全球购物
建龙钢铁面试总结
2014/04/15 面试题
员工试用期考核自我鉴定
2014/04/13 职场文书
民事授权委托书范文
2014/08/02 职场文书
2015年社会治安综合治理工作总结
2015/04/10 职场文书