作者回复: 之所在要放在Form表单的隐藏元素里,正是为了避免浏览器通过cookie自动携带上,所以不能放在Set-Cookie里
作者回复: CSRF是黑客预测了网站的访问API,比如POST表单提交。而浏览器为了方便网站开发者,允许域名A向域名B提交POST表单时,如果用户已经成功登陆了域名B,并保存了cookie,则用户点击域名A中的链接(链接指向的是B),则访问B的API自动携带cookie。
作者回复: 1、一般是放在form中的。 2、攻击网站不能读取其他域下的DOM结构,因此获取不了。 3、这只是针对的JS脚本哦,这种攻击方式最常见,如果是抓包这种中间人攻击是没有办法的,此时只能期待走TLS加密了(参见第4部分课程)
作者回复: 是的,这其实是实际需求决定的。因为图片、JS资源根据性能、部署灵活性等要求,必须能够分布在不同的域名下,而且不会产生太多安全性问题。 而POST表单,处理服务器也与资源服务器往往也不在一个域名,历史原因同源策略放过了它,但这也导致CSRF复用Cookie攻击方式的存在,使得服务器必须在表单里放一些随机数,在提交的时候来验证。 后出现的AJAX攻击方式更多,因此完全用SOP限制了
作者回复: 1、B的JS脚本执行的时候。 2、开始两页没有攻击者,没有同源策略时B是攻击者,后面A是攻击者。 3、因为GET服务提供站点可能是静态资源站点,而POST面对的是动态站点,不同域名会导致跨域。 4、攻击者只是可以使用cookie,而cookie的意义它并不知道;而token不会记录到cookie中。
作者回复: 服务器数据库里
作者回复: 不需要,src是由浏览器解析,HTTP请求由浏览器发起,对HTTP响应的解析也是浏览器进行,所以安全性没问题。跨域主要针对的是AJAX之类的请求,JS等代码可以读取HTTP响应,这就很危险,比如木马站点的JS读取了正常站点的响应(自带cookie后能够获得有效信息),所以才有CORS
作者回复: 你好chenji,HTML是你的域名提供的,DOM结构就是你的HTML的结构,而CDN域名下的JS也是你的HTML引入的,所以不会有危险。如果HTML都不可信任,那么这就与同源策略无关,而是整个站点都被黑了。