我有一個簡單的應用程序,將簡單數據作爲狀態發佈到FB。不幸的是,我發現FB不會淨化從他們的API進來的數據,或者從他們的API中走出來。爲了解決這個問題,簡單地說,答案是要消除來自其API的響應。JavaScript消毒庫
總之,我想在下面的代碼片段的第36行中指出。 (作爲示例測試,一旦您登錄FB並授予此應用程序以您的名義發佈權限,請發佈字符串「< iframe src =」http://www.google.com「> </iframe >」按下enter鍵,這將在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用戶信息,這是一個顯而易見的問題。
我已經簽出this answer,使用Caja中的內部消毒劑,但不幸的是,它需要使用'html4'全局對象。我不知道JavaScript中的其他輸入消毒劑。
那麼,現在JavaScript中是否有任何全面的輸入消毒劑?
你想要做什麼消毒工作?將'
是的,就我所知,它會。 – wyantb 2012-04-19 03:46:04
http://stackoverflow.com/search?q=javascript+escape+HTML+entities – 2012-04-19 04:01:23