博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
jsonp
阅读量:4697 次
发布时间:2019-06-09

本文共 1222 字,大约阅读时间需要 4 分钟。

同源策略:

动态内容(如javascript)只能阅读与之同源的哪些http应答和cookie。同源指的是域名、协议、端口号相同。但是,<script><img><iframe><link>src属性可以跨域加载资源。

 

解决同源策略:

1.利用服务器来请求别的服务器的数据。

2.通过iframe来解决

3.src属性引入  <script src=""></script>

 

index.html

<script>

var jsonpFunc = function(json){

for(var i in json){

console.info(json(i));

}

}

</script>

<script src=">

 

abc.com/test.php

<?php

$jsondata = "{a:'a',b:'b'}";

echo $_GET['callback'].'('.$jsondata.')';

?>

 

jsonp工作过程

1.首先在客户端定义一个函数,加载js文件并把这个函数名作为参数值传到服务器。

2.服务器拿到函数的名字,用js执行函数的形式打印出来作为返回,服务器生成的数据作为函数参数。

3.客户端会以<script>标签内内容的形式执行服务器的返回,这样在客户端页面里就能以服务器生成的值为入参来执行回调函数了

 

缺点:

1.不支持post方式。

2.安全漏洞

 

jsonp如果不加内容过滤措施,会引发安全问题

例如

<script src="abc.com/test?callback=document.getElementByTagName('body')[0].append('<input type="text" />');var a ="></script>

如果给页面加上这么一句,在服务器会执行

echo 'document.getElementByTagName('body')[0].append('<input type="text" />');var a ='.'('.$jsondata.')';

服务器返回的这段语句在客户端以js的形式运行就形成脚本注入了。

防范措施

1.服务端加限制,callback的值只能是a-zA-Z0-9

2.服务端加header。

header('Content-type: text/javascript');

3.过滤尖括号。在服务端做一次urlencode,而在output输出decodeURIComponent(‘#####’)

$callback = urlencode($_GET['callback']); echo "window[decodeURIComponent('{$callback}')]({ret:0,msg:’OK’});"
 

转载于:https://www.cnblogs.com/it-snail/p/3895596.html

你可能感兴趣的文章
hdu4057Rescue the Rabbit(ac自动机+dp)
查看>>
【Javascript】: for循环中定义的变量在for循环体外也有效
查看>>
C++中memcpy和memmove
查看>>
实验吧编程 -找素数
查看>>
Dasha and Photos CodeForces - 761F (前缀优化)
查看>>
GLPK下载安装
查看>>
const变量赋值报错分析
查看>>
去空格和空白文本
查看>>
css制作圣诞树
查看>>
字符串常量池
查看>>
红白球与小明
查看>>
查看sqlserver被锁的表以及如何解锁
查看>>
ViewPager 详解(一)---基本入门
查看>>
伪类和伪元素的区别
查看>>
poj2248——Addition Chains(迭代加深搜索)
查看>>
JS屏蔽右键菜单和禁止刷新F5
查看>>
在Linux上搭建Hadoop
查看>>
Python实例---模拟微信网页登录(day4)
查看>>
android入门——BroadCast(2)
查看>>
配置maven
查看>>