通常用csrf来上传一个文件不是个简单的事,问题在于创建的假的表单提交的数据跟浏览器文件上传提交的数据有一点不同,那就是上传的请求会有一个filename的参数:
Content-Disposition: form-data; name=“file”; filename=“test2.txt”
Content-Type: text/plain
test3
如果创建一个表单,提交如上的请求是没法成功添加filename参数的,这是因为filename参数是文件上传的input自动生成。这就阻止了黑客通过csrf上传文件。但是html5可以改变这种现象。html5有一个新特性叫跨域资源共享。在过去,由于同源策略的影响,黑客没办法通过javascript去访问别的域。不过,利用html5的跨域资源共享,可以让javascript来发送有filename属性的合法的跨域请求。这样只要用户访问了恶意页面,不需要其他的交互,就可以通过csrf来上传文件了。
Content-Disposition: form-data; name=“file”; filename=“test2.txt”
Content-Type: text/plain
test3
如果创建一个表单,提交如上的请求是没法成功添加filename参数的,这是因为filename参数是文件上传的input自动生成。这就阻止了黑客通过csrf上传文件。但是html5可以改变这种现象。html5有一个新特性叫跨域资源共享。在过去,由于同源策略的影响,黑客没办法通过javascript去访问别的域。不过,利用html5的跨域资源共享,可以让javascript来发送有filename属性的合法的跨域请求。这样只要用户访问了恶意页面,不需要其他的交互,就可以通过csrf来上传文件了。
还没有评论,来说两句吧...