前端安全的话题再次被提及,深航东航系统被攻破,乘客信息泄露并被利用,这类例子比比皆是。在前端江湖中,攻击与防守更像是一场漫无硝烟的战争,悄无声息却无时无刻都在进行。
前端常见漏洞包括XSS、CSRF及界面操作劫持,服务端如SQL注入等。
前端使用的传输协议是http,不经过加密直接传输的。HTML中有很多地方可以内嵌脚本。及前端的存储,cookie,web storage.这些在一定程度上带来了一些安全风险。
同域:两个站点同协议,同域名,同端口。
出于防范跨站脚本攻击的同源安全策略,浏览器禁止客户端脚本(如Javascript)对不同域名的服务进行跨域调用。
同源策略(Same Origin)中的源有着严格的定义,参见RFC6454,第4章节。一般而言,Origin由{protocol, host, port}三部分组成。
下面是同源检查的一些实例
可能有点意外的是,一般我们会认为不同的子域名应该被当做同域名,是安全的调用,但实际上浏览器同源策略甚至禁止了不同子域名和端口的服务之间的调用。
跨子域的访问,可使用iframe,然后设置domain为相同。
HTTP相关头
User-Agent:在使用HTTP协议进行请求时,HTTP协议头部会添加User-Agent,该信息可以标识请求者的一些信息,如什么浏览器类型和版本、操作系统,使用语言等信息。
Referer:HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器籍此可以获得一些信息用于处理。比如从我主页上链接到一个朋友那里,他的服务器就能够从HTTP Referer中统计出每天有多少用户点击我主页上的链接访问他的网站。HTTP Referer使用非常简单,使用场合比较多的是用于页面统计、资源防盗链等,但还是有一点值得注意的是:Referer是不安全的,客户端可以通过设置改变 Request中的值,尽量不要用来进行安全验证等方面。
HTML中内嵌脚本执行
可内嵌于js文件中,可出现在HTML的script标签中,HTML标签的事件中,及一些标签的src,href等属性的伪协议javascript:中。这样导致防御XSS有些棘手。使用HTTPOnly cookie可以一定程度防止脚本获取cookie。
AJAX
AJAX的请求头设置是有限制的。AJAX严格遵守同源策略。
XSS攻击
XSS是一种经常出现在web应用中的安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。比如这些代码包括HTML代码和客户端脚本。攻击者利用XSS漏洞旁路掉访问控制——例如同源策略(same origin policy)。这种类型的漏洞由于被黑客用来编写危害性更大的phishing攻击而变得广为人知。对于跨站脚本攻击,黑客界共识是:跨站脚本攻击是新型的“缓冲区溢出攻击“,而JavaScript是新型的“ShellCode”。
CSRF攻击
CSRF是Cross Site Request Forgery的缩写(也缩写为XSRF),直译过来就是跨站请求伪造的意思,也就是在用户会话下对某个CGI做一些GET/POST的事情——这些事情用
户未必知道和愿意做,你可以把它想做HTTP会话劫持。