JavaScript的安全性问题(js不能做什么)--来自新浪勇敢的心的博客

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,"&lt;").replace(/>/g,"&gt;");
5 (拒绝)服务攻击
如果访问了带有js功能的恶意站点,这个站点可以使用一个alert()对话框无限循环占用浏览器,或用无限循环或没有意义的计算占用CPU,类似的攻击会通过分配很多内存来占用系统。
但由于没有人会返回到这样的站点,这并不是一个常见的问题。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。