4 votes

Requêtes paramétrées dans l'API ArcGIS JavaScript

J'essaie de construire un where pour une requête de couche ArcGIS dans l'API ArcGIS JavaScript. Tous les exemples que je peux trouver (y compris dans where documentation ) vous encouragent à faire des choses comme ça :

query.where = "NAME = '" + stateName + "'";

Je trouve cela surprenant, parce qu'il semble que nous soyons encouragés à écrire du code qui est susceptible de Bugs d'injection SQL . C'est particulièrement important pour moi, car je ne contrôle absolument pas mon "nom d'état". C'est une donnée brute de l'utilisateur.

Il semble que la bibliothèque prenne en charge le paramétrage des requêtes via la fonction parameterValues Cependant, je ne trouve aucun exemple sur la façon de l'utiliser, ni sur la façon de formater ma requête pour qu'elle utilise les valeurs des paramètres. Même la documentation ne contient aucun exemple.

Alors comment créer des requêtes correctement paramétrées ?

Remarque : je reconnais que c'est probablement le travail de l'administrateur du serveur d'empêcher les mauvaises requêtes de causer des dommages, mais la moitié de la raison pour laquelle je pose cette question est aussi purement pour éviter les bogues et les requêtes mal analysées.

1voto

Phil Points 3695

Selon l'ESRI le parameterValues est uniquement pour l'utilisation des couches de requête. Elle n'est pas destinée à ce contexte.

La réponse est donc non, vous ne pouvez pas utiliser le paramétrage SQL approprié lorsque vous exécutez simplement une requête sur une couche.

Le meilleur moyen que j'ai trouvé pour rendre vos requêtes au moins un peu plus résistantes est d'utiliser un code comme celui-ci :

function sanitizeParameter(value) {
    // We need to escape single quotes to avoid messing up SQL syntax.
    // So all ' characters need to become ''
    return value.split("'").join("''")
}

query.where = "NAME = '" + sanitizeParameter(stateName) + "'";

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X