| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> PHP知识库 -> 网页攻击 和 跨域 的相关问题梳理 -> 正文阅读 |
|
[PHP知识库]网页攻击 和 跨域 的相关问题梳理 |
一般常见的网页攻击方式有?XSS攻击?和?CSRF攻击,具体可以先了解一下: 疑问1:CSRF攻击?能获取到用户所在域的cookie吗?我们知道,cookie用于存储用户登录成功后的会话等信息,那么 CSRF攻击者 在第三方网站伪造用户的请求,是如何获取到用户所在域的cookie呢? 首先,这种攻击方式是跨域的,所以攻击者在第三方网站是获取不到用户cookie的(浏览器的同源策略规定 不允许获取 跨域cookie、localStorage、sessionStorage等信息),但浏览器会为该请求自动携带上对应域的cookie。 也就是说,攻击者并不需要获取到用户cookie,只需利用?浏览器的默认行为(即?cookie策略)即可实施攻击。
需要注意的是:并非所有的浏览器都会自动带上第三方cookie,比如 IE6/7/8、Safari、chrome80 以上版本(参考文章),默认会拦截第三方cookie的。不同的浏览器厂商,各自的cookie策略也不一样。 如果想获取跨域cookie,单纯靠CSRF攻击是做不到的,但结合XSS就可以。
疑问2:三种 XSS攻击 到底如何理解?持久型
非持久型
?题外话 由于现在的开发模式 基本都是前后端分离,很多 非计算机专业 的同学,学的都是 纯前端技术(如 vue、react 等),在理解XSS攻击原理的时候,就会觉得似懂非懂,因为有些XSS攻击是需要结合 后端网页语言(如 php 等)实现的。 纯前端技术(如 vue、react 等)是提前把项目 打包成 静态资源(html / css / js 文件等),并放到服务器上;而后端网页语言(如 php 等)是根据 浏览器的 url 在服务器上动态生成 html 文件等资源,再返回给浏览器。也就是说,对用户而言是无感知的,用户只是输入url,然后服务器返回页面显示,但中间生成页面的过程是不一样的。 ?疑问3:浏览器的 同源策略 限制什么?不限制什么?限制
不限制
?疑问4:AJAX跨域请求 是 发出前 还是 返回后 被浏览器拦截?网页的源与请求的源,只要 协议、IP地址、端口号 中有一个不同,即认为是跨域。在疑问3中咱们聊到,同源策略限制了AJAX的跨域请求,那么 AJAX跨域请求 到底可以实现么? 这就需要我们了解一个W3C标准:CORS(参考《CORS详解 - 阮一峰》)。
了解完CORS,我们知道 AJAX跨域请求 肯定可以实现,只不过取决于服务器如何配置。 另外,CORS只是解决了 AJAX跨域请求 的问题,如果 只想 获取跨域的数据(非AJAX),方法就很多了(比如 JSONP、WebSocket、设置代理 等等)。 疑问4解答 ?AJAX跨域请求,其实要分2种情况来阐述: 如果是 简单请求,浏览器会发出该request请求,服务器收到并返回response给浏览器。浏览器检查response中的字段,看是否允许 AJAX跨域请求:
如果是 复杂请求,浏览器会先将该request请求拦截,同时会 自动生成 并 发出一个预检请求(即type为preflight,method为options),用于询问后台服务器是否允许 AJAX跨域请求。服务器同样会返回response,浏览器检查response中的字段:
疑问5:如何让 复杂请求 对应的 预检请求preflight 只发一次?在控制台可以看到,每个复杂请求发出之前,都会先发出一个预检请求(preflight)。但每次都发,其实挺浪费网络资源的。如何让它只发送一次呢? 解决办法:在服务器上可以通过设置?Access-Control-Max-Age?字段(单位秒)来指定预检请求在浏览器的缓存时间。当同一个复杂请求 下一次被发出时,如果其对应的 preflight 还没过期,那么复杂请求就可以直接被发出。 注意:比如在chrome浏览器,开发人员习惯 勾选“Disable Cache”(表示禁用浏览器缓存,如下图),这样Access-Control-Max-Age就失效了,预检请求 还是会每次都被发出。所以想看测试效果的话,记得先?取消“Disable Cache”。 |
|
PHP知识库 最新文章 |
Laravel 下实现 Google 2fa 验证 |
UUCTF WP |
DASCTF10月 web |
XAMPP任意命令执行提升权限漏洞(CVE-2020- |
[GYCTF2020]Easyphp |
iwebsec靶场 代码执行关卡通关笔记 |
多个线程同步执行,多个线程依次执行,多个 |
php 没事记录下常用方法 (TP5.1) |
php之jwt |
2021-09-18 |
|
上一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/14 14:46:04- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |