金沙澳门官网网址_金沙国际登陆

欢迎加入金沙澳门官网网址体验更多不一样的精彩.,金沙国际登陆提供最丰厚回馈!,因为金沙澳门官网网址这里的游戏是多种多样的,为大家打造一个最专业的化的超级五星酒店。

金沙澳门官网网址 > 金沙澳门官网网址 > 这个锅我不背,的网站都忽略了这些

原标题:这个锅我不背,的网站都忽略了这些

浏览次数:78 时间:2019-10-14

3. HTML5 对 Web 安全的影响

HTML5带来了很多新的特性,让浏览器和javascript获得了更大的能力。然而能力越大,被攻破后的危险就越大。

HTML5对XSS的影响主要体现在:

更大的攻击面,HTML5带来来更多的标签和更多的属性,XSS发生的可能性更大。更大的危害,HTML5更多的资源可以被XSS利用。黑客可以利用浏览器的一切权限,比如本地存储,GEO,WebSocket,Webworker。

遗憾的是HTML并没有针止XSS和XSRF带来系统性解决方案。在这个前提下,CSP变得非常重要,可以大大降低XSS后的危害。

HTML5时代实际对开发者提出来更高的要求,因为有更多的交互,更多的前端行为,HTML5有更多的API。希望共勉,不做蒙古大夫,与广大的开发者一同提高中国互联网的用户体验!

IE9 跨域请求兼容

Chrome: You will die! IE9: Not today!

1
2
Chrome:  You will die!
IE9:     Not today!

虚拟DOM提升性能

PC端上就现代浏览器内核的渲染性能而言,用Angular没出现过什么性能问题。

移动端在操作比较多的DOM时,低端机上会出现卡顿。不过还是有优化方案的,而且Angular本身也是不提倡频繁、大量的操作DOM,比如HTML游戏。

1. 数据通道安全

http协议下的网络连接都是基于明文的,信息很有可能被泄露篡改,甚至用户都不知道通信的对方是否就是自己希望连接的服务器。因此,信息通道安全有以下两个目标:

  • 身份认证
  • 数据不被泄漏和篡改

幸运的是https解决了上述问题的(更多关于https的细节可以看下上一篇干货扒一扒https网站的内幕)。理论上https是安全的,即使如此,https依然应该被重视,因为理论上理论和实践是一样的,但实践中又是另外一回事。前段时间爆发的心血漏洞就是一个例子。

问题: 访问拒绝

在 IE9 下打开页面, 发现 fetch 请求报了Unhandled promise rejectionError: 拒绝访问:

  • IE9
    图片 1
  • IE11 开 IE9 调试模式
    图片 2

怀疑是 fetch 的兼容问题, 查看一下版本:

$npm list whatwg-fetch project └── whatwg-fetch@2.0.3

1
2
3
$npm list whatwg-fetch    
project
└── whatwg-fetch@2.0.3

查看了一下whatwg-fetch 兼容性: 只支持到 IE10. 然后看到 whatwg-fetchv0.11 可以兼容 IE9, 那就降级一下吧:

$ npm uninstall whatwg-fetch removed 1 package in 4.851s $ npm install whatwg-fetch@0.11 + whatwg-fetch@0.11.1 added 1 package in 5.96s

1
2
3
4
5
6
$ npm uninstall whatwg-fetch
removed 1 package in 4.851s
 
$ npm install whatwg-fetch@0.11
+ whatwg-fetch@0.11.1
added 1 package in 5.96s

再试一下, 发现还是一样的问题.

React Native

我看好React的原因很大程度在于它,这种跨平台能力还是很有价值的。这一点也是可以秒杀Angular的,不过目前还不了解是否有成熟的大型应用~

关于 Web 安全,99% 的网站都忽略了这些

2016/11/16 · 基础技术 · 安全

原文出处: 野狗   

图片 3

Web安全是一个如何强调都不为过的事情,我们发现国内的众多网站都没有实现全站https,对于其他安全策略的实践更是很少,本文的目的并非讨论安全和攻击的细节,而是从策略的角度引发对安全的思考和重视。

背景

搭建公司官网的框架时采用了 vuejs, 使用 history router mode 来做 SEO 优化, 使用 fetch 做网络请求, fetch 用 whatwg-fetch 做 polyfill. 根据百度浏览器市场份额统计, 2017年全年 IE9 的占有率达到 9.50%, 并且 vue 框架也是兼容到 IE9, 所以项目要求兼容到 IE9.

但是 fetch polyfill 并不兼容 IE9, 这篇文章追溯问题原因并提出解决方法.

楔子

最近月影大神翻译的一篇文章很火——《别责怪框架:我使用 AngularJS 和 ReactJS 的经验》,标题看似客观,不过先扬后抑,借黑Angular之际狠赞了一下React。

看完之后也让我有感而发。写这篇文章的目的,并不是想反作者之道,褒Angular贬React,只是希望读者抛开个人情绪,对两者(或者Angular?)有一个更客观地认识。

2.11 其他安全相关的HTTP头

X-Content-Type-Options阻止浏览器进行content-type 嗅探。告诉浏览器相信此服务器下发的资源的类型,防止类型嗅探攻击。

HPKP(Public Key Pinning)Public Key Pinning是一个response头,用来检测一个证书的公钥是否发生了改变,防止中间人攻击。

HSTS (HTTP Strict-Transport-Security) 强制使用TSL作为数据通道,在扒一扒HTTPS网站的内幕中也有详细介绍。

说了这么多我们看以下一些各个网站实现的情况:

图片 4

谷歌是行业的标杆,在互联网无出其右,学习Google就对了!

图片 5

我们野狗的官网同样也实现了几个重要的http头。

图片 6

百度做的就比较差了,一家如此大规模的互联网公司,对于安全,对于技术如此不敏感,只能说是很悲哀,充分说明中国互联网企业对安全的重视是非常低的!值得注意的是,百度的http到https的跳转居然是服务端做的。

我们再来看下行业笑话12306。

图片 7

IE9 跨域请求兼容

2018/05/31 · JavaScript · 跨域

原文出处: CntChen   

写在最后

很多人都有一种畏难的心理,放弃学习Angular,或者向之前文章作者那样赶鸭子上架地被迫学习,从而变得痛恨,(就像你没有使用过VIM就无法理解为什么它被称作编辑器之神,不知道它是如何依靠“模式”来实现无鼠标操作光标,不知道它的宏之强大…)这其实是一种损失。因为Angular确实是一个优秀的框架,它的优秀不仅仅在于前面我说的那些优点。它不单单是强大的开发框架,更像是饱含了作者设计思想和理念的艺术品(当你阅读完官网开篇介绍的最后一部分:Angular的禅道之时愈发会有此感)。

最后引用罗胖说过的一句话做为文章的结尾。

“我创业之后越来越少负面地区评价一个人和一件事,是因为我清楚地知道,一旦我做出这样一个结论,以我的知识和逻辑能力,我马上会编造一套理由,在自己内心里来论证自己这个判断。而因此的结果就是我从此丧失了对这个人这个事代表的所有现象的好奇心和求知欲,也就是说,我认知的大门就关上了。”

打赏支持我写出更多好文章,谢谢!

打赏作者

2.10 iframe沙箱环境

虽然有同源策略,iframe的问题还是有很多的,比如各种利用iframe进行跨源。HTML5为iframe提供了安全属性sandbox,如果使用此属性,iframe的能力将会被限制,细节我们将会在以后的文章中详细讨论。

结论

  • IE9 发起跨域请求要使用 XDomainRequest, 因为 IE9 下的 XMLHttpRequest 不支持跨域调用.
  • XDomainRequest 只支持 GET 和 POST method, 并且没有 response status code, 可以说是不完善的 HTTP 异步请求对象.
  • XDomainRequest 不支持指定 responseType, 使用时建议请求和返回数据格式约定为 JSON.
  • whatwg-fetch1.0+ 不支持 IE9, 是因为 IE9 的状态码不符合 fetch 规范, 而 polyfill 的目标是 polyfill 规范, 而不是做兼容.

关于作者:亚里士朱德

图片 8

微信公众号“web学习社”;js全栈工程师,熟悉node.js、mongoDB。开发者头条top10专栏作者慕课网签约讲师个人博客:yalishizhude.github.io 个人主页 · 我的文章 · 19 ·     

图片 9

4. references

  • 安全相关的HTTP头
  • 同源策略
  • CSP
  • HPKP
  • w3c iframe element
  • MDN web security
  • XSS cheet sheet
  • 野狗科技官网

    1 赞 10 收藏 评论

图片 10

最终代码

function fetchIe9(url, options = {}) => { if (window.XDomainRequest) { // // only support GET and POST method // request and response content type should be JSON // without response status code return new Promise((resolve, reject) => { const method = options.method || 'GET'; const timeout = options.timeout || 30000; let data = options.body || options.params || {}; if (data instanceof Object) { data = JSON.stringify(data); } const XDR = new XDomainRequest(); XDR.open(method, url); XDR.timeout = timeout; XDR.onload = () => { try { const json = JSON.parse(XDR.responseText); return resolve(json.data); } catch (e) { reject(e); } return reject({}); }; // fix random aborting: XDR.onprogress = () => {}; XDR.ontimeout = () => reject('XDomainRequest timeout'); XDR.onerror = () => reject('XDomainRequest error'); setTimeout(() => { XDR.send(data); }, 0); }); } else { // native fetch or polyfill fetch(XMLHttpRequest) // fetch... } }

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
function fetchIe9(url, options = {}) => {
  if (window.XDomainRequest) {
    // https://developer.mozilla.org/en-US/docs/Web/API/XDomainRequest
    // only support GET and POST method
    // request and response content type should be JSON
    // without response status code
    return new Promise((resolve, reject) => {
      const method = options.method || 'GET';
      const timeout = options.timeout || 30000;
      let data = options.body || options.params || {};
      if (data instanceof Object) {
        data = JSON.stringify(data);
      }
 
      const XDR = new XDomainRequest();
      XDR.open(method, url);
      XDR.timeout = timeout;
      XDR.onload = () => {
        try {
          const json = JSON.parse(XDR.responseText);
          return resolve(json.data);
        } catch (e) {
          reject(e);
        }
        return reject({});
      };
      // fix random aborting: https://cypressnorth.com/programming/internet-explorer-aborting-ajax-requests-fixed/
      XDR.onprogress = () => {};
      XDR.ontimeout = () => reject('XDomainRequest timeout');
      XDR.onerror = () => reject('XDomainRequest error');
      setTimeout(() => {
        XDR.send(data);
      }, 0);
    });
  } else {
    // native fetch or polyfill fetch(XMLHttpRequest)
    // fetch...
  }
}

组件化

Angular的指令完全能实现组件化,支持嵌套和数据绑定,它的依赖注入使得引用也非常方便。

本文由金沙澳门官网网址发布于金沙澳门官网网址,转载请注明出处:这个锅我不背,的网站都忽略了这些

关键词:

上一篇:没有了

下一篇:没有了