浅谈JSONP跨域漏洞

浅谈JSONP跨域漏洞

CSRF(Cross site request forgery)跨站请求伪造,一种挟持用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法,跟XSS相比,XSS 利用的是网站对用户的信任,CSRF 利用的是网站对用户网页浏览器的信任

提起CSRF,可能很多人都会想到修改个人资料授权登陆等等攻击场景,可以发现这两个场景都是写入型的CSRF漏洞,通常会忽视更常见的读取型的CSRF漏洞,主流如下两种

  • JSONP跨域资源读取
  • CORS跨域资源读取

当持有敏感资源数据的服务器没有校验请求来源时,如未严格校验Referer或未存在token机制等,都会导致读取型的CSRF漏洞的产生

今天我们就来了解下其中之一的JSONP跨域漏洞

JSONP

我们知道,同源策略SOP(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能。不同域之间相互请求资源,就算作“跨域”,为了能跨域获取资源,产生了JSONP,即JSONP 就是为了跨域获取资源而产生的一种技术手段

image-20211011152307886

JSONP(JSON with Padding)即填充式的JSON,是基于JSON 格式的为解决跨域请求资源而产生的解决方案。通过填充额外的内容把JSON数据包装起来,变成一段有效的可以独立运行的JavaScript语句。

如要在 a.com 域下获取存在 b.com 的 JSON 数据( getUsers.JSON ):

{"id" : "1","name" : "f4ke"}

通过 JSONP 的 “Padding”(填充即包装成可运行的js) , getUsers.JSON 输出为:

callback({"id" : "1","name" : "f4ke"});

它基本原理是利用HTML里script元素标签中的src属性不受同源策略影响的特性,远程调用JSON文件来实现数据传递。JSONP的基本语法为:callback({"name":"alan", "msg":"success"})

具体实现

jsonp.php,作为JSONP服务端资源获取文件,动态生成JSONP格式数据:

<?php
if(isset($_GET['callback'])){
   
	$callback = $_GET['callback'];
	print $callback.'({"username" : "testadmin", "password" : "thisisadminpassword"});';
} else {
   
	echo 'No callback param.';
}
?>

客户端可以使用原生js或者jQuery实现JSONP跨域资源请求

原生JS
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>JSONP 跨域</title>
  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值