清理/拒绝graphql(JS)中包含不安全html的用户输入

清理/拒绝graphql(JS)中包含不安全html的用户输入,graphql,graphql-js,apollo-server,Graphql,Graphql Js,Apollo Server,我一直在上下搜索这个问题,但我找不到任何与此相关的东西,但是有没有一个好的解决方案来清理graphql变体中用户输入的html字符 我知道,像name:“{alert('foo')}”这样的输入被graphql(在我的例子中是apollo server express)按原样接受,但这不好。当然,React之类的框架不会将该字符串设置为html,因此在那里是“安全的”,但如果graphql端点被一个将字符串嵌入为html的站点使用,该怎么办 有人知道解决这个问题的好办法吗?我看过几个包,但它们大

我一直在上下搜索这个问题,但我找不到任何与此相关的东西,但是有没有一个好的解决方案来清理graphql变体中用户输入的html字符

我知道,像
name:“{alert('foo')}”
这样的输入被graphql(在我的例子中是apollo server express)按原样接受,但这不好。当然,React之类的框架不会将该字符串设置为html,因此在那里是“安全的”,但如果graphql端点被一个将字符串嵌入为html的站点使用,该怎么办

有人知道解决这个问题的好办法吗?我看过几个包,但它们大多很小,几乎没有活动


另一个解决方案是在数据库级别进行清理,类似这样,但我想看看在架构级别是否有合适的解决方案,最后只是在模型级别进行清理,创建了一个通用模型类来清理args中的所有内容:

导出默认类模型{
构造函数(父、参数、上下文、信息){
这个.db=db;
this.parent=null;
this.args=null;
this.context=null;
this.info=null;
这是#init(父、参数、上下文、信息);
}
#init=(父级、参数、上下文、信息)=>{
this.parent=parent;
this.args=this.#sanitizeObject(args);
this.context=上下文;
this.info=info;
};
#sanitizeObject=(参数)=>{
让sanitizedArgs={};
Object.entries(args.forEach)([key,value])=>{
if(数组.isArray(值)){
sanitizedArgs[键]=此.#sanitizeArray(值);
}else if(typeof value==='object'){
sanitizedArgs[key]=此.#sanitizeObject(args[key]);
}否则{
sanitizedArgs[键]=此值。#sanitizeInput(值);
}
});
返回已消毒的args;
};
#sanitizeArray=(参数)=>{
返回args.map((值)=>{
if(数组.isArray(值)){
返回此项。#sanitizeArray(值);
}else if(typeof value==='object'){
返回此值。#sanitizeObject(值);
}否则{
返回此值。#sanitizeInput(值);
}
});
};
#sanitizeInput=(输入)=>{
返回domprify.sanitize(输入);
};
}