JavaScript的安全性问题(js不能做什么)--来自新浪勇敢的心的博客
2014-01-14 14:33
85 查看
1 js不能做什么
js针对恶意代码的第一条防线就是这种语言不支持某些能力。例如客户端的js不提供任何方式来读取,写入和删除客户端计算机上的文件或目录。
第二条防线在于js在自己所支持的某些功能上强加限制。例如,客户端的js可以脚本化HTTP协议来和web服务器交换数据,并且它甚至可以从FTP或其 他服务器下载数据。但js不提供通用的网络原语,并且无法为任何主机打开一个socket或者接受一个来自其他主机的连接。
一些受限的功能:
js程序可打开新的浏览器窗口,但为防止广告,很多浏览器限制这一功能,使得只有为响应鼠标点击这样的用户启动事件的时候才能使用它。
js程序可关闭自己打开的浏览器窗口,但不允许它没有用户确认就关闭其他窗口。这就防止恶意脚本调用self.close()来关闭用户的浏览器窗口,从而导致程序退出
当鼠标移动到链接上时,js程序无法通过设置状态行文本来使链接的目标地址变得模糊不清(钓鱼陷阱滥用了这一功能,导致很多浏览器厂商关闭了这一功能)
脚本无法打开一个太小的窗口或者把一个窗口缩小到太小。类似地,脚本无法把一个窗口移出屏幕之外,或者创建一个比屏幕更大的窗口。脚本无法创建一个没有标题栏或状态行的浏览器窗口,这样的窗口可能伪造一个正在运行的对话框欺骗用户输入一个敏感性的密码
HTML的FileUpload元素的value属性无法设置。如果这个属性可以设置,一个脚本可以将其设置为任何想要的文件名,并且引起表单将任何指定文件(例如密码文件)的内容上传到服务器
脚本不能读取从不同服务器载入的文档的内容,除非这个文档就是包含该脚本的文档。
2 同源策略
同源策略是对js代码能和哪些web内容交互的一条完整的安全限制。
文档的来源定义为协议、主机和载入文档的URL的端口。
脚本本身的来源和同源策略并不相关,相关的是脚本所嵌入的文档的来源。
实际上,同源策略并非应用于不同源的窗口中的所有对象的所有属性,不过它应用到了其中的大多数属性,尤其是对Document对象的所有属性而言。不同浏 览器厂商对这一安全策略的实现也略有不同。出于各种意图和目的,应把任何包含一个来自其他服务器的文档的窗口看作是禁止脚本进入的。如果脚本打开这个窗 口,脚本也可以关闭它,但它不能以任何方式查看窗口内部。
在某些情况下,同源策略显得太过严格了,它给那些使用多个服务器的大站点带来了一些特殊问题。例如来自sports.sina.com.cn的脚本可能会 想要读从news.sina.com.cn装载进来的文档的属性,为了支持这种类型的大网站,可以使用Document对象的属性domain。在默认情 况下,属性domain存放的是装载文档的服务器的主机名。可以设置这一属性,不过使用的字符串必须具有有效的域前缀。因此,如果一个domain属性的 初始值是"sports.sina.com",就可以把它设置成"sina.com",但不能设置成"sports.sina"或"ina.com",且 domain值中至少要有一个点号,不能把它设为"com"或其他顶级域名。
若两个窗口或帧含有的脚本把domain设置成了相同的值,那么这两个窗口就不再受同源策略的约束,它们可以互相读取对方的属性。
3 脚本化插件和ActiveX控件
4 跨站脚本
跨站脚本,或者叫XSS,是攻击者向目标web站点注入HTML标记或者脚本。
如果web页面动态地产生文档内容,并且这些文档内容基于用户提交的数据,而并没有通过从中移除任何嵌入的HTML标记来“消毒”的话,那么这个web页面很容易遭到跨站脚本的攻击。
通常防止XSS攻击的方式是,在使用任何不可信的数据来创建动态的文档内容之前,从其中移除HTML标记。可以添加如下代码移除<script>标记两边的尖括号,来修复文档。
name = name.replace(/</g,"<").replace(/>/g,">");
5 (拒绝)服务攻击
如果访问了带有js功能的恶意站点,这个站点可以使用一个alert()对话框无限循环占用浏览器,或用无限循环或没有意义的计算占用CPU,类似的攻击会通过分配很多内存来占用系统。
但由于没有人会返回到这样的站点,这并不是一个常见的问题。
js针对恶意代码的第一条防线就是这种语言不支持某些能力。例如客户端的js不提供任何方式来读取,写入和删除客户端计算机上的文件或目录。
第二条防线在于js在自己所支持的某些功能上强加限制。例如,客户端的js可以脚本化HTTP协议来和web服务器交换数据,并且它甚至可以从FTP或其 他服务器下载数据。但js不提供通用的网络原语,并且无法为任何主机打开一个socket或者接受一个来自其他主机的连接。
一些受限的功能:
js程序可打开新的浏览器窗口,但为防止广告,很多浏览器限制这一功能,使得只有为响应鼠标点击这样的用户启动事件的时候才能使用它。
js程序可关闭自己打开的浏览器窗口,但不允许它没有用户确认就关闭其他窗口。这就防止恶意脚本调用self.close()来关闭用户的浏览器窗口,从而导致程序退出
当鼠标移动到链接上时,js程序无法通过设置状态行文本来使链接的目标地址变得模糊不清(钓鱼陷阱滥用了这一功能,导致很多浏览器厂商关闭了这一功能)
脚本无法打开一个太小的窗口或者把一个窗口缩小到太小。类似地,脚本无法把一个窗口移出屏幕之外,或者创建一个比屏幕更大的窗口。脚本无法创建一个没有标题栏或状态行的浏览器窗口,这样的窗口可能伪造一个正在运行的对话框欺骗用户输入一个敏感性的密码
HTML的FileUpload元素的value属性无法设置。如果这个属性可以设置,一个脚本可以将其设置为任何想要的文件名,并且引起表单将任何指定文件(例如密码文件)的内容上传到服务器
脚本不能读取从不同服务器载入的文档的内容,除非这个文档就是包含该脚本的文档。
2 同源策略
同源策略是对js代码能和哪些web内容交互的一条完整的安全限制。
文档的来源定义为协议、主机和载入文档的URL的端口。
脚本本身的来源和同源策略并不相关,相关的是脚本所嵌入的文档的来源。
实际上,同源策略并非应用于不同源的窗口中的所有对象的所有属性,不过它应用到了其中的大多数属性,尤其是对Document对象的所有属性而言。不同浏 览器厂商对这一安全策略的实现也略有不同。出于各种意图和目的,应把任何包含一个来自其他服务器的文档的窗口看作是禁止脚本进入的。如果脚本打开这个窗 口,脚本也可以关闭它,但它不能以任何方式查看窗口内部。
在某些情况下,同源策略显得太过严格了,它给那些使用多个服务器的大站点带来了一些特殊问题。例如来自sports.sina.com.cn的脚本可能会 想要读从news.sina.com.cn装载进来的文档的属性,为了支持这种类型的大网站,可以使用Document对象的属性domain。在默认情 况下,属性domain存放的是装载文档的服务器的主机名。可以设置这一属性,不过使用的字符串必须具有有效的域前缀。因此,如果一个domain属性的 初始值是"sports.sina.com",就可以把它设置成"sina.com",但不能设置成"sports.sina"或"ina.com",且 domain值中至少要有一个点号,不能把它设为"com"或其他顶级域名。
若两个窗口或帧含有的脚本把domain设置成了相同的值,那么这两个窗口就不再受同源策略的约束,它们可以互相读取对方的属性。
3 脚本化插件和ActiveX控件
4 跨站脚本
跨站脚本,或者叫XSS,是攻击者向目标web站点注入HTML标记或者脚本。
如果web页面动态地产生文档内容,并且这些文档内容基于用户提交的数据,而并没有通过从中移除任何嵌入的HTML标记来“消毒”的话,那么这个web页面很容易遭到跨站脚本的攻击。
通常防止XSS攻击的方式是,在使用任何不可信的数据来创建动态的文档内容之前,从其中移除HTML标记。可以添加如下代码移除<script>标记两边的尖括号,来修复文档。
name = name.replace(/</g,"<").replace(/>/g,">");
5 (拒绝)服务攻击
如果访问了带有js功能的恶意站点,这个站点可以使用一个alert()对话框无限循环占用浏览器,或用无限循环或没有意义的计算占用CPU,类似的攻击会通过分配很多内存来占用系统。
但由于没有人会返回到这样的站点,这并不是一个常见的问题。
相关文章推荐
- JavaScript(XMLHttpRequest)跨域访问解决办法及安全性问题
- JavaScript不能做什么
- Q: jquery.tmpl.js - 变量内的html编码不能被识别的问题
- 新浪博客添加JS弹窗
- arcgis for js在缓冲区分析中关于 bufferSpatialReference的设置不正确不能执行或者执行错误问题;
- 流式计算strom,Strom解决的问题,实现实时计算系统要解决那些问题,离线计算是什么,流式计算什么,离线和实时计算区别,strom应用场景,Strorm架构图和编程模型(来自学习资料)
- 关于SpringMvc中js和图片路径正确但是不能加载的问题
- 来自知乎-Web 建站技术中,HTML、HTML5、XHTML、CSS、SQL、JavaScript、PHP、ASP.NET、Web Services 是什么?
- 对于CSDN博客文章不能爬取的问题
- JS导出table数据到excel问题-Automation 服务器不能创建对象
- 什么js(JavaScript)!!!!
- 解决ajax返回innerHTML中javascript不能运行问题
- 这一次不写什么知识博客,就遇到的学习过程中的问题简要概述一下,算是给自己做个归纳总结吧
- 解决ajax不能访问本地文件问题(利用js跨域原理)
- JavaScript提高:004:JS获取Gridview单元格时层级问题
- 轻松学习JavaScript十九:DOM编程学习之在HTML文档什么位置编写JS代码
- JS IOS/iPhone的Safari浏览器不兼容Javascript中的Date()问题如何解决
- 这是我开通博客的原因;虽然不是什么大问题;关于指针与对象(C++)
- JavaScript js 兼容浏览器问题 兼容FireFox(FF)、IE的解决方法
- javascript获取超链接传递的参数,此方法亦能解决2个通过js超链页面传递参数的乱码问题