Je veux coder l'URL :
SELECT name FROM user WHERE uid = me()
Dois-je télécharger un module pour cela ? J'ai déjà le module de demande.
Je veux coder l'URL :
SELECT name FROM user WHERE uid = me()
Dois-je télécharger un module pour cela ? J'ai déjà le module de demande.
Vous pouvez utiliser la fonction JavaScript encodeURIComponent
:
encodeURIComponent('select * from table where i()')
donner
'select%20*%20from%20table%20where%20i()'
Le module intégré querystring
est ce que vous recherchez :
var querystring = require("querystring");
var result = querystring.stringify({query: "SELECT name FROM user WHERE uid = me()"});
console.log(result);
#prints 'query=SELECT%20name%20FROM%20user%20WHERE%20uid%20%3D%20me()'
Dans ce cas, nous ne pouvons passer qu'une carte et non une chaîne, donc si arg est une chaîne, vous ne verrez rien dans le résultat. Donc si vous avez des chaînes à encoder, utilisez encodeURIComponent().
Cela semble être la fonction correcte ; querystring.stringify()
(dans la réponse de Nicolas) semblent retourner une chaîne vide maintenant.
nodejs.org/api/ dit : "Le querystring.escape()
est utilisée par querystring.stringify()
et il n'est généralement pas prévu qu'il soit utilisé directement."
Notez que l'encodage URI est bon pour la partie requête, il ne l'est pas pour le domaine. Le domaine est codé en utilisant le punycode. Vous avez besoin d'une bibliothèque comme URI.js pour convertir un URI en IRI (Internationalized Resource Identifier).
C'est correct si vous prévoyez d'utiliser la chaîne plus tard comme chaîne de requête :
> encodeURIComponent("http://examplé.org/rosé?rosé=rosé")
'http%3A%2F%2Fexampl%C3%A9.org%2Fros%C3%A9%3Fros%C3%A9%3Dros%C3%A9'
Si vous ne voulez pas de caractères ASCII comme /
, :
et ?
pour être échappé, utilisez encodeURI
à la place :
> encodeURI("http://examplé.org/rosé?rosé=rosé")
'http://exampl%C3%A9.org/ros%C3%A9?ros%C3%A9=ros%C3%A9'
Cependant, pour d'autres cas d'utilisation, vous pouvez avoir besoin de uri-js à la place :
> var URI = require("uri-js");
undefined
> URI.serialize(URI.parse("http://examplé.org/rosé?rosé=rosé"))
'http://xn--exampl-gva.org/ros%C3%A9?ros%C3%A9=ros%C3%A9'
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.
10 votes
En effet, cette route est glissante et doit être évitée à tout prix.
29 votes
Essayez-vous de mettre une instruction SQL dans votre url ? ??? faites attention à l'option Attaque par injection SQL ! C'est généralement une mauvaise idée d'exposer SQL aux utilisateurs, c'est vraiment dangereux.
5 votes
@LightnessRacesinOrbit : ressemble à une requête FQL.
0 votes
@LightnessRacesinOrbit Stack Exchange ne fait-il pas cela ? Si je comprends bien, il utilise les permissions au niveau du SGBD pour éviter que quelque chose de mal ne se produise.
3 votes
@Demi : Non ? Comment cela fonctionnerait-il ? Les permissions du SGBD ne sont pas suffisamment fines, même si chaque utilisateur de l'OS avait son propre compte SGBD. Dites-moi où sur SO vous voyez des requêtes SQL passées directement ? La seule exception est l'explorateur de données, mais ce sont toutes des vues en lecture seule, et ce n'est certainement pas mis dans l'URL.
0 votes
@LightnessRacesinOrbit Je faisais référence aux vues en lecture seule.
1 votes
@Demi : La réponse est toujours non.
31 votes
Le type pourrait construire un outil de validation SQL, il n'y a rien de mal à passer des commandes SQL dans un exemple comme celui-ci. Trop d'attention à ne pas répondre à la question ni à donner de bons conseils (le commentaire le plus voté ne donne pas de bons conseils, il se moque seulement du PO).