Node.jsで何かをURlエンコードするにはどうすればよいですか?


314

これをURLエンコードしたい:

SELECT name FROM user WHERE uid = me() 

このためのモジュールをダウンロードする必要がありますか?私はすでにリクエストモジュールを持っています。


8
確かに、これは滑りやすい道路であり、絶対に避けなければなりません。
アルフレッド

19
あなたのURLにSQL文を入れようとしていますか??? SQLインジェクション攻撃に注意してください。一般に、SQLをユーザーに公開することはお勧めできません。本当に危険です。
Leonmax 2012

4
@LightnessRacesinOrbit:FQLクエリのように見えます。
nikc.org 2012

2
@デミ:いいえ?それはどのように機能しますか?すべてのSOユーザーが独自のDBアカウントを取得していても、DBMSの権限は十分にきめ細かくありません。SOのどこにSQLクエリが直接渡されるのか教えてください。唯一の例外はデータエクスプローラーですが、これはすべて読み取り専用のビューであり、URLには含まれません。
軌道上での軽さのレース

17
そのような例では、SQL検証ツールを作成している可能性があります。質問に答えないこと、良いアドバイスをしないことに重点を置く(最も賛成されたコメントは良いアドバイスを与えず、OPをからかうだけです)
Rafael Eyng

回答:


598

JavaScriptを使用できますencodeURIComponent

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

31
訪問者の検索を保存するにdecodeURIComponentは、はい... エンコードされたURI をデコードする方法です。どういたしまして。
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 2013

1
これは、JSONオブジェクトをエンコードしてPOSTするのに適しています。
Alex W

文字列に 'または "文字が含まれている場合を
除き

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()(ニコラスの答えで)空の文字列を返すようになりました。
ブランドンスクリプト、2016年

4
nodejs.org/api/...は言う:「querystring.escape()メソッドがで使用されquerystring.stringify()、一般的に直接使用されることが予想されていません。」
SimonHänisch2017

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.