Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

PHP:Enquanto o loop não funciona após ajustar SELECT para prevenção de injeção de SQL


Você não pode vincular nomes de colunas e tabelas, apenas dados. Você precisa especificar a tabela e, em seguida, vinculá-la ao seu '%calendar weekday%' .
$stmt = $conn->prepare("SELECT " . $selectLang . " FROM `TranslationsMain` WHERE `location` LIKE ? ORDER BY `sortOrder`, " . $selectedLang);
$stmt->bind_param('s', $calendar_weekday);

Se você quiser usar nomes dinâmicos de tabela/coluna, você deve executar a lista branca mínima desses itens. Você pode criar uma lista branca dinâmica perguntando ao banco de dados quais colunas são válidas para uma determinada tabela de banco de dados. Por exemplo:
SELECT `COLUMN_NAME` 
FROM `INFORMATION_SCHEMA`.`COLUMNS` 
WHERE `TABLE_SCHEMA` = `database_name`
AND `TABLE_NAME` = `table_name`

Você pode colocar todas essas informações em matrizes e, em seguida, verificar se os nomes de tabela/coluna usados ​​na consulta estão nas matrizes. Considerações extras para nomes de tabelas e colunas devem ser realizadas, certificando-se de que nenhuma palavra chave/reservada seja usada para esses nomes.

Por fim, use acentos graves em torno dos nomes de tabela/coluna validados ao chamar os valores para as consultas dinâmicas. Isso cobrirá quaisquer possíveis alterações na lista de palavras-chave/reservadas e fornece uma camada adicional de proteção.