ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

javascript – 如何使用JSONP克服XSS问题?

2019-07-30 12:46:36  阅读:216  来源: 互联网

标签:javascript xmlhttprequest jsonp xss


我有一个javascript在jetty服务器上执行,它正在向另一台服务器(wamp服务器)上的scoket发送XMLHTTPRequest.请求被发送到套接字,但XHR响应似乎被阻止.

我听说我可以使用JSONP来解决这个问题.
然而,因为我是新手两个javascript我从来没有使用JSONP技术之前我会非常感谢如何使用这种技术的任何帮助?

function sendPost(url, postdata, callback) {

xmlHttp=GetXmlHttpObject()

if (xmlHttp==null) {
    alert ("Browser does not support HTTP Request")
    return
} 

xmlHttp.onreadystatechange=callback
xmlHttp.open("POST",url,true)
xmlHttp.send(postdata);

}

function sendInitRQ(width, height) {

var post = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><command     type=\"init\"><width>" + width + "</width><height>" + height + "</height></command>";

sendPost("http://localhost:80/socket.php", post, initReturned);

}

我知道php套接字正在接收帖子,因为当我检查服务器日志时,我在获取请求上得到200.

我只是想知道如何使用JSONP方法?
我已经看到了该方法的示例,但我仍然不确定如何做到这一点.

解决方法:

JSONP技术使用完全不同的机制向服务器发出HTTP请求并对响应进行操作.它需要客户端页面和服务器上的协作代码.服务器必须有一个URL,它响应HTTP“GET”请求,并在函数调用中包含一个JSON块.因此,您不能只对任何旧服务器执行JSONP事务;它必须是明确提供功能的服务器.

我们的想法是,您的客户端代码会创建一个< script>动态阻止,“src”属性设置为JSONP服务器的URL. URL应包含一个参数,告诉服务器您希望它使用JSON数据调用的Javascript函数的名称. (确切地说,要使用的参数名称取决于服务器;通常它是“回调”,但我看到一些使用“jsonp”.)客户端当然必须在全局范围内具有该功能.换句话说,如果你有一个像这样的功能

function handleJSON(json) {
  var something = json.something;
  // ... whatever ...
}

然后你的URL告诉服务器调用“handleJSON”,服务器响应应如下所示:

handleJSON({"id": 102, "something": { "more": "data", "random": true }});

因此,当< script>从您提供的“src”URL加载块,浏览器将解释内容(来自服务器的响应),并且将调用您的函数.

应该清楚的是,您应该只向您信任的服务器发出JSONP请求,因为它们会发回代码以在您的客户端中执行,并且可以访问您的客户端与其他安全站点之间的任何活动会话.

编辑 – 这是一篇很好的文章:http://www.ibm.com/developerworks/library/wa-aj-jsonp1/

标签:javascript,xmlhttprequest,jsonp,xss
来源: https://codeday.me/bug/20190730/1582381.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有