Node.js에서 무언가를 어떻게 인코딩합니까?


314

이것을 URL 인코딩하고 싶습니다 :

SELECT name FROM user WHERE uid = me() 

이를 위해 모듈을 다운로드해야합니까? 요청 모듈이 이미 있습니다.


8
실제로 이것은 미끄러운 길이므로 모든 비용을 피해야합니다.
Alfred

19
귀하의 URL에 SQL 문을 넣으려고합니까? SQL 인젝션 공격에 주의하십시오 ! 일반적으로 SQL을 사용자에게 노출시키는 것은 좋지 않습니다. 정말 위험합니다.
Leonmax

4
@LightnessRacesinOrbit : FQL 쿼리처럼 보입니다.
nikc.org

2
@ 데미 : 아니요? 어떻게 작동할까요? 모든 단일 사용자가 자신의 DB 계정을 가지고 있어도 DBMS 권한은 충분히 세분화되지 않습니다. SQL 쿼리가 직접 전달되는 위치를 알려주십시오. 한 가지 예외는 데이터 탐색기이지만 모든 읽기 전용보기이며 URL에 포함되지는 않습니다.
궤도에서 가벼움 경주

17
그 사람은 SQL 유효성 검사 도구를 작성했을 수 있습니다. 예를 들어 SQL 명령을 전달해도 아무런 문제가 없습니다. 질문에 대답하지 둘 다 좋은 조언을 포기하지 않을에 너무 많은 초점 (가장 upvoted 코멘트 만 OP의 재미를 만들어, 좋은 조언을 제공하지 않습니다)
라파엘 Eyng

답변:


598

JavaScript를 사용할 수 있습니다 encodeURIComponent:

encodeURIComponent('select * from table where i()')

31
방문자에게 검색을 저장하기 위해 예 ... 인코딩 된 URI decodeURIComponent디코딩 하는 방법 입니다. 천만에요.
KyleFarris

125

내장 모듈 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()'

4
이 경우 문자열이 아닌 맵만 전달할 수 있으므로 arg가 문자열이면 결과가 표시되지 않습니다. 따라서 인코딩 할 문자열이 있으면 encodeURIComponent ()를 사용하십시오.
Ankit Patial

1
JSON 객체를 인코딩하고 POST하는 것이 좋습니다.
Alex W

문자열에 '또는'문자가 포함되어 있지 않은 경우
Jkarttunen

47

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'

1
이것은 분명히 올바른 기능인 것 같습니다. querystring.stringify()(Nicolas의 답변에서) 이제 빈 문자열을 반환하는 것 같습니다.
brandonscript

4
nodejs.org/api/…의 말 : "이 querystring.escape()방법 querystring.stringify()은 일반적으로 사용되며 일반적으로 직접 사용되지는 않습니다."
Simon Hänisch 1

17

URI 인코딩은 쿼리 부분에 적합하지만 도메인에는 적합하지 않습니다. 도메인은 punycode를 사용하여 인코딩됩니다. URI와 IRI (Internationalized Resource Identifier) ​​사이를 변환하려면 URI.js 와 같은 라이브러리가 필요합니다 .

나중에 문자열을 쿼리 문자열로 사용하려는 경우에 올바른 것입니다.

> 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'

12

encodeURIComponent (string)이 수행합니다.

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

쿼리 문자열에서 SQL을 전달하는 것은 좋은 계획이 아닐 수도 있습니다.

이거 봐

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.