2013-02-07 113 views
1

我有一个旨在嵌入到任何网页的JavaScript代码片段。这段代码将一个表单加载到它所嵌入的页面中。代码段然后将表单数据发送到一个安全的URL。问题在于,代码片段加载表单的页面可能不安全,但我需要将表单数据安全地传输到安全的外部URL。如果可能,我该如何实现?如何将内容从非安全网页安全发送到安全网址?

+0

安全是指你的意思是HTTPS? – Birla

+0

是的,这就是我的意思。 – Babiker

回答

4

如果表单的ACTION属性将其指向HTTPS目标,则内容将被加密并安全地传输到目标,而不管HTML最初传输的格式如何:当用户提交表单时,浏览器启动新的连接,并针对目的地发出POST请求(我假设你的表单的METHOD是POST,而不是GET),而不是当前的浏览器位置。在这种情况下,该POST通过HTTPS发生,因为目标是“https:// ...”。

这并没有说明XSS的内在安全风险,也没有可能嵌入到不安全页面的内容,或者是在通过JavaScript通过HTTP传输时对HTML格式的MITM攻击......您必须决定这些考虑是否值得您的项目。也许你的JavaScript可以嵌入带有表单的IFRAME(对IFRAME的SRC使用HTTPS)而不是FORM本身;这是Facebook和其他人为防止其他脚本在不安全页面上运行而访问表单及其数据 - 浏览器将根据其同源策略阻止其他脚本的这种尝试(每个流行的现代浏览器都可以依靠做到这一点),并在IFRAME请求时通过HTTPS传输表单。当内容需要安全并且无法控制表单嵌入的位置时,这是将表单传送到任意网站的首选方式。

+0

即使是一个iframe,如果外部页面覆盖纯HTTP,也会出现[类似风险](http://stackoverflow.com/a/3183176/372643)。 – Bruno

+0

如果您的JS和表单仅通过HTTPS传输(并且拒绝访问HTTP请求),那么您已尽全力。如果一个MITM通过HTTP截获了外部页面,并且重写了你的JS嵌入来放置一个HTTP IFRAME,它将不会加载你的表单。他们真正能做的就是拦截你的JS,杀死它,并从头开始注入自己的表单。在这一点上你无能为力 - 即使你通常没有以任何方式提供表格,他们也可以重写页面并创建一个令人信服的翻版,然后插入它。如果URL错误或锁定图标丢失,则无论如何每个人都会点击。 –

+0

事实上,如果外部页面是普通的HTTP,你不能保证任何东西。 – Bruno

0

这是当您提交的形式,重要的操作URL,因此,如果您的形式使用的https:// URL,它会使POST请求到该网址的形式本身是否是http://https://网页上。

但是,您还应通过https://提供表单页面。请参阅first rule of the WASP TLS cheat sheet(此原则不仅适用于登录页面,而且适用于任何类似的表单)。

问题是,如果用户没有通过地址https://提供表单的页面,而用户可以看到验证,那么用户不能相信MITM攻击者没有更改此表单。例如,这样的攻击者可以透明地替换action属性以重定向到另一个站点,或者注入一些JavaScript来记录输入该表单的所有密钥,这些密钥应该用于收集敏感数据。

0

在HTTP页面上加载的JavaScript将被正在修改您的流量的攻击者所取代。修改后的JavaScript可以简单地将数据发布到公众处。因此,无法将数据从HTTP页面安全地传输到HTTPS页面。除非你有我缺少的“安全”的其他定义?