Javascript 不能做什么?

2008年7月14日 by comehope    Tags: Javascript  笔记  

  摘自《Javascript权威指南(第五版)》第13.8.1节

  Javascript解释器引入到Web浏览器,意味着载入一个Web页面可能导致任意的Javascript代码在用户计算机上执行。安全的Web浏览器(通常所用的现代浏览器看上去相对比较安全)以各种方式限制脚本,从而防止恶意代码读取私密数据、更改数据或者危及隐私。

  Javascript针对恶意代码的第一条防线就是这种语言不支持某些能力。例如,客户端的Javascript不提供任何方式来读取、写入和删除客户端计算机上的文件或目录。没有File对象,也没有文件访问函数,一个Javascript程序就无法删除用户的数据或者在用户的系统中植入病毒。

  第二条防线在于Javascript在自己所支持的某些功能上强加限制。例如,客户端的Javascript可以脚本化HTTP协议来和Web服务器交换数据,并且它甚至可以从FTP或其他的服务器来下载数据。但是,Javascript不提供通用的网络原语,并且无法为任何主机打开一个socket或者接受一个来自其他主机的连接。

  下面的列表包含了其他一些可能受到限制的功能。注意,这不是一个确定的列表。不同的浏览器有着不同的限制,而且这些限制中的很多可能是用户可配置的:

  ·Javascript程序可以打开一个新的浏览器窗口,但是为了防止广告滥用弹出窗口,很多浏览器限制这一功能,使得只有为了响应鼠标点击这样的用户启动事件的时候,才能使用它。

  ·Javascript程序可以关闭自己打开的浏览器窗口,但是不允许它没有用户确认就关闭其他的窗口。这就防止恶意脚本调用self.close()来关闭用户的浏览器窗口,从而导致程序退出。

  ·当鼠标移动到链接上的时候,Javascript程序无法通过设置状态行文本来使链接的目标地址变得模糊不清(在过去,在状态行提供有关链接的额外信息是很常见的。钓鱼陷阱滥用了这一功能,导致很多浏览器厂商关闭了这一功能)。

  ·脚本无法打开一个太小的窗口(通常一边小于100个像素)或者把一个窗口缩小到太小。类似的,脚本无法把一个窗口移出屏幕之外,或者创建一个比屏幕更大的窗口。这就防止了打开用户无法看到或者可能轻易忽略的窗口,这样的窗口可能包含继续运行的脚本而用户却以为它们已经停止了。还有,脚本无法创建一个没有标题栏或者状态行的浏览器窗口,例如,这样的一个窗口可能伪造一个正在运行的对话框并欺骗用户输入一个敏感性的密码。

  ·HTML的FileUpload元素的value属性无法设置。如果这个属性可以设置,一个脚本可以将其设置为任何想要的文件名,并且引起表单将任何指定文件(例如密码文件)的内容上传到服务器。

  ·脚本不能读取从不同服务器载入的文档的内容,除非这个文档就是包含该脚本的文档。类似的,一个脚本不能在来自不同的服务器的文档上注册事件监听器。这就防止脚本窃取给其他页面的用户输入(例如,组成一个密码项的击键)。


发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。