'学习XSS及CSRF前准备'

经过和几位大佬的讨论,在学习XSS和CSRF前,应该先了解JS事件,cookie以及同源策略。

JS事件

先看事件,有时间的话,尽量把JS看完
我常用的事件onerror,onload,onclick,onmouseover,onunload(关闭页面时触发,必须绑定body里)。
https://www.runoob.com/js/js-events.html

cookie和session区别

1,服务端设置session会话,session在关闭浏览器时会自动注销,再次连接时,将会重新分配。
客户端设置cookie,cookie中包含sessionid(id为唯一不会重复的编号)。
网站通过读取cookie,获取用户的相关信息,可以做出相应动作,如直接登陆,无须输入账户和密码。
2,cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,如果主要考虑到安全应当使用session
3,session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,如果主要考虑到减轻服务器性能方面,应当使用COOKIE
4,单个cookie在客户端的限制是3K,就是说一个站点在客户端存放的COOKIE不能3K。
5,将登陆信息等重要信息存放为SESSION;其他信息如果需要保留,可以放在COOKIE中

同源策略

一、概述
1,所谓“同源”指的是三个相同:
协议相同,端口相同,域名相同。(三者相同时,两个网页才可共用cookie)
2,同源策略的目的:是为了保护用户信息的安全,防止恶意的网站窃取数据。
3,如果是非同源,共有三种行为受到限制:
(1)cookie、localstorage、indexDB无法获取
(2)DOM无法获得
(3)AJAX请求不能发送

二、cookie
cookie是服务器写入浏览器的一小段信息(里面包含了用户的信息,如账号密码等),只有同源的网页才能共享。
但是,两个页面一级域名相同,只是二级域名不同,浏览器允许通过设置docment.domain共享cookie。
另外,服务器也可以在设置cookie时,指定cookie所属域名为一级域名,比如域名为.sunian.com
我们可以set-cookie:key=value;domain=.sunian.com;path=/
这样的话二三级域名不用做任何设置,都可读取这个cookie。

三、AJAX
同源政策规定,AJAX请求只能发给同源的网址,否则就报错。
除了架设服务器代理(浏览器请求同源服务器,再由后者请求外部服务),有三种方法规避这个限制。
1,JSONP
JSONP是服务器与客户端跨源通信的常用方法。最大特点就是简单适用,老式浏览器全部支持,服务器改造非常小。
它的基本思想是,网页通过添加一个script元素,向服务器请求JSON数据,这种做法不受同源政策限制;服务器收到请求后,将数据放在一个指定名字的回调函数里传回来。
2,WebSocket
WebSocket是一种通信协议,使用ws://(非加密)和wss://(加密)作为协议前缀。该协议不实行同源政策,只要服务器支持,就可以通过它进行跨源通信。
3,CORS
CORS是跨源资源分享(Cross-Origin Resource Sharing)的缩写。它是W3C标准,是跨源AJAX请求的根本解决方法。相比JSONP只能发GET请求,CORS允许任何类型的请求。
CORS请求大致和ajax请求,但是在头信息中加上了Origin字段表明请求来自哪个源。如果orgin是许可范围之内的话,服务器返回的响应会多出Acess-Control-Allow-*的字段。
允许所有域名访问只需在http://server.runoob.com/server.php 文件头部添加header(‘Access-Control-Allow-Origin:*’);

4,CSP策略
https://www.zhihu.com/question/21979782
浏览器内容安全策略,减少xss攻击。(但不可避免)

具体资料(必看)
http://www.ruanyifeng.com/blog/2016/04/same-origin-policy.html
http://www.ruanyifeng.com/blog/2016/04/cors.html