私は単純なデータをステータスとしてFBに送信します。残念ながら、私はFBがAPIから入って来るデータを浄化しない、またはAPIから外に出ないことを発見しました。これに対処するために、簡単に答えは、APIからの応答をサニタイズすることです。JavaScriptサニタイズライブラリ
要するに、私は次のコードスニペットの36行目に示しています。テストの一例として、FBにログインしてこのアプリに代わって投稿を許可すると、文字列「< iframe src = "http://www.google.com" > </iframe > "を投稿してくださいこれはFB内のあなたの壁に消毒されて表示されますが、この単純なページにiframeが表示されます)。
<!DOCTYPE html>
<html>
<head>
<title>Sanitize my FB Data</title>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"
type="text/javascript"></script>
<script src="../../lib/jquery.min.js" type="text/javascript"></script>
</head>
<body>
<input id="fbPost" type="text">
<div id="fb-root"></div>
<script>
window.fbAsyncInit = function() {
FB.init({
appId : "my_app_id",
status : true,
cookie : true,
xfbml : true,
oauth : true
});
$("#fbPost").keyup(function (event) {
if (event.keyCode == 13) {
var data = {
message: $("#fbPost").val()
};
FB.api('/me/feed', 'post', data, function (resp) {
var _index = resp.id.indexOf("_");
var postId = resp.id.substr(_index + 1);
FB.api('/' + postId, function (postData) {
// This line is insecure!
$("body").prepend(postData.message);
// Would like: sanitize(postData.message)
});
});
}
});
};
(function(d){
var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;}
js = d.createElement('script'); js.id = id; js.async = true;
js.src = "//connect.facebook.net/en_US/all.js";
d.getElementsByTagName('head')[0].appendChild(js);
}(document));
</script>
<div class="fb-login-button"
scope="read_stream,publish_stream">
Login with Facebook
</div>
</body>
</html>
私がやりたいことは、要するにJavaScriptのデータをサニタイズすることです。 JavaScript SDKのみを使用してFBデータを読み書きするアプリでは、FBユーザーの情報をサーバー上に残しておくことを望んでいますが、これは明らかな問題です。
私はCajaの内部消毒剤を使用してthis answerをチェックアウトしましたが、残念ながら 'html4'グローバルオブジェクトを使用する必要があります。私はJavaScriptの他の入力サニタイザーに気づいていません。
so:今日、JavaScriptで利用可能な包括的な入力サニタイザはありますか?
正確に浄化するにはどうしたらいいですか? iframe src = "http://www.google.com" > </iframe >で充分ですか?
はい、それは、私が知っている限りです。 – wyantb
http://stackoverflow.com/search?q=javascript+escape+HTML+entities –