0%

同源策略是什么

同源策略是浏览器的一个安全功能,不同源的客户端脚本在没有明确授权的情况下,不能读写对方资源。所以xyz.com下的js脚本采用ajax读取abc.com里面的文件数据是会被拒绝的。

同源策略限制了从同一个源加载的文档或脚本如何与来自另一个源的资源进行交互。这是一个用于隔离潜在恶意文件的重要安全机制。

目的

同源政策的目的,是为了保证用户信息的安全,防止恶意的网站窃取数据。

设想这样一种情况:A网站是一家银行,用户登录以后,又去浏览其他网站。如果其他网站可以读取A网站的 Cookie,会发生什么?

很显然,如果 Cookie 包含隐私(比如存款总额),这些信息就会泄漏。更可怕的是,Cookie 往往用来保存用户的登录状态,如果用户没有退出登录,其他网站就可以冒充用户,为所欲为。因为浏览器同时还规定,提交表单不受同源政策的限制。

由此可见,”同源政策”是必需的,否则 Cookie 可以共享,互联网就毫无安全可言了。

同源的定义

如果两个页面的协议主机端口(如果有指定)都相同,则两个页面具有相同的。我们也可以把它称为“协议/主机/端口 tuple”,或简单地叫做“tuple”. (“tuple” ,“元”,是指一些事物组合在一起形成一个整体,比如(1,2)叫二元,(1,2,3)叫三元)

下表给出了相对http://store.company.com/dir/page.html同源检测的示例:

URL 组成

{protocol}://{host}:{port}/{filePath}?{query(key=value&key2=value2)}#{fragment}

URL 结果 原因
http://store.company.com/dir2/other.html 成功 只有路径不同
http://store.company.com/dir/inner/another.html 成功 只有路径不同
https://store.company.com/secure.html 失败 不同协议 ( https和http )
http://store.company.com:81/dir/etc.html 失败 不同端口 ( http:// 80是默认的)
http://news.company.com/dir/other.html 失败 不同域名 ( news和store )

另请参见文件的源定义: URLs.

参考 & 引用

https://www.cnblogs.com/rain-chenwei/p/9520240.html
https://developer.mozilla.org/zh-CN/docs/Web/Security/Same-origin_policy
https://blog.csdn.net/shuai_wy/article/details/51186956
http://www.ruanyifeng.com/blog/2016/04/same-origin-policy.html

Git Bash 美化

终端美化的方案有很多、首推ob my zsh,但其在windows平台配置较为复杂,如果不太想折腾,仅仅就Git Bash做一个简单的美化和实用化、可以看这篇文章。

基础效果

gitbashconfig-1

最终效果

gitbashconfig-2

这里删除了基本无变化且个人并不关心的用户、主机、和系统信息,显示了当前时间并对分支样式做了修改。

阅读全文 »

图表推荐调研

背景 & 目的

图表选择困难,拿到一份数据是应该用饼图还是用柱图去展示?工程视往往有工程视的判断、设计师有设计师的考量,同时产品和客户的意愿可能又不相同。到底这个数据最适合采用哪种图表去展示?以前我们普遍的采用朴素经验主义,即以前用的啥,我们现在还用啥、别的用的啥我们就用啥。这种方式既不科学、也没有说服力。所以我们需要去维护一套知识库,界合经验和分析去判断哪些那些类的数据更适合用哪种图表展示。本质上是解决一个数据图表种类的映射关系。

前言

本文主要基于AVA logo。即阿里的autoChart去分析他们所采用的解决方案。调研对于该问题,他们的解决方案是否可行,优点以及不足。

简介

AVA AVA logo Visual Analytics) 是为了更简便的可视分析而生的技术框架。 其名称中的第一个 A 具有多重涵义:它说明了这是一个出自阿里巴巴集团(Alibaba)技术框架,其目标是成为一个自动化(Automated)、智能驱动(AI driven)、支持增强分析(Augmented)的可视分析解决方案。(引用自 ava Readme)

阅读全文 »

  1. 已知两圆的圆心和半径,第三圆的半径,且三圆两两相切,求第三圆圆心坐标。设圆1圆心,半径为 $$ x_1,y_1,r_1 $$ , 圆2 $$ x_2,y_2,r_2 $$ 。圆3 $$ x_3,y_3,r_3 $$ 即可得
    1. 公式1.1 $$ (x_3-x_1)^2 + (y_3-y_1)^2 = (r_3+r_1)^2 = d31 $$

    2. $$ (x_3-x_2)^2 + (y_3-y_2)^2 = (r_3+r_2)^2 = d32 $$

    3. $$ (x_2-x_1)^2 + (y_2-y_1)^2 = (r_1+r_2)^2 = d21 $$

    根据1、2、3式即得:
    1. $$ x = (d21+d32-d31)/(2*d21) $$

    2. $$ y = \sqrt{d32/d21 - x^2} $$

海伦公式

$$ S = \sqrt{p(p-a)(p-b)(p-c)} $$

假设在平面内,有一个三角形,边长分别为a、b、c,三角形的面积S可由以下海伦公式求得,其中p为半周长(周长的一半)$p=\frac{a+b+c}{2}$

阅读全文 »

凸包算法

背景

凸包算法其实是一个挺常用的算法,例如在这道题(812.最大三角形面积)中,常规的解决方案就是写一个时间复杂度O(N^3)的暴力算法去枚举所有可能出现的三角形,再利用海伦公式去求得三角形面积。不妨我们大胆假设,在一堆点的集合中,其中面积最大的三角形的顶点,必然位于这些点的凸包上。论证我们先跳过,直接用结果去验证假设是否成立(经验证,假设是成立的)

简介

凸包算法有很多种,例如

  1. Graham扫描法 nlogn
  2. Jarvis步进法 nH (H为凸包上的点 最差情况会退化成 n^2)
  3. 分治法 nlogn
  4. 穷举法 n^3 (两点确定一条直线,如果剩余的其它点都在这条直线的同一侧,则这两个点是凸包上的点,否则就不是)
  5. Melkman算法 (基于双向链表来做的,具体没看懂)

这里详细介绍常规的 Graham扫描法,Graham扫描法时间复杂度优于Jarvis步进法,理解起来稍微比之困难一些,但影响不大。

阅读全文 »

WSL初探

特色

  1. ip共享 win下启动的web服务wsl可直接访问。
  2. 资源共享 win下 及 wsl下访问资源占用情况均为物理机的资源占用情况。
  3. 支持docker
阅读全文 »

样式文件的动态引用

背景

要实现一个主题切换功能,通常的解决方案是替换css文件,由此就引出了样式文件的动态引用。样式文件的动态引用普遍有两种方式。

阅读全文 »

泛洪算法 Flood Fill

简介

泛洪算法——Flood Fill,(也称为种子填充——Seed Fill)是一种算法,用于确定连接到多维数组中给定节点的区域。 它被用在油漆程序的“桶”填充工具中,用于填充具有不同颜色的连接的,颜色相似的区域,并且在诸如围棋(Go)和扫雷(Minesweeper)之类的游戏中用于确定哪些块被清除。泛洪算法的基本原理就是从一个像素点出发,以此向周边相同或相似的像素点扩充着色,直到周边无相同颜色的区块或到图像边界为止。

泛洪填充算法采用三个参数:起始节点(start node),目标颜色(target color)和替换颜色(replacement color)。 该算法查找阵列中通过目标颜色的路径连接到起始节点的所有节点,并将它们更改为替换颜色。 可以通过多种方式构建泛洪填充算法,但它们都明确地或隐式地使用队列或堆栈数据结构。

阅读全文 »