gpt4 book ai didi

Javascript 记录敏感数据

转载 作者:行者123 更新时间:2023-12-02 23:09:54 25 4
gpt4 key购买 nike

我正在设置包含从用户收到的密码的日志记录,并将该对象发布到后端,密码是 JSON 对象中的键。

例如,

{
"username": my_username,
"password": my_password
}

我想在 POST 之前捕获此对象,但不想记录密码值。有没有办法不记录密码值?

我正在 constants.js 中创建一个 JSON 骨架,如下所示

常量.js

const userDataObj = Object.freeze({
"username": null,
"occupation": null,
"password": null
})

module.exports = userDataObj;

然后在我的routes.js中将其发布到后端。

firemanRoutes.js:

import userDataObj from '../../config/constants';
...
//initialize stuff in the constructor and set constants
constructor(socketProvider) {
super(socketProvider);

this.userDataObj = JSON.parse(JSON.stringify(userDataObj));
this.userDataObj.occupation = 'fireman';
}

// get the passphrase and post object
validate(res, user, passphrase) {
this.userDataObj.passphrase = passphrase;

// want to log object here **without** password
winston.info('Posting object: ' + this.userDataObj);


validateUser.post(user, this.userDataObj).then(() => {
if (!validateUser.getSuccess()) {
return super.handleErrors(res);
}
...

最佳答案

您可以在保存之前从对象中删除password 属性:

const safeObject = {
...this.userDataObj,
password: undefined // Or whatever value you want to use, eg "hidden", "removed", etc.
};
winston.info('Posting object: ' + safeObject);

这将创建一个浅拷贝,然后覆盖 password 属性。

<小时/>

这是一种“黑名单”方法,用于确定哪些属性可以安全记录 - IE 如果您添加不应记录的新属性,则需要显式覆盖它。

<小时/>

另一种选择是“白名单”方法 - 即明确说明哪些属性可以安全记录:

const safeObject = {
this.userDataObj.username,
this.userDataObj.occupation,
this.userDataObj.passphrase
};
winston.info('Posting object: ' + safeObject);

这样做的好处是,如果您添加新属性,除非您明确说明,否则它不会被记录。我提到这一点是因为 passphrase 属性当前正在被记录,但我不确定这是有意还是无意。如果是偶然的话,那么这种方法就可以防止这个错误。

<小时/>

如果展开运算符 (...) 不可用,您可以使用 Object.assign 获得相同的行为:

const safeObject = Object.assign({}, this.userDataObj);
safeObject.password = undefined;

关于Javascript 记录敏感数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57417898/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com