URl, Node.js'de bir şeyi nasıl kodlayabilirim?


314

URL bunu kodlamak istiyorum:

SELECT name FROM user WHERE uid = me() 

Bunun için bir modül indirmem gerekiyor mu? İstek modülüm zaten var.


8
Gerçekten, bu kaygan bir yoldur ve her ne pahasına olursa olsun kaçınılmalıdır.
Alfred

19
Url içine SQL deyimi koymaya çalışıyorsunuz ??? SQL Enjeksiyon Saldırılarına dikkat edin ! SQL'i kullanıcılara maruz bırakmak genellikle kötü bir fikirdir, gerçekten tehlikelidir.
Leonmax

4
@LightnessRacesinOrbit: FQL sorgusuna benziyor.
nikc.org

2
@Demi: Hayır? Bu nasıl olurdu. Her bir SO kullanıcısı kendi DB hesabına sahip olsa bile DBMS izinleri yeterince ince ayarlanmamıştır. Bana SO üzerinde SQL sorgularının doğrudan geçtiğini gördüğünüzü söyleyin? Tek istisna veri gezgini, ancak hepsi salt okunur görünümler ve kesinlikle URL'ye konmuyor.
Orbit'te Hafiflik Yarışları

17
Adam bir SQL doğrulama aracı inşa ediyor olabilir, böyle bir örnekte SQL komutlarını iletmek yanlış değildir. Soruyu cevaplamamaya çok fazla odaklanma ne iyi tavsiye vermez (en çok oylanan yorum iyi tavsiye vermez, sadece OP ile dalga
geçiyor

Yanıtlar:


598

JavaScript'leri kullanabilirsiniz encodeURIComponent:

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

31
Ziyaretçileri bir aramayı kaydetmek için evet ... kodlanmış URI'nin kodunudecodeURIComponent nasıl çözeceğinizdir. Rica ederim.
KyleFarris

125

Dahili modül querystringaradığınız şeydir:

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
bu durumda sadece bir string değil bir harita geçirebiliriz, bu yüzden arg bir string ise sonuçta hiçbir şey göremezsiniz. Kodlamak için dizeleriniz varsa encodeURIComponent () kullanın.
Ankit Patial

1
JSON nesnelerini kodlamak ve POST yapmak için bu daha iyidir.
Alex W

Dize 'veya "karakter içeriyorsa değil
Jkarttunen

47

escapeİşlevini kullanın querystring. URL güvenli bir dize oluşturur.

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
Bu kesinlikle doğru işlev gibi görünüyor; querystring.stringify()(Nicolas'ın cevabında) şimdi boş bir dize döndürüyor gibi görünüyor.
brandonscript

4
nodejs.org/api/… diyor ki: " querystring.escape()Yöntem tarafından kullanılır querystring.stringify()ve genellikle doğrudan kullanılması beklenmez."
Simon Hänisch

17

URI kodlamasının sorgu kısmı için iyi olduğunu, alan adı için iyi olmadığını unutmayın. Etki alanı punycode kullanılarak kodlanır. Bir URI ve IRI (Uluslararası Kaynak Tanımlayıcısı) arasında dönüştürme yapmak için URI.js gibi bir kütüphaneye ihtiyacınız vardır .

Dizeyi daha sonra bir sorgu dizesi olarak kullanmayı planlıyorsanız bu doğrudur:

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

Eğer ASCII karakterleri gibi istemiyorsanız /, :ve ?kaçan edilecek kullanmak encodeURIyerine:

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

Bununla birlikte, diğer kullanım durumları için bunun yerine uri-j'lere ihtiyacınız olabilir :

> 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) bunu yapacaktır:

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

SQL'i bir sorgu dizesinde geçirmek iyi bir plan olmayabilir,

bunu gör

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.