zoukankan      html  css  js  c++  java
  • JavaScript安全

    同源策略

    文档的来源定义:协议(http及https),主机(ip)或者URL端口

    脚本的来源定义:脚本的来源和同源策略并不相关,而是脚本所在文档的来源,例:

    来自域A的脚本被包含在域B中。如果脚本打开一个新的窗口来加载域B的另一个文档,脚本对这个文档有完全的访问权。但如果脚本打开一个窗口加载来自域C(或域A)的文档,同源策略就会发挥作用,则脚本对这个文档没有访问权限。

    解决跨域问题

    document.domain属性

    解决大型网站的同源策略的问题,例:

    来自home.example.com的脚本想要读取developer.example.com的属性,可以在两个站点的脚本中设置:

    document.domain("example.com")

    domain中的属性必须要有个点号,它不能是com这种顶级域名

    跨域资源共享

    采用新的:Origin: 请求头和新的Access-Control-Allow-Origin响应头来扩展http

    跨文档消息

    调用Window对象上的postMessage方法,可以异步传递消息事件到窗口文档里。

    跨站脚本XSS

    什么是跨站脚本?例:

    考虑如下web页面,它使用用户名字来向用户问好:

    <script>
    var name=decodeURIComponent(window.location.search.substring(6)) || " ";
    document.write("hello"+name);
    </script>
     
    假设有如下url:
     
    http://www.example.com/greet.html?name=david
     
    它会显示hello david。但是如果url变成这样:
     
    http://www.example.com/greet.html?name=%3Cscript src=siteB/evil.js%3E%3C/%3E
     
    (%3C及%3E是尖括号编码)相当于在该站点注入了siteB站点的脚本,即B站点的脚本就可以获取到当前文档的内容及隐私信息。
     
    通常的防止方式是,在使用任何不可信的数据动态生成文档前,移除HTML标记,上面的例子可以修改如下:
     
    <script>
    var name=decodeURIComponent(window.location.search.substring(6)) || " ";
    name=name.replace(/</g,"&lt;").replace(/>/g,"&gt;");
    document.write("hello"+name);
    </script>
     
  • 相关阅读:
    Error creating bean with name 'entityManagerFactory' defined in class path resource
    com.sun.org.apache.regexp.internal不存在
    [Kubernetes] Best Practices/Design Patterns for Kubernetes in Production
    [Tools] Kill the process running on port 8080
    [AWS] Lab: Docker and CodeCommit Part 1
    [AWS] Lab: Docker with CodeCommit & CodeBuild Part2
    [AWS] Lab: Launching an EKS Cluster
    [AWS] Lab: Configure and Work with CodeCommit from the CLI
    [DevOps] Environment Variables with Travis
    [DevOps] CI/CD Benefits
  • 原文地址:https://www.cnblogs.com/goOtter/p/8953343.html
Copyright © 2011-2022 走看看