2012-04-19 98 views
3

我有一個簡單的應用程序,將簡單數據作爲狀態發佈到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中是否有任何全面的輸入消毒劑?

+0

你想要做什麼消毒工作?將'