2012-04-19 76 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

你想要做什么消毒工作?将'