其实,关于这两个***(CSRF和XSS)的介绍,网上有不少文章,你们能够自行搜索。这里只谈一下我的对它们的理解。node
CSRF的全称是Cross Site Request Forgery,中文名称叫跨站请求伪造。web
XSS的全称是Cross Site Scripting,中文名称叫跨站脚本***。sql
虽然它们的名字都包含“跨站”,可是它们倒是不一样的***方式,不管是***的手段仍是***的原理,都有很大的不一样。chrome
简单描述这两个***方式:json
CSRF后端
用户已经登录了授信网站A,这时***发送一个钓鱼网站B给这个用户,当用户点击这个钓鱼网站B时,钓鱼网站B利用用户在授信网站A的session,发送请求给授信网站A后端的API,从而达到一些***的目的。跨域
XSS浏览器
一个博客网站,***发表了一篇文章,内容包含一些scripts,这些scripts的逻辑是调用后端的API关注博主。当其余用户打开浏览器浏览这篇文章时,这些scripts就自动执行,用户就自动关注了***的博主。安全
下面是我对这两个***的总结:服务器
若是服务器设置成只容许同源访问,对XSS***没有任何帮助,但能够必定程度限制CSRF***。
由于CSRF***原理上是须要跨域的,因此若是把同源策略放开,即CORS,必定程度上会增长CSRF***的风险。可是,即便是同源策略,也不能避免CSRF***,由于同源策略只能限制Ajax请求不能跨域,可是<img>、<script>等标签仍是能够跨域,因此CSRF***任然能够利用这些标签,这也是jsonp的原理。
大方向上,CSRF和XSS是两类不一样的***方式。CSRF属于伪造***(冒充别人的名义干坏事);而XSS属于注入***(sql注入也属于注入***)。
从解决方案来说,CSRF通常来讲是加一个token;而XSS则是配置csp(content security policy)白名单策略,目的是只容许信任的scripts才能执行,以前作过的一个项目就是用的一个nodejs的library-helmetjs来配置的csp。
另外,CSRF和clickjacking(点击劫持)有啥区别呢?(关于clickjacking,能够参考这篇文章:一文带你读懂点击劫持详解+实验)
CSRF利用受害者已经登录的其余网站的session;而clickjacking则是利用iframe把恶意的页面嵌入进来,而且隐藏在正常的页面后面。
CSRF能够不须要受害者和UI的交互;而clickjacking则须要受害者和UI的交互,好比受害者点击一个关闭广告的按钮,有可能实际是关注了一个微博的好友。
最后,再聊一下CORS,由于据我了解,好像不少人对它理解都不是很准确。
CORS(Cross-Origin Resource Sharing),中文叫跨域资源共享。
“Cross Origin Resource Sharing (CORS):
Is a W3C standard that allows a server to relax the same-origin policy.
Is not a security feature, CORS relaxes security. An API is not safer by allowing CORS. For more information, see How CORS works.
Allows a server to explicitly allow some cross-origin requests while rejecting others.
chrome.exe --disable-web-security --user-data-dir
这里提醒一下,网上不少文章都说服务器端就把请求reject掉了,其实这种说法是错误的,记住!