Saya melayani beberapa file statis menggunakan Express dan Node.JS, apa yang bisa saya lakukan untuk melindungi terhadap banjir http seperti serangan POST dan GET serangan?
Semua permintaan sudah dikenali sebelumnya oleh app.use dan disuntikkan dalam fungsi middleware. Ini digunakan sebelum permintaan beeing diikuti untuk express.static atau app.rest (objek req), dan sekali lagi sebelum beeing menanggapi klien (objek res). Anda dapat mengubah req, res, dan secara opsional menggunakan fungsi panggilan balik (di sini dinamai selanjutnya ). Ini dia triknya. Jika fungsi middleware Anda tidak pernah memanggil panggilan balik () berikutnya , permintaan tidak dilayani. Anda dapat menggunakan middleware, yang menghitung permintaan per ip per waktu, dan melayani atau tidak halaman. Pikirkan tentang daftar ip yang diblokir akan tumbuh dan akan memperlambat aplikasi Anda. Middlewares perlu disinkronkan untuk mencegat. Di sini contoh kode Anda yang diperlukan, berdasarkan contoh API API contoh:
var express = require('express'),
app = express(),
util= require(util);
app.use(express.static(__dirname + '/public'));
// a first middleware, a logger in console, just to show ip
// usefull to debug
app.use(function(req, res, next){
console.log('%s %s from %s , proxy: %s', req.method, req.url, req.ip, util.inspect(req.ips));
next();
});
// a second middleware, what u need
app.use(filterUrReq);
app.get("blah", function(req, res) {
res.send(req.url + " well served to " + req.ip)
});
app.listen(8080);
// here the middleware function, it filters by ip, if ip is clean, call next callback.
function filterUrReq (req, res, next) {
if (req.ip == "15.89.111.111") {
console.log('i dont want to serve this IP, dont call next');
} else {
console.log('ok clean ip, go to next app.use');
next();
}
}
di sini praktik yang baik untuk expressJS. http://expressjs.com/4x/api.html#app.use . Mungkin pertanyaan Anda harus dalam stackoverflow, atau mungkin Anda memerlukan sesuatu yang lebih global seperti fail2ban , lihat masalah pemasyarakatan penjara.