== How to fix it in Spring Data Redis === Code examples The following code is vulnerable to NoSQL injections because untrusted data is concatenated to a Redis script. Such a script is used to perform advanced queries on a Redis instance so that an injection in it might result in the compromise of the Redis instance. ==== Noncompliant code example [source,java,diff-id=2,diff-type=noncompliant] ---- import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.script.RedisScript; @RestController @RequestMapping(path = "/redis") public class RedisController { @Autowired RedisTemplate redisTemplate; @GetMapping("/template/redisscript/echo/{echo}") public String templateRedisScriptCompliant(@PathVariable String echo) { String script = "return " + echo + ";"; Object result = redisTemplate.execute(RedisScript.of(script, Object.class), new ArrayList()); // Noncompliant return result.toString(); } } ---- ==== Compliant solution [source,java,diff-id=2,diff-type=compliant] ---- import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.script.RedisScript; @RestController @RequestMapping(path = "/redis") public class RedisController { @Autowired RedisTemplate redisTemplate; @GetMapping("/template/redisscript/echo/{echo}") public String templateRedisScriptCompliant(@PathVariable String echo) { String script = "return ARGV[1];"; Object result = redisTemplate.execute(RedisScript.of(script, Object.class), new ArrayList(), echo); return result.toString(); } } ---- === How does this work? Here, the compliant solution passes the untrusted data as a parameter to the Redis script. This ensures the data will be treated as a single value and will not tamper with the script semantics.