43

Facebook Connect.jsを使用する Facebook アプリケーションがあります。

HTTPS 経由でアプリケーションを実行しています。サイト上のすべてのコンテンツは、https://Facebook のConnect.js

問題は、ページ内に安全でないアイテムがあるという警告メッセージが表示されることです。

Chromeの Developer Tools / Network タブを使用してどのスクリプトがロードされているかを確認し、どのファイルがどこからロードされているかを確認しました。

HTTPS 経由ではなく HTTP 経由でロードされていることがわかる唯一のファイルは、http://static.ak.facebook.com/connect/canvas_proxy.php.

このファイルで強制的に HTTPS を使用するにはどうすればよいですか?

4

8 に答える 8

54

TL;DR

を呼び出す前に設定FB._httpsします。そのようです:trueFB.init

FB._https = true;
FB.init({
    /* your app id and stuff */
});

説明

Facebook JavaScript SDK を非縮小化すると、基本的に一連のプロパティを持つオブジェクト リテラルであることがわかります。これらのプロパティの 1 つに_https、ブール値の があります。FB._domainこのプロパティは、API 要求を行うときに使用する ( に格納されている) URL のセットを決定します。Facebook は、API リクエストのタイプごとに 2 つの URL セット (セキュアな URL と非セキュアな URL) を保持しているかのように見えgetDomain()ます。

JavaScript SDK がセキュリティ警告を引き起こす理由は、FB._httpsプロパティの定義方法によるものです。2011 年 8 月 24 日現在の定義は次のとおりです。

_https: (window.name.indexOf('_fb_https') > -1)

どうやらFacebookは、window.nameプロパティが含ま_fb_httpsれている場合、それは安全なアプリであるに違いないと考えています. これは明らかに間違っています。実際のテストは次のようになります。

_https: window.location.protocol == "https:"

残念ながら、SDK はオープン ソースではなく、十分に文書化されていないため、この変更についてプル リクエストを送信することはできません :P. 短期的には、呼び出す前に手動で設定FB._httpsするとうまくいくはずです。trueFB.init

于 2011-08-24T20:36:56.820 に答える
9

したがって、これにより同じプロトコルリンクが得られます。

FB._https = (window.location.protocol == "https:");
于 2011-10-03T16:44:40.653 に答える
8

数日前にこの問題に遭遇しました。私のアプリケーション全体は HTTPS を使用していましたが、私の問題は HTTP 経由で読み込まれるプロフィール写真だけでした...私の手っ取り早い修正方法は、すべてのプロフィール写真のドメイン名を手動で置き換えることでした。例えば、

str_replace('http://profile.ak.fbcdn.net','https://fbcdn-profile-a.akamaihd.net',$user['pic_square']);

プロフィール写真の URL を確認する必要があります。まったく同じ場所から来ているわけではないと思います。自分のプロフィール写真の URL を表示し、私が持っているものに置き換えますhttps://fbcdn-profile-a.akamaihd.net

Facebookのドキュメントを詳しく調べた後:

安全な接続を介して画像を返す必要がある場合は、return_ssl_resources 引数を 1 に設定できます: https://graph.facebook.com/4/picture?return_ssl_resources=1

という追加のパラメーターを見つけました。return_ssl_resourcesを渡すとtrue、HTTPS を使用してプロフィール写真が返されます。

$fql = "SELECT uid, name, pic_square FROM user WHERE uid=me()";

$param = array( 'method' => 'fql.query', 'query' => $fql, 'return_ssl_resources'=>1);

$fbuser = $facebook->api($param);

それは魔法のように機能し、混合セキュリティ警告が表示されなくなりました. これが役立つことを願っています!

于 2011-08-24T18:27:33.157 に答える
2

Ralph Holzmann と Simon Bächler に加えて、以下は、FB._ httpsだけではうまくいかない場合の、さらに強力な修正です。

FB._https = (window.location.protocol == "https:");
FB.init({
    ...
});
if (FB._https && window == window.parent) {
    if (FB._domain && FB._domain.staticfb && FB._domain.https_staticfb)
        FB._domain.staticfb = FB._domain.https_staticfb;
}

FB.Arbiter.inform() { ... FB.getDomain((d?'https_':'')+'staticfb',true) ... } ここで、d=window!=window.parent&&... も参照してください。 2012 年 2 月 10 日現在。

于 2012-02-10T02:29:39.213 に答える
1

FB._https が次のように置き換えられたように見えます。

FB._secure = (window.location.protocol == "https:");
于 2012-07-09T21:24:12.580 に答える
0

これは、このFacebookのバグが原因のようです。

このフォーラム投稿も参照してください。

そのバグは3/16に解決済みとしてマークされましたが、canvas_proxy.phpへのhttps以外のリクエストを引き続き監視しています。うまくいけば、これはすぐに実際に修正されるでしょう...

于 2011-03-18T21:27:24.680 に答える
0

余談ですが、 HTMLページに次のようなdoc-type 宣言がある場合、「 http://www.w3.org」への参照によって、Internet Explorer でコンテンツ警告エラーが表示されることもあります。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
于 2011-10-28T07:48:48.630 に答える
0

同様の問題がありました (fb コメントがセキュア モードで機能しない)。これで解決します-https経由でjavascriptファイルを参照するだけです:

<script type="text/javascript" src="https://connect.facebook.net/en_US/all.js"></script>

または、両方で機能するスキームを指定しないでください。

<script type="text/javascript" src="//connect.facebook.net/en_US/all.js"></script>
于 2013-09-20T03:52:44.250 に答える