清理对象的安全方法 (javascript)?
Secure way to sanitize an object (javascript)?
为了避免 JavaScript delete
运算符(参考:https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Operators/delete)我目前正在使用对象解构来摆脱私有属性:
//sample helper-function in ts
const sanitizeUser = (user: User): UserSanitized => {
const { googleData, ...rest } = user
return rest
}
我的问题是,如果 return 值 sanitizeUser
可以安全使用,而不可能恢复 googleData
属性。
您可以确定 sanitizeUser
返回的对象不会有 googleData
属性。 可能 意味着没有办法从那个“经过净化”的对象获得 属性 的值,但这完全取决于 User
对象。如果 User
对象有任何引用它的属性(有时 parent/child 关系就是这种情况),那么 sanitizeUser
返回的经过清理的对象将具有 属性也是 — 而且它仍将引用原始的 User
对象,因此可以通过 属性.
到达 googleData
这是一个使用等效 JavaScript 代码的示例:
const sanitizeUser = (user/*: User*/)/*: UserSanitized*/ => {
const { googleData, ...rest } = user;
return rest;
};
const user = {
googleData: "secret data!",
};
user.self = user;
const sanitized = sanitizeUser(user);
console.log(sanitized.self.googleData); // "secret data!"
但是如果 User
对象没有任何东西(直接或间接)引用回自身,那么不,经过清理的对象很好并且没有办法返回到 googleData
属性来自它。
为了避免 JavaScript delete
运算符(参考:https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Operators/delete)我目前正在使用对象解构来摆脱私有属性:
//sample helper-function in ts
const sanitizeUser = (user: User): UserSanitized => {
const { googleData, ...rest } = user
return rest
}
我的问题是,如果 return 值 sanitizeUser
可以安全使用,而不可能恢复 googleData
属性。
您可以确定 sanitizeUser
返回的对象不会有 googleData
属性。 可能 意味着没有办法从那个“经过净化”的对象获得 属性 的值,但这完全取决于 User
对象。如果 User
对象有任何引用它的属性(有时 parent/child 关系就是这种情况),那么 sanitizeUser
返回的经过清理的对象将具有 属性也是 — 而且它仍将引用原始的 User
对象,因此可以通过 属性.
googleData
这是一个使用等效 JavaScript 代码的示例:
const sanitizeUser = (user/*: User*/)/*: UserSanitized*/ => {
const { googleData, ...rest } = user;
return rest;
};
const user = {
googleData: "secret data!",
};
user.self = user;
const sanitized = sanitizeUser(user);
console.log(sanitized.self.googleData); // "secret data!"
但是如果 User
对象没有任何东西(直接或间接)引用回自身,那么不,经过清理的对象很好并且没有办法返回到 googleData
属性来自它。