sql >> Base de Datos >  >> RDS >> Mysql

PHP:mientras que el bucle no funciona después de ajustar SELECT para la prevención de inyección de SQL

No puede vincular nombres de columnas y tablas, solo datos. Debe especificar la tabla y luego enlazar para su '%calendar weekday%' .

$stmt = $conn->prepare("SELECT " . $selectLang . " FROM `TranslationsMain` WHERE `location` LIKE ? ORDER BY `sortOrder`, " . $selectedLang);
$stmt->bind_param('s', $calendar_weekday);

Si desea utilizar nombres dinámicos de tablas/columnas, debe realizar la lista blanca mínima de esos elementos. Puede crear una lista blanca dinámica preguntando a la base de datos qué columnas son válidas para una tabla de base de datos determinada. Por ejemplo:

SELECT `COLUMN_NAME` 
FROM `INFORMATION_SCHEMA`.`COLUMNS` 
WHERE `TABLE_SCHEMA` = `database_name`
AND `TABLE_NAME` = `table_name`

Puede colocar toda esta información en matrices y luego verificar para asegurarse de que los nombres de tabla/columna utilizados en la consulta estén en las matrices. Se debe realizar una consideración adicional para los nombres de las tablas y las columnas, asegurándose de que no se utilicen palabras clave o reservadas para estos nombres.

Por último, use acentos graves alrededor de los nombres de las tablas/columnas validadas cuando invoque los valores para las consultas dinámicas. Esto cubrirá cualquier cambio potencial en la lista de palabras clave/reservadas y proporciona una capa adicional de protección.