【问题标题】:How can I safely use user supplied text in JSON?如何在 JSON 中安全地使用用户提供的文本?
【发布时间】:2015-12-12 03:25:50
【问题描述】:

我有一个 Node 应用程序,它需要接受用户输入(用户名和密码)并向另一个 API 发出请求,其中包含这两件事。我有一个应该这样做的功能:

getTokenFromLogin = function(user, pass) {    
    var promise = new Promise(function(resolve, reject) {
        var options = this.options;
        options.url = endpoints.login;
        options.method = 'POST';
        options.form = {
            'username': user,
            'password': pass
        };
        request(options, function (err, httpResponse, body) {
            if (err) return reject(err);
            resolve(body);
        });
    });
    return promise;
};

但是,理论上,攻击者不能只输入一个 JSON 格式的字符串来操纵我的请求对象吗?如果是这种情况,我如何确保这些字符串是安全的?我已经看到了两种方法,JSON.parse() 和 JSON.stringify(),但我没有发现任何东西可以说明我应该使用什么以及这些方法如何阻止这种漏洞。

【问题讨论】:

    标签: json node.js validation security express


    【解决方案1】:

    答案是您的代码已经“安全”。字符串就是字符串(当然,假设您检查的是typeofuserpass),字符串本身不能神奇地与对象交互。

    现在,如果您发送请求的服务器设计/编码不佳,并且在插入数据库时​​没有正确清理其输入(userpass),那么情况就完全不同了。但是对于提出请求,这里没有安全问题。

    【讨论】:

    • 所以即使有人输入了诸如 } 'options.url = 'malicious.url' 之类的字符串; } { 对我来说还是安全的?
    • 是的。它只是一个字符串,你不是eval()ing 或以其他方式执行字符串,就好像它是代码一样。
    • 我明白了。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-12
    • 2010-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-27
    相关资源
    最近更新 更多