JavaScript清理库

时间:2012-04-19 03:34:17

标签: javascript jquery facebook security sanitization

我有一个简单的应用程序,将简单数据作为状态发布到FB。不幸的是,我发现FB不会清理来自其API的数据,也不会退出其API。简而言之,答案是清理其API的响应。

简而言之,我希望在下面的代码片段中的第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用户信息,这是一个明显的问题。

我已经使用Caja中的内部消毒剂检查了this answer,但不幸的是,它需要使用&#39; html4&#39;全球对象。我不知道JavaScript中的任何其他输入消毒剂。

那么:今天JavaScript中是否有任何全面的输入消毒剂?

2 个答案:

答案 0 :(得分:1)

this function添加到您的脚本中:

function htmlEscape(str) {
    return String(str)
            .replace(/&/g, '&amp;')
            .replace(/"/g, '&quot;')
            .replace(/'/g, '&#39;')
            .replace(/</g, '&lt;')
            .replace(/>/g, '&gt;');
}

然后使用:

$("body").prepend(htmlEscape(postData.message));

答案 1 :(得分:0)

这里需要的是对收到的数据进行HTML实体编码。接受的答案中的功能会起作用,如果您已经使用Underscore,则_.escape功能会提供相同的功能。