Injeção IV: Dentro da função

A livraria desta coleção insiste em usar eval(), mas moveu o dicionário users para dentro de uma função para evitar que ele seja copiado. A função exists() retorna as entradas de users que correspondem a um nome de usuário fornecido. Crie uma consulta que copie users para res.

Exemplos

from re import *

param = "your text here"

def exists(name):
  users = {
    "alice": "password",
    "bob": "password"
  }
  if not name.isalnum():
    return {"Error": "No users found."}
  return {
    k:users[k] for k in users
    if type(search("^%s$" % name, k)).__name__ == "SRE_Match"
  }

res = eval("search("%s")" % param)

print(res) ➞ users

Notas

  • Crie uma string, não uma função.
  • Qualquer coisa presente na função exists() na aba Tests que não apareça aqui está relacionada aos testes e é irrelevante.
  • Presuma que você não sabe nada sobre os nomes de usuário no banco de dados.
  • Para facilitar a leitura, tente dividir a string em substrings menores.