为何Content-Type为application/json的跨域POST请求被视为不安全?
为什么
application/json跨域请求需要预检? CORS里的「安全请求」(无需预检的简单请求),是根据早期浏览器默认允许跨域发送的请求类型定义的——在CORS规范出台前,浏览器本来就允许跨域提交表单,而表单默认的Content-Type就是application/x-www-form-urlencoded、multipart/form-data或text/plain这三种,所以它们被归为安全范畴。
那application/json为啥被划成不安全的?核心是两点:
- 它不是传统表单提交的标准类型,早期服务器基本只针对表单类请求做了安全校验,对
application/json的处理逻辑往往不一样,甚至完全没考虑过跨域场景。 - 如果直接放行这类跨域请求而不做预检,恶意网站可能诱导用户浏览器向目标服务器发送json格式的请求,执行修改数据、删除资源这类敏感操作——服务器要是没额外校验,可能会把这个跨域请求当成合法同源请求处理,直接中招。
预检请求(OPTIONS)就是提前跟服务器打个招呼:「我接下来要发个非简单请求,你允许吗?」,服务器明确许可后,浏览器才会发实际的POST请求,相当于多了一道安全验证,防止服务器被恶意跨域请求偷袭。
内容的提问来源于stack exchange,提问作者Stefan
相关产品推荐
相关产品推荐

