关于Web安全相关总结
用HTTPS对HTTP通信实施加密
使用HTTPS机制能对服务器和客户端的通信加密,即使是经由的代理服务器和通信网络,也无法查阅其通信内容。
HTTPS能对URI路径、查询字符串、协议首部和消息体(请求消息体和响应消息体)等几乎所有的交互数据完成加密。
使用浏览器访问API时的问题
会话劫持 XSS
Cookie常用来标记用户或授权会话。因此,如果Web应用的Cookie被窃取,可能导致授权用户的会话受到攻击 在Content-type首部中返回application/json。
Content-type: application/json 然而IE浏览器会无视Content-Type首部的内容,因为使用 Content Sniffering 功能,即通过实际的数据来推测数据格式。
为了防止浏览器因 Content Sniffering 功能将JSON当作HTML解释,首先要在浏览器设置X-Content-Type-Options首部,该首部IE8+中有实现
X-Content-Type-Options: nosniff 另一种防XSS威胁的对策,是让JSON字符串进行转义
- Cookie的Secure和httpOnly标记
标记为 Secure 的Cookie只应通过被HTTPS协议加密过的请求发送给服务端。但即便设置了 Secure 标记,敏感信息也不应该通过Cookie传输;为避免跨域脚本 (XSS) 攻击,通过JavaScript的 Document.cookie API无法访问带有 HttpOnly 标记的Cookie,它们只应该发送给服务端。
Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT; Secure; HttpOnly
XSRF
XSRF是跨站点请求伪造(Cross Site Request Forgery)的缩写。就是通过跨站点发送伪造的请求,让服务器端执行用户意愿之外的处理。换言之,当用户访问怀有恶意的页面时,XSRF攻击会经由页面嵌入的链接Iframe元素、IMG元素、Javascript代码及表单等,向另一个截然不同的站点发送请求,执行用户意愿之外的操作。
如:向公告板任意发帖,攻击站点
首先要禁止通过GET方法来修改服务器端的数据,而要使用POST、PUT、DELETE等方法。
即使设置了不允许通过GET方法来修改服务器端数据,XSRF可以通过FORM元素使用POST方法来发起攻击。和 XMLHttpRequest 不同,FORM元素不受同源策略的影响。
防止XSRF攻击的最常用的方法是使用XSRF令牌,在发送源的正规表单里嵌入一个由被访问站点发现的一次性令牌,或者至少每个会话中嵌入一个独特的令牌,只要来自客户端的访问没有携带令牌,就一律拒绝。
另一种防范措施,如果Web API只存在由XMLHttpRequest或非浏览器客户端发起的访问,就要求客户端使用某种机制在请求中附加一个特殊的首部,如果请求消息中不存在这一特殊首部,就拒绝访问,比如检查广为人知的X-Requested-With首部,由于通过FORM元素使用POST方法发起的请求,无法在发起请求时添加私有的首部,因此可以防范通过表单发起的XSRF攻击,
JSON劫持
指API返回的JSON数据被怀有恶意的第三方窃取
防止JSON劫持可以采取的以下方式
让JSON数据无法通过script元素读取 让浏览器准确识别JSON数据 让JSON数据不能按JavaScript解释,或者在执行时无法读取到数据
Http security
- Content Security Policy(CSP) 内容安全策略
- Cookie security
- X-Content-Type-Options
- X-Frame-Options
- X-XSS-Protection
较深入的总结: 常见 Web 安全攻防总结
作为一个前端,可以如何机智地弄坏一台电脑?
思路总结:
- 突破浏览器界限: 安全策略。浏览器IO能力localStorage
- 但是如果任由网页无限写文件,对用户硬盘的伤害可想而知,因而浏览器对其做了大小限制。 对于一个域名+端口,PC侧的上限是5M-10M之间,移动侧是则不大于2.5M。
- 访问同一个域名的不同端口,它们的localStorage并无关联,是分开存储的。
- http://127.0.0.1:1000到http://127.0.0.1:1099这100个端口;
- 让用户自动遍历这些端口? iframe是个好的尝试。 只要一打开http://127.0.0.1: 1000,页面的脚步就会创建一个iframe,去请求http://127.0.0.1: 1001,一直循环下去。
- 到:1081最新的chrome就崩溃掉了…原来iframe嵌套太多,已经到达了浏览器的极限。
- 到达iframe极限之前,我们可以重定向啊。 每访问50个端口,就使用.href重定向一次,去确保浏览器不崩溃。