安全性
JavaScript不能做什么
Web浏览器针对恶意代码的第一条防线就是它们不支持某些功能。
例如,客户端JavaScript没有权限来写入或删除客户计算机上的任意文件或列出任意目录,这意味着JavaScript程序不能删除数据或植入病毒。客户端JavaScript没有任何通用的网络能力。
浏览器针对恶意代码的第二条防线是在自己支持的某些功能上施加限制,例如:
- JavaScript程序可以打开一个新的浏览器窗口,但是为了放置广告商滥用弹出窗口,只有为了响应鼠标单击这样的用户触发事件时,才能使用它
- JavaScript程序可以关闭自己打开的浏览器窗口,但是不允许它不经用户确认就关闭其他的窗口
- HTML FileUpload元素的value属性是只读的。
- 脚本不能读取从不同服务器载入的文档的内容,除非这个就是包含该脚本的文档。类似地,一个脚本不能在来自不同服务器的文档上注册事件监听器。这就防止脚本窃取其他页面的用户输入
同源策略
同源策略是对JavaScript代码能够操作哪些Web内容的一条完整的安全限制。
具体来说,脚本只能读取和所属问的那个来源相同的窗口和文档的属性。
文档的来源包含协议,主机,以及载入文档的URL端口。从不同Web服务器载入的文档具有不同的来源。通过同一主机的不同端口载入的文档具有不同的来源。使用http协议载入的文档和使用https协议载入的文档具有不同的来源,即使它们来自同一个服务器。
跨站脚本
跨站脚本,叫做XSS。也就是攻击者向目标Web站点注入HTML标签或者脚本。
如果Web页面动态地产生文档内容,并且这些文档内容是基于用于提交的内容,而并没有通过从中移除任何嵌入的HTML标签来消毒的话,那么这个Web页面很容易遭到跨站脚本攻击。
拒绝服务攻击