同源
同源的理解:脚本本身的来源和同源策略并不相关,相关的是脚本所嵌入的文档的来源!!
同源还适用于XMLHttpRequest生成的HTTP请求,这个对象允许客户端javascript生成任意的http请求到脚本所属的文档的web服务器,但是不允许脚本和其他web服务器通信
不严格的同源策略
例如home.example.com想要合法地读取developer.example.com载入的文档或来自order.example.com的脚本。为了支持这种类型的多域名站点,可以使用Document的domain属性。必须是有效的域前缀,必须有一个点号,不能把它设置为”com”或其他顶级域名。如果两个窗口包含的脚本把domain设置成了相同的值,那么这两个窗口就不受同源策略的约束。
跨域资源共享:
这项技术已经标准化,这个标准草案用新的“Origin:”请求头和新的Access-Control-Allow-Origin响应头来扩展HTTP。它允许服务器用头信息显式地列出源,或使用通配符来匹配所有的源并允许由任何地址请求文件。这样XMLHttpRequest就不会被同源策略所限制了。
另一种新技术,叫跨文档消息(cross-document messageing),
允许来自一个文档的中以传递文本消息到另一个文档里的脚本,而不管脚本的来源是否不同。调用Window对象的postMessage()方法,可以异步传递消息事件(可以用onmessage事件句柄处理程序函数处理它)到窗口的文档里。一个文档里的脚本还是不能调用在其它文档里的方法和读取属性,但它们可以用这种消息传递技术来实现安全通信。
防止XSS
在使用任何不可信的数据来动态的创建文档内容之前,从中移除HTML标签。可以通过添加如下一行代码来移除<script>标签两边的尖括号
name = name.replace(/</g,”<”).replace(/>/g,”>”);
IE8中 定义了一个更加微妙的toStaticHTML()方法,可以移除<script>标签(和其他潜在的可执行内容)而不修改不可执行的HTML。toStaticHTML()是不标准的