Как мне кодировать URl в Node.js? - PullRequest
270 голосов
/ 02 июля 2011

Я хочу, чтобы URL закодировал это:

SELECT name FROM user WHERE uid = me() 

Нужно ли загружать модуль для этого?У меня уже есть модуль запроса.

Ответы [ 6 ]

527 голосов
/ 02 июля 2011

Вы можете использовать JavaScript encodeURIComponent:

encodeURIComponent('select * from table where i()')
118 голосов
/ 03 июля 2011

Встроенный модуль querystring - это то, что вы ищете:

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()'
42 голосов
/ 10 февраля 2014

Используйте функцию escape querystring.Генерирует безопасную строку URL.

var escaped_str = require('querystring').escape('Photo on 30-11-12 at 8.09 AM #2.jpg');
console.log(escaped_str);
// prints 'Photo%20on%2030-11-12%20at%208.09%20AM%20%232.jpg'
14 голосов
/ 11 сентября 2015

Обратите внимание, что кодировка URI хороша для части запроса, но не для домена.Домен кодируется с использованием punycode.Вам нужна библиотека типа URI.js для преобразования между URI и IRI (интернационализированный идентификатор ресурса).

Это правильно, если вы планируете использовать эту строку позже в качестве строки запроса:

> encodeURIComponent("http://examplé.org/rosé?rosé=rosé")
'http%3A%2F%2Fexampl%C3%A9.org%2Fros%C3%A9%3Fros%C3%A9%3Dros%C3%A9'

Если вы не хотите экранировать символы ASCII, такие как /, : и ?, используйте encodeURI вместо:

> encodeURI("http://examplé.org/rosé?rosé=rosé")
'http://exampl%C3%A9.org/ros%C3%A9?ros%C3%A9=ros%C3%A9'

Однако для других случаев использования вам может потребоваться uri-js вместо:

> 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'
11 голосов
/ 19 января 2018

encodeURIComponent (string) сделает это:

encodeURIComponent("Robert'); DROP TABLE Students;--")
//>> "Robert')%3B%20DROP%20TABLE%20Students%3B--"

Передача SQL в строке запроса может быть плохим планом,

см. Этот

0 голосов
/ 17 сентября 2016

Решения, не кодирующие запросы, содержащие символы "или". Передача строк SQL в запросе представляет собой угрозу безопасности biq.

function encodeSQLInjection(query){
  return encodeURIComponent(query).replace(/'/g,"%27").replace(/"/g,"%22");
}
encodeSQLInjection("DELETE FROM users WHERE name LIKE '%noob%'") 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...