É esta, pelo menos código php levemente seguro?
-
09-09-2019 - |
Pergunta
Eu tenho um monte de $ variáveis ??_POST sendo enviados no meio de uma forma longa e em vez de codificar cada um com uma mysql_escape_string()
é ok para mim para fazer o seguinte? Eu não sei se este é realmente seguro e / ou código viável.
foreach ($_POST as &$post_item){
$post_item = mysql_escape_string($post_item);
}
Estou bastante certo de que, porque eu estou usando o &, é passá-lo em por referência, não o valor, por isso estou realmente mudando o valor no $ _POST.
Além disso, devo usar mysql_real_escape_string()
vez?
EDIT: Estou usando DOP e preparar (), juntamente com o método acima. Será que este cuidar dele para mim?
Solução
Por que não usar array_map()
?
array_map(mysql_real_escape_string, $_POST);
Mas, na realidade você deve estar usando parametrizadas declarações / preparados.
mysql_real_escape_string()
leva o conjunto de caracteres de banco de dados atual em consideração, mysql_escape_string()
não. Assim, o primeiro é a melhor alternativa em comparação.
Editar (na sequência de edição do OP para a pergunta):
Uma vez que você já faz DOP preparado declarações, não há necessidade de modificar seus valores. DOP cuida de tudo, que é o ponto inteiro dele ( Se você realmente colocar todos os dados em parâmetros, que é - apenas concatenar cadeias com declarações Construir SQL leva ao desastre com DOP ou sem). Escapando os valores previamente levaria a valores escaparam no banco de dados.
Outras dicas
Sim, você deve estar usando mysql_real_escape_string()
, se você estiver indo para ir por esse caminho. Mas a maneira correta para se certificar as variáveis ??são seguros para enviar para o banco de dados está usando consultas parametrizadas , que são fornecidos em PHP, quer através dos mysqli funções ou DOP .
Além dos comentários anteriores, outra vantagem de se utilizar consultas parametrizadas é que o banco de dados será capaz de fazer melhor otimizações e, provavelmente, usar um plano de consulta em cache para que você irá obter um melhor desempenho.