使用参数化GROQ查询是否能抵御注入攻击?
GROQ参数化查询是否能避免注入攻击?
你的第一个示例(使用参数化$maker的GROQ查询)完全可以避免注入攻击。
当你通过sanityClient.fetch的第二个参数传入变量时,Next-Sanity客户端会自动对参数做转义处理,将$maker视为纯匹配值,而非GROQ语法的一部分解析。无论攻击者从URL传入什么恶意字符串,都会被当作maker字段的匹配内容,不会破坏原查询的结构,也就无法实现注入劫持。
反观你提到的字符串拼接写法,确实存在极高的安全风险:
const query = `*[_type == 'car' && maker == '${maker}'][0]`;
比如攻击者构造URL参数maker的值为' || 1 == 1 || maker == ',拼接后的查询会变成:
*[_type == 'car' && maker == '' || 1 == 1 || maker == ''][0]
这会直接返回所有_type为car的文档,甚至可能被进一步构造出遍历全库、窃取敏感数据等更危险的逻辑。
参数化查询是GROQ官方推荐的安全做法,Next-Sanity的实现也完全遵循这一规范,你可以放心使用这种写法来防范注入攻击。
内容的提问来源于stack exchange,提问作者ptf
相关产品推荐
相关产品推荐

