客户端HTTP发布到外部网站
是否有任何Web语言允许客户端自己创建到外部网站的HTTP帖子。客户端HTTP发布到外部网站
我知道JavaScript使用XMLHttpRequest完成此操作,但它不允许跨域发布,除非收件人域想要允许发送域。
我想发布数据到一个外部网站(我不控制),并请求与客户端的浏览器已经有什么(饼干等)的认证。
这可能吗?我试过cURL,但它似乎使一个服务器HTTP POST,而不是一个客户端HTTP POST。
编辑:
一点什么,我试图做更深入的了解:
我使用的是用户的会话试图POST JSON的网站(我说的cookies,但我相信他们是PHP会话,我想我仍然认为cookie)。
网站不检查转诊(安全性差#1) 我可以在网页上使用我的个人网页执行JavaScript和HTML(安全性差#2) 的JSON代码仍然可以工作,即使内容类型是形式(安全性差#3) 根本没有安全检查,只是PHP会话检查。
表单的想法是美好的,它的工作原理。可能再次是它的JSON。因此,发送postdata为foo = {“test”:“123”,“test2”:“456”}整个foo =部分将其混淆。加的形式似乎把JSON成形式的编码,所以它的发送:
富=%7B%22 测试%22%3A +%22 %22%2C +%22 TEST2%22 %3A +%22 %22%7D
当我需要它发送;
{ “测试”: “123”, “测试2”: “456”}
一切所以知道,是否有发送JSON或没有更好的机会?
我不这么认为:您不会从服务器端获得第三方站点上的用户身份验证Cookie(因为单一原则策略),并且您无法向第三方发出Ajax请求现场。
你可以做的最好的可能是创建一个<form>
(也许在),指向第三方网站,填充数据,并让用户提交(或自动提交)。您将而不是能够以编程方式获得请求结果(同样是因为单一来源策略),但也许它会这样做 - 您仍然可以向用户显示请求结果。
@Pekka你现在提出一个有趣的想法,我从来没有停下来想过。所以我不能在幕后提交表格,并代表用户取回结果,比如说aysax。但是...如果我在我的网站中有一个隐藏的iframe,它从机器读取cookie,向远程站点发布表单,用javascript为一些多汁的信息刮掉屏幕,然后在我的网站上发布另一个隐藏表单,信息可以。我在安全方面错过了一些我只能忽略的东西吗?它不是那么容易吗? – spinon 2010-08-03 19:39:48
@spinon你不能为任何正确编程的网站做这件事(你想要做的是一个跨站请求伪造)。 – Artefacto 2010-08-03 19:41:32
@spinon不,这是不可能的,因为你不能使用Javascript访问文档的任何部分。你甚至不能从中获取单个像素:http://stackoverflow.com/questions/1936021/javascript-eyedropper-tell-colour-of-pixel-under-mouse-cursor – 2010-08-03 19:42:30
我认为这是不允许的显而易见的原因。如果允许这样做,会阻止恶意人员将某人的浏览器的表单数据发布到某些隐藏的iframe或弹出窗口中的任意数量的网站。
如果这是您的应用程序的设计,您需要重新思考您要完成的任务。
编辑:正如@Pekka指出我知道你可以使用典型的表单提交表单提交到远程站点。我指的是使用一些客户端Ajax解决方案。对困惑感到抱歉。
将表单数据从个人浏览器发布到外部网站是没有问题的。向一个Ajax请求发送完整的请求是不可能的,并且以编程方式获取响应。 – 2010-08-03 19:38:27
@Pekka是的,这就是我想说的不太清楚。阅读我留在你身上的评论,但关于以前从未想过的事情。 – spinon 2010-08-03 19:40:39
您应该遵循OpenID和其他单点登录系统的工作方式。 openID如何工作是你的网站POST一些令牌给openID服务,并作为回报获得认证结果。请参考How Does it Work? section here
可能无法工作,因为他不控制他需要发送请求的外部站点。 – 2010-08-03 19:40:57
客户端无法直接发布到外部网站;这违反了基本的跨域安全模式。使用JSONP访问javascript是个例外。您描述的内容需要访问另一个网站的用户Cookie,这是不可能的,因为浏览器只允许在相同的域/路径中访问Cookie。
您将需要使用服务器端代理进行跨域请求,但你仍然不能访问外部饼干:http://jquery-howto.blogspot.com/2009/04/cross-domain-ajax-querying-with-jquery.html
服务器端代理也不会真的有帮助,因为在客户端的浏览器中有验证Cookie,他似乎需要使用该操作。 – 2010-08-03 19:40:06
我说不可能访问cookie,其中包括客户端+服务器端方法。 – 2010-08-03 20:05:18
是的,你可以使用支持跨域调用一个特殊的闪存库: YUI connection manager
新增:不知道,虽然Cookie身份验证问题......
这听起来不错,但我认为Flash在提出请求时不会使用浏览器的Cookie。不过,也可以手动添加它们。 – 2010-08-03 19:46:47
这里的关键是饼干。如果他们不需要,他也可以在他的域名中设置一个反向代理。 – Artefacto 2010-08-03 20:02:48
#1我不认为没有检查转诊安全性差,这是同样的事情问:“那你从哪儿来的哦好,来吧,答应你的名字不是马洛里?太好了!“这背后并没有合法的安全措施,任何使用wget甚至firefox的实时http头文件的人都可以在7秒内轻易地对其进行欺骗。 #3也可以更改为内容类型=“魔法意大利面条面食”,并且我可以将它们放入装有多汁培根的ajax json。所以我不认为这是对安全的真正威胁。然而#2是一个问题。 – Incognito 2010-08-03 21:01:53