我有一个简单的应用程序,可以将简单数据作为状态发布到 FB。不幸的是,我发现 FB 不会清理从他们的 API 进来的数据,或者从他们的 API 出去的数据。为了解决这个问题,简单地说,答案是从他们的 API 中清理响应。
简而言之,以下代码片段的第 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 中的内部消毒剂检查了这个答案,但不幸的是,它需要使用“html4”全局对象。我不知道 JavaScript 中有任何其他输入清理程序。
那么:今天的 JavaScript 中是否有任何全面的输入清理器可用?