本文主要是介绍CSRF、XSS、盗链攻击解释,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
CSRF(Cross-Site Request Forgery,跨站请求伪造)
CSRF是什么
CSRF 是一种攻击方式,攻击者通过利用用户在已认证的应用程序中的身份,伪造用户的请求来执行未经授权的操作。
这种攻击可以导致用户在不知情的情况下完成某些操作,如更改密码、发表评论或进行资金转账。
CSRF示例
用户登录网站a.com,攻击者会引导用户去点击网站b.com,b.com会冒充用户的身份去向a.com发起请求,a.com会验证请求,a.com不知道这个请求是b.com发起的,以为是用户发起的,就会去执行b.com请求参数,此时攻击完成。
CSRF图解
1.用户C打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A;
2.在用户信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登录网站A成功,可以正常发送请求到网站A;
3.用户未退出网站A之前,在同一浏览器中,打开一个标签页访问恶意网站B;
4.恶意网站B接收到用户请求后,返回一些攻击性代码,并发出一个请求访问第三方站点A;
5.浏览器在接收到这些攻击性代码后,根据恶意网站B的请求,在用户不知情的情况下携带Cookie信息,向网站A发出请求。
6.网站A并不知道该请求其实是由B发起的,所以会根据用户C的Cookie信息以C的权限处理该请求,导致来自恶意网站B的恶意代码被执行。
如何防御
- 验证请求来源:应用程序可以检查请求的来源是否与预期的来源一致,可以通过检查 Referer 头部、使用 CSRF Token 或同源检查等方式来验证请求的合法性。
- 添加随机生成的 CSRF Token:应用程序可以将 CSRF Token 添加到每个表单或请求中,并在服务器端验证 Token 的有效性。
- 限制敏感操作的请求方法:将敏感操作限制为 POST、PUT、DELETE 等非幂等请求方法,在 GET 请求中不执行副作用操作。
XSS(Cross-Site Scripting,跨站脚本攻击)
XSS是什么
XSS 是一种攻击方式,攻击者通过将恶意脚本注入到受信任的网页中,使其在用户浏览器上执行。当用户访问受感染的页面时,恶意脚本可以窃取用户的敏感信息、篡改页面内容或执行其他恶意操作。XSS 可以分为三种类型:存储型 XSS、反射型 XSS 和 DOM 型 XSS。
如何防御
- 输入验证和过滤:应用程序应该对用户输入进行严格的验证和过滤,防止恶意脚本的注入。
- 输出编码:在将用户输入显示在网页上时,应使用适当的输出编码方式,如 HTML 转义或使用安全的模板引擎。
- 使用 Content Security Policy(CSP):CSP 是一项安全政策,用于限制页面中可以加载的资源和执行的脚本,可以有效防御 XSS 攻击。
盗链(Hotlinking)
什么是盗链
盗链是指一个网站在其页面上使用其他网站的资源,例如图片、视频或脚本,而不是将资源保存在自己的服务器上。这种行为可能会对原始资源的所有者造成不公平的资源消耗,因为他们的资源被其他网站使用。有时,盗链还可能包含恶意意图,例如在盗链图像中嵌入广告或恶意代码。
盗链示例
A服务提供商不提供自己的服务,而通过技术手段去获取B服务提供商的资源到自己的网站上面,当用户去访问资源时,消耗的是B服务提供商的资源,但是增加的却是A服务提供商的点击量。此时被盗链的对象就是B服务提供商。
A相当于第三方网站,去跨域获取B的资源,构成了盗链。
如何判断有没有盗链
最直接的测试就是写一个网页插入一个来自第三方的链接,如果没有防护是可以下载到本地的显示的,防护了就会被判断为盗链,无法下载,请求被拦截。
根据referer请求头判断请求体的来源,判断是否为盗链。
如何防御
- 配置服务器防盗链:通过配置服务器,可以限制只允许特定域名或来源访问资源,拒绝其他网站的访问。
- 图片水印或替换:在图片上添加水印或修改图片,以防止被其他网站直接使用。
- 使用访问控制和身份验证:通过访问控制和身份验证机制,限制只有授权用户才能访问资源。
每个攻击中涉及到的其它知识点补充
CSRF
什么是幂等方法
"幂等"是指对同一个操作进行多次执行所产生的效果与执行一次的效果相同。换句话说,无论执行多少次,结果都是一致的。
HTTP 请求方法可以被分类为幂等和非幂等请求方法:
幂等请求方法:GET:用于获取资源,多次发送相同的 GET 请求,不会对服务器端产生副作用或改变其状态。例如,多次请求同一个网页,不会对服务器上的资源进行修改。PUT:用于更新或替换服务器上的资源,多次发送相同的 PUT 请求,结果也是一致的。例如,多次更新同一个资源,最终结果与单次更新相同。非幂等请求方法:POST:用于向服务器提交数据,每次发送 POST 请求都可能对服务器端产生副作用或改变其状态。例如,创建新资源或执行一次性的操作。DELETE:用于删除服务器上的资源,多次发送相同的 DELETE 请求,结果也是不同的。例如,多次删除同一个资源,只有第一次会成功,后续请求将返回错误。
并非所有的非幂等请求方法都会引起状态的改变,例如,发送相同的 POST 请求可能会创建多个相同的资源,但这并不是幂等的,因为每个请求都产生了不同的结果。
CSRF Token、同源如何检查
CSRF Token:
- 在服务器端生成一个随机的 CSRF Token,并将其嵌入到用户的会话中或者通过表单隐藏字段的方式传递给客户端。
- 在每个需要防御 CSRF 攻击的请求中,包括表单提交、AJAX 请求等,将 CSRF Token 添加到请求中。
- 在服务器端对每个请求进行验证,检查请求中的 CSRF Token 是否与用户会话中的 Token 相匹配。
- 如果 CSRF Token 验证失败,服务器可以拒绝请求或采取其他适当的操作。
同源检查:
- 同源检查是通过比较请求的来源(Origin 或 Referer)与目标站点的来源来验证请求的合法性。
- 对于 Referer,浏览器会在请求头部的 Referer 字段中发送当前页面的 URL。
- 服务器端可以通过比较请求的来源与目标站点的来源来判断请求是否来自同一源。
- 如果来源不匹配,服务器可以拒绝请求或采取其他适当的操作。
需要注意的是,CSRF Token 和同源检查是可以同时使用的,以提供更强的防御机制。同时,合适的防御策略取决于具体的应用程序和开发环境,因此在实施防御措施时需要根据具体情况进行调整。
这篇关于CSRF、XSS、盗链攻击解释的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!