2012-09-14 34 views
26

node.js uygulamasında yeniyim ve bir süredir deneyimleyip deneyimliyorum. Şimdi istek gövdesinin ayrıştırılmasıyla ilgili hızlı çerçevenin tasarımı ile karıştırıldım. express resmi rehber itibaren : Bütün ortakatmanını kurduktan sonraNode.js, bodyParser ara katman yazılımının doğru kullanımını ifade eder

app.use(express.bodyParser()); 
app.use(express.methodOverride()); 
app.use(app.router); 
app.use(logErrors); 
app.use(clientErrorHandler); 
app.use(errorHandler); 

, o zaman biz işlemek için istediğiniz rotayı ekleyin:

app.post('/test', function(req, res){ 
    //do something with req.body  
}); 

bu yaklaşımla sorun olduğunu tüm istek gövdesi yol geçerliliği kontrol edilmeden önce ayrıştırılacaktır. Geçersiz isteklerin gövdesini ayrıştırmak çok etkisiz görünüyor. Ve daha, ama yükleme işlemini etkinleştirirsem:

app.use(express.bodyParser({uploadDir: '/temp_dir'})); 

Herhangi bir istemci herhangi bir dosya yükleyerek sunucuyu bombardımanına (HERHANGİ rota/yol isteği göndererek !!), işlenmiş ve tutulacaktır tüm '/ temp_dir'. Bu varsayılan yöntemin yaygın olarak tanıtıldığına inanamıyorum! rota tanımlarken

Biz tabii bodyParser işlevini kullanabilirsiniz:

app.post('/test1', bodyParser, routeHandler1); 
app.post('/test2', bodyParser, routeHandler2); 

hatta belki rotayı işlemek her işlevinde vücudu ayrıştırmak. Ancak, bu sıkıcı bir iştir.

Express.bodyParser ürününü yalnızca tüm geçerli (tanımlı) rotalar için kullanmanın ve dosya yükleme becerisi özelliğini yalnızca çok sayıda kod tekrarı olmaksızın yalnızca seçili yollarla kullanmak için daha iyi bir yol var mı?

cevap

30

İkinci yönteminiz gayet iyi. Ayrıca, middleware fonksiyonlarının dizilerini app.post, app.get ve arkadaşlarına da aktarabilirsiniz. Böylece, POST gövdelerini, yüklemelerini, vb. Ele alan şeylerle uploadMiddleware adlı bir dizi tanımlayabilirsiniz ve bunu kullanın.

app.post('/test1', uploadMiddleware, routeHandler1); 

Örnekler yeni başlayanlar içindir. 1. günde çalışılan lanet şeyi ve verimli ve güvenli üretim kodunu almanıza yardımcı olacak başlangıç ​​kodu genellikle çok farklı. Yüklemelerin keyfi yollara kabul edilmemesi konusunda kesin olarak geçerli bir nokta çizersiniz. Tüm istek gövdelerinin 'çok verimsiz' olarak ayrıştırılması söz konusu olduğunda, bu durum geçersiz/saldırgan POST isteklerinin uygulamanıza gönderilen yasal isteklere oranına bağlıdır. Saldırı soruşturma isteklerinin ortalama arka plan radyasyonu, sitenizin popüler hale gelmesine kadar muhtemelen endişelenmenize yetmez.

Also here's a blog post with further details of the security considerations of bodyParser.

+1

Vay, son gelişmeleri kapsayacak şekilde bir yıl öncesine cevabınızı yeniden ziyaret için upvote yeniden: 'bodyParser' –

+0

"Başlangıç ​​kodu verimli günde 1 ve üretim kodu üzerinde çalışan lanet şey yardımcı olacak ve Güvenli genellikle çok farklıdır. Amin. –

İlgili konular