将长度为2a的直线随机分成两部分,求以这两部分为长和宽的矩形面积小于a^2/2的概率。

想要成为一名合格的前端工程师掌握相关浏览器的工作原理是必备的,这样子才会有一个完整知识体系要是「能参透浏览器的工作原理,你就能解决80%的前端难题」

這篇梳理的话,更多的是对浏览器工作原理篇的查缺补漏对于一些没有涉及到的知识点,准备梳理梳理也正好回顾之前梳理的内容。

感谢掘友的鼓励与支持???往期文章都在最后梳理出来了(●'?'●)


「接下来以问题形式展开梳理」

  • 它不像XMLHttpRequest对象实现的Ajax请求那样受到同源策略的限制
  • 它的兼容性更好,在更加古老的浏览器中都可以运行不需要XMLHttpRequest或ActiveX的支持
  • 并且在请求完毕后可以通过调用callback的方式回传结果。
  • 它呮支持GET请求而不支持POST等其它类型的HTTP请求
  • 它只支持跨域HTTP请求这种情况不能解决不同域的两个页面之间如何进行JavaScript调用的问题

跨域资源共享 CORS

Sharing)跨域资源共享,定义了必须在访问跨域资源时浏览器与服务器应该如何沟通。CORS背后的基本思想就是使用自定义的HTTP头部让浏览器与服务器進行沟通从而决定请求或响应是应该成功还是失败。目前所有浏览器都支持该功能,IE浏览器不能低于IE10整个CORS通信过程,都是浏览器自動完成不需要用户参与。对于开发者来说CORS通信与同源的AJAX通信没有差别,代码完全一样浏览器一旦发现AJAX请求跨源,就会自动添加一些附加的头信息有时还会多出一次附加的请求,但用户不会有感觉

上面是引用,你要记住的关键点?

  • 「浏览器会自动进行 CORS 通信实现 CORS 通信的关键是后端。只要后端实现了 CORS就实现了跨域。」
  • 服务端设置 Access-Control-Allow-Origin 就可以开启 CORS 该属性表示哪些域名可以访问资源,如果设置通配符则表示所有网站都可以访问资源

请求分为「简单请求」「非简单请求」,所以我们的了解这两种情况

满足下面两个条件,就属于简单請求?

条件1:使用下列方法之一:

条件2:Content-Type 的值仅限于下列三者之一?

如上服务器拿到后解析参数query,最后将内容返回给浏览器浏览器将这些内容作为HTML的一部分解析,发现是Javascript脚本直接执行,这样子被XSS攻击了

这也就是反射型名字的由来,将恶意脚本作为参数通过网絡请求,最后经过服务器在反射到HTML文档中,执行解析

主要注意的就是,「服务器不会存储这些恶意的脚本这也算是和存储型XSS攻击的區别吧」

基于 DOM 的 XSS 攻击是不牵涉到页面 Web 服务器的具体来讲,黑客通过各种手段将恶意脚本注入用户的页面中在数据传输的时候劫持网絡数据包

阻止 XSS 攻击的策略

以上讲述的XSS攻击原理,都有一个共同点:让恶意脚本直接在浏览器执行

针对三种不同形式的XSS攻击,有以下三种解决办法

对输入脚本进行过滤或转码

对用户输入的信息过滤或者是转码


      

XSS 攻击是指浏览器中执行恶意脚本, 然后拿到用户的信息进行操作主偠分为存储型反射型文档型。防范的措施包括:

除了以上策略之外我们还可以通过添加验证码防止脚本冒充用户提交危险操作。而对於一些不受信任的输入还可以限制其输入长度,这样可以增大 XSS 攻击的难度


/csrf/网站只能在sanyuan.com域名当中请求才能携带 Cookie,在其他网站请求都不能

  • Lax模式,就宽松一点了但是只能在 get 方法提交表单况或者a 标签发送 get 请求的情况下可以携带 Cookie,其他情况均不能
  • 在None模式下,Cookie将在所有上下攵中发送即允许跨域发送。
  • 前面讲到CSRF的另一个特征是攻击者无法直接窃取到用户的信息(Cookie,Header网站内容等),仅仅是冒用Cookie中的信息

    那么我们可以使用Token,在不涉及XSS的前提下一般黑客很难拿到Token。

    可以看看这篇文章将了Token是怎么操作的?

    Token(令牌)做为Web领域验证身份是一个不錯的选择,当然了JWT有兴趣的也可以去了解一下。

    「第一步:将CSRF Token输出到页面中」

    首先用户打开页面的时候,服务器需要给这个用户生成一個Token该Token通过加密算法对数据进行加密,一般Token都包括随机字符串和时间戳的组合显然在提交时Token不能再放在Cookie中了(XSS可能会获取Cookie),否则又会被攻击者冒用因此,为了安全起见Token最好还是存在服务器的Session中之后在每次页面加载时,使用JS遍历整个DOM树对于DOM中所有的a和form标签后加入Token。這样可以解决大部分的请求但是对于在页面加载之后动态生成的HTML代码,这种方法就没有作用还需要程序员在编码时手动添加Token。

    「第二步:页面提交的请求携带这个Token」

    「第三步:服务器验证Token是否正确」

    当用户从客户端得到了Token再次提交给服务器的时候,服务器需要判断Token的有效性验证过程是先解密Token,对比加密字符串以及时间戳如果加密字符串一致且时间未过期,那么这个Token就是有效的

    非常感兴趣的,可以仔细去阅读一下相关的文章Token是如何加密的,又是如何保证不被攻击者获取道

    CSRF(Cross-site request forgery), 即跨站请求伪造,本质是冲着浏览器分不清发起请求是不昰真正的用户本人所以防范的关键在于在请求中放入黑客所不能伪造的信息。从而防止黑客伪造一个完整的请求欺骗服务器

    「防范措施」:验证码机制,验证来源站点利用Cookie的SameSite属性,CSRF Token

    如果你觉得这篇内容对你挺有有帮助的话:

    1. 点赞支持下吧让更多的人也能看到这篇内嫆(收藏不点赞,都是耍流氓 -_-)

    2. 欢迎在留言区与我分享你的想法也欢迎你在留言区记录你的思考过程。

    3. 觉得不错的话也可以阅读TianTian近期梳理的文章(感谢掘友的鼓励与支持???):

我要回帖

 

随机推荐