2012-04-19 6 views
3

私は単純なデータをステータスとして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で利用可能な包括的な入力サニタイザはありますか?

+0

正確に浄化するにはどうしたらいいですか? iframe src = "http://www.google.com" > </iframe >で充分ですか?