0
votes

Laravel db :: cru empêche l'injection SQL sans perturbindings

J'ai une requête dynamique pour le filtrage, et maintenant j'ai un problème où j'ai besoin d'utiliser dB :: RAW pour la commande par xxx

mais maintenant ici j'ai un problème de protection contre l'injection SQL Comment puis-je empêcher Valeur et $ Colonne à partir d'une injection SQL sans utiliser -> SetBindings

Je ne peux pas utiliser < Code> -> Setbindingings 'Parce que j'ai des nombres dinamiques de colonnes filtrantes en fonction de la table


0 commentaires

3 Réponses :


1
votes

Vous pouvez utiliser orderbyraw code> qui acceptera une gamme de liaisons.

$this->query->orderByRaw('POSITION(? IN ?) asc', [$value, $column]);


2 commentaires

Vous ne pouvez pas utiliser de paramètres pour les noms de colonne.


Cette solution ne renvoie pas une erreur, mais elle traitera le deuxième paramètre en tant que chaîne littérale, pas le nom d'une colonne. Donc, cela ne fera pas ce que veut l'OP.



3
votes

Les déclarations préparées ne peuvent pas évaluer les noms de colonnes. Vous devez donc utiliser Whitelisting pour protéger contre les injections en $ colonne .

Pour protéger contre la valeur, vous pouvez le forcer à être un entier. ou Type de flottement ou utilisez la commandeByraw qui accepte une gamme de paramètres: xxx


2 commentaires

En fait, je n'ai pas besoin de protection contre $ colonne Parce qu'il provient d'un tableau que je crée, ça marche parfaitement, merci


Vous voudrez peut-être mettre $ colonne dans les tiques arrière au cas où il correspond à un Word réservé .



-1
votes

Essayez le ci-dessous,

$orderByQuery = "select * from table order by POSITION(:value IN :column) asc";
$this->query->select($orderByQuery, [
    "value" => $value,
    "column" => $column
])


0 commentaires