CSRF跨站请求伪造原理
攻击者利用服务器对用户的信任,从而欺骗受害者去服务器上执行受害者不知情的请求。
与XSS的区别
XSS是利用用户对服务端的信任,CSRF是利用服务端对用户的信任。
XSS的攻击,主要是让脚本在用户浏览器上执行,服务器端仅仅只是脚本的载体,本身服务器端不会受到攻击利用。
CSRF攻击,攻击者会伪造一个用户发送给服务器的正常链接,其核心主要是要和已登录(已认证)的用户去发请求。CSRF不需要知道用户的Cookie,CSRF自己并不会发请求给服务器,一切交给用户。
攻击要点
(1)服务器没有对操作来源进行判断,如IP,Referer等
(2)受害者处于登录状态,但是攻击者无法拿到Cookie
(3)攻击者需要找到一条可以修改或获取敏感信息的请求
如何防御CSRF
(1)避免在URL中明文显示特定操作的参数内容;
(2)使用同步令牌(Synchronizer Token),检查客户端请求是否包含令牌及其有效性;(常用的做法,并且保证每次token的值完全随机且每次都不同)
(3)检查Referer Header,拒绝来自非本网站的直接URL请求。
(4)不要在客户端保存敏感信息(比如身份认证信息);
(5)设置会话过期机制,比如20分钟无操作,直接登录超时退出;
(6)敏感信息的修改时需要对身份进行二次确认,比如修改账号时,需要判断旧密码;
(7)敏感信息的修改使用post而不是get
(8)避免交叉漏洞, 如XSS等
(9)禁止跨域访问
(10)在响应中设置CSP(Content-Security-Policy)内容安全策略
如何防御CSRF
(1)避免在URL中明文显示特定操作的参数内容;
(2)使用同步令牌(Synchronizer Token),检查客户端请求是否包含令牌及其有效性;(常用的做法,并且保证每次token的值完全随机且每次都不同)
(3)检查Referer Header,拒绝来自非本网站的直接URL请求。
(4)不要在客户端保存敏感信息(比如身份认证信息);
(5)设置会话过期机制,比如20分钟无操作,直接登录超时退出;
(6)敏感信息的修改时需要对身份进行二次确认,比如修改账号时,需要判断旧密码;
(7)敏感信息的修改使用post而不是get
(8)避免交叉漏洞, 如XSS等
(9)禁止跨域访问
(10)在响应中设置CSP(Content-Security-Policy)内容安全策略
JSONP跨域访问漏洞
产生JSONP攻击的核心在于没有对调用方进行校验
利用回调函数
所以需要对回调函数的名称进行严格的限制,比如限制其长度,查询其关键词,或者使用白名单
CORS跨域访问漏洞漏洞
CORS漏洞主要是由于配置错误而引起的。所以,预防漏洞变成了一个配置问题。下面介绍了一些针对CORS攻击的有效防御措施。
- 正确配置跨域请求
如果Web资源包含敏感信息,则应在Access-Control-Allow-Origin标头中正确指定来源。 - 只允许信任的网站
看起来似乎很明显,但是Access-Control-Allow-Origin中指定的来源只能是受信任的站点。特别是,使用通配符来表示允许的跨域请求的来源而不进行验证很容易被利用,应该避免。 - 避免将null列入白名单
避免使用标题Access-Control-Allow-Origin: null。来自内部文档和沙盒请求的跨域资源调用可以指定null来源。应针对私有和公共服务器的可信来源正确定义CORS头。 - 避免在内部网络中使用通配符
避免在内部网络中使用通配符。当内部浏览器可以访问不受信任的外部域时,仅靠信任网络配置来保护内部资源是不够的。 - CORS不能替代服务器端安全策略
CORS定义了浏览器的行为,绝不能替代服务器端对敏感数据的保护-攻击者可以直接从任何可信来源伪造请求。因此,除了正确配置的CORS之外,Web服务器还应继续对敏感数据应用保护,例如身份验证和会话管理。
ssrf服务器请求伪造原理
SSRF(Server-Side Request Forgery:服务器端请求伪造)其形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能,但又没有对目标地址做严格过滤与限制。
导致攻击者可以传入任意的地址来让后端服务器对其发起请求,并返回对该目标地址请求的数据。比如从指定URL地址获取网页文本内容,扫描内网是否可用,端口是否开放等操作。
数据流:攻击者----->服务器---->目标地址
SSRF常见的函数
file_get_contents();
fsockopen();
curl_exec();
这些函数的共同特点就是可以通过一些网络协议去远程访问目标服务器上的资源,然后对资源进行处理。
SSRF主要危害
(1)可以对外网、服务器所在内网、本地进行端口扫描,获取一些服务的banner信息;
(2)攻击运行在内网或本地的应用程序(比如溢出);
(3)对内网Web应用进行指纹识别,通过访问默认文件实现;
(4)攻击内外网的Web应用,主要是使用Get参数就可以实现的攻击(比如Struts2漏洞利用,SQL注入等);
(5)利用file,dict,gopher,http,https等协议读取本地文件,访问敏感目标,反弹shell等高危操作。
xxe外部实体漏洞
XXE(XML External Entity Injection)也就是XML外部实体注入,XXE漏洞发生在应用程序解析XML输入时
服务端解析用户提交的XML文件时,未对XML文件引用的外部实体(含外部一般实体和外部参数实体)做合适的处理
导致可加载恶意外部文件 和 代码,造成任意文件读取、命令执行、内网端口扫描、攻击内网网站、发起DOS攻击等危害。
XML语法规则
(1)XML 文档必须有一个根元素
(2)XML 元素都必须有一个关闭标签
(3)XML 标签对大小敏感
(4)XML 元素必须被正确的嵌套
(5)XML 属性值必须加引导
XML文档结构包括XML声明、DTD文档类型定义、文档元素