Esquema de la lista negra:
La copia del código es la siguiente:
/**
* Creado por YCXJ-Wanglihui el 2014/5/28.
*/
'Use estricto';
var mongoose = require ('mongoose');
esquema var = mongoose.schema;
// 1. Bloqueo a corto plazo 2. Bloqueo permanente
var grado = {temp: 1, para siempre: 2};
/**
* Lista negra
* @Type {esquema}
*
* @param ip {string} Blacklist IP
* @param createat {date} Tiempo de creación
* @param expiretime {date} Si es un breve bloqueo, bloqueo de expiración de bloque
* @param ProBidDendegee {número} Nivel de bloqueo 1. Bloqueo a corto plazo 2. Bloqueo permanente
* @param motivo {string} Bloqueo de la razón
*/
var negro list = nuevo esquema ({
IP: {
Tipo: cadena,
Índice: verdadero
},
createat: {
Tipo: fecha,
Valor predeterminado: fecha, ahora
},
Extentime: {
Tipo: Fecha
},
ProfhidDendEgree: {
Tipo: número,
predeterminado: grado.temp
},
razón:{
Tipo: cadena,
Valor predeterminado: 'solicitudes frecuentes'
}
});
Mongoose.modelo ('Blacklist', Blacklist);
IP y esquema de registro de envío:
La copia del código es la siguiente:
/**
* Creado por YCXJ-Wanglihui el 2014/5/28.
*/
'Use estricto';
var mongoose = require ('mongoose');
esquema var = mongoose.schema;
var objectId = schema.ObjectId;
/**
* Registrar respuestas y IP de participar en el cuestionario
* @Type {esquema}
*
* @param respondeid {objectID} ID de respuesta
* @param createat {date} Tiempo de creación
* @param ip {string} personas que participaron en la ip de respuesta
*/
var ipanswerlog = nuevo esquema ({
RespuestaD: {
Tipo: ObjectID
},
createat: {
Tipo: fecha,
Valor predeterminado: fecha, ahora
},
IP: {
Tipo: cadena,
Índice: verdadero
}
});
Mongoose.model ('ipanswerlog', ipanswerlog);
Código proxy relacionado:
La copia del código es la siguiente:
/**
* Creado por YCXJ-Wanglihui el 2014/5/28.
*/
'Use estricto';
var iPansWerLog = require ('../ modelos'). ipanswerlog;
/**
* Crear y guardar
* @param ipanswerlog {esquema o dict}
* @Param Callback
*/
var newandSave = function (ipanswerlog, llamada de llamada) {
if (ipanswerlog instanceOf ipanswerlog) {
ipanswerlog.save (devolución de llamada);
}demás{
var m = nuevo ipanswerlog (ipanswerlog);
M.Save (devolución de llamada);
}
}
/**
* Número de respuestas en un minuto
* @param ip
* @Param Callback
*/
var countonEminuteAnswer = function (ip, llamado) {
var endtime = date.now ();
var begintime = endtime - 1000*60*1;
countipanswerbytime (BegIntime, Endtime, IP, llamado);
}
/**
* Responder a los números dentro de una hora
* @param ip
* @Param Callback
*/
var countoneHouransWer = function (IP, llamado) {
var endtime = date.now ();
var begintime = endtime - 1000*60*60*1;
countipanswerbytime (BegIntime, Endtime, IP, llamado);
}
/**
* Responder dentro de un día
* @param ip
* @Param Callback
*/
var countonedayanswer = function (ip, llamado) {
var endtime = date.now ();
var begintime = endtime - 1000*60*60*24;
countipanswerbytime (BegIntime, Endtime, IP, llamado);
}
/**
* Calcule el número de respuestas en un cierto período de tiempo
* @param Begintime {número} Sello de tiempo de inicio
* @param endtime {número} Tiempo de finalización Si es nulo, use el estampón de tiempo actual
* @param ip {string} dirección IP
* @Param Callback
*/
var countipanswerbytime = function (BegIntime, Endtime, IP, llamado) {
if (! Endtime) {
Endtime = date.now ();
}
Ipanswerlog.count ({ip: ip, '$ y': {$ lt: begIntime, $ gt: endtime}}, devolución de llamada);
}
Exports.CountipansWerByTime = CountipanswerByTime;
Exports.CountonedAyanswer = countonedayanswer;
exports.countoneHouranswer = countoneHouranswer;
exports.countoneminteanswer = countoneminteanswer;
Exports.NeWandSave = NewAndSave;
Proxy de la lista negra:
La copia del código es la siguiente:
/**
* Creado por YCXJ-Wanglihui el 2014/5/28.
*/
'Use estricto';
var negro list = require ('../ modelos'). Blacklist;
/**
* Crear y guardar
* @param Backlist {BlackList} o {Dict} Blacklist Data
* @Param Callback
*/
var newandSave = function (lista de retroceso, devolución de llamada) {
if (instancia de lista de retroceso de Blacklist) {
backlist.save (devolución de llamada);
}demás{
var m = nueva lista negra (lista de retroceso);
M.Save (devolución de llamada);
}
}
/**
* Desactivar el acceso IP por una hora
* @param ip {string}
* @Param Callback
*/
var newandSaveOneHourTempForBidDen = function (IP, llamado) {
var expiretime = date.now () + 1000*60*60;
NewAndSaveTempForbidden (IP, Expiretime, Callback);
}
/**
* Desactivar un día
* @param ip {string}
* @Param Callback
*/
var newandsaveonedaytempForbidDen = function (IP, llamado) {
var expiretime = date.now () + 1000*60*60*24;
NewAndSaveTempForbidden (IP, Expiretime, Callback);
}
/**
* Crear una lista negra temporal
* @param ip {string}
* @param expiretime {número} tiempo de caducidad
* @Param Callback
*/
var newAndSaveTempForbidDen = function (IP, ExperTime, Callback) {
var negrylist = new BlackList ({ip: ip, expiretime: expiretime, forbibedDeneGree: 1});
Newandsave (lista negra, devolución de llamada);
}
/**
* Crear y guardar una lista negra permanente
* @param ip
* @Param Callback
*/
var newandSaveForeverForBidDden = function (IP, llamado) {
var negrylist = new BlackList ({ip: ip, forbibedDendeGree: 2});
Newandsave (lista negra, devolución de llamada);
}
/**
* Determinar si está en la lista negra
* @param ip {string} dirección IP
* @Param Callback
*/
var isInblackList = function (ip, llamado) {
getBlackListByip (IP, function (err, BlackList) {
if (err) {
devolución de llamada (err);
} else if (BlackList) {
var currentDate = date.now ();
if (BlackList.ForBidDendEgree === 1 && BlackList.Expiretime> CurrentDate) {
removeBlackListByip (IP, function (err) {
if (err) {
devolución de llamada (err);
}demás{
devolución de llamada (nulo, falso);
}
})
}demás{
devolución de llamada (nulo, verdadero);
}
}demás{
devolución de llamada (nulo, falso);
}
})
}
/**
* Obtenga la entrada de la lista negra a través de IP
* @param ip
* @Param Callback
*/
var getBlackListByIP = function (IP, Callback) {
BlackList.Findone ({ip: ip}, devolución de llamada);
}
/**
* Eliminar la lista negra según IP
* @param ip
* @Param Callback
*/
var removeBlackListByIP = function (IP, llamado) {
getBlackListByip (IP, function (err, BlackList) {
if (err) {
devolución de llamada (err);
} else if (BlackList) {
BlackList.remove (devolución de llamada);
}demás{
devolución de llamada (nulo, nulo);
}
})
}
Exports.NeWandSave = NewAndSave;
exports.isinblackList = isInblackList;
exports.getblackListByip = getBlackListByip;
exports.removeblackListByip = removeBlackListByip;
Exports.NeWandSaveOneHourTempForbidden = NewAndSaveOneHourtempForbidden;
Exports.NewandSaveonedAyTempForbidden = NewandSaveonedaytempForbidden;
Exports.NeWandSaveForeverForbidden = NewAndSaveForeverForbidden;
Exports.NeWandSavetEmpForbidden = NewAndSaveTempForbidden;
Detalles del middleware:
La copia del código es la siguiente:
/**
* Creado por YCXJ-Wanglihui el 2014/5/28.
*/
'Use estricto';
var BlackListProxy = require ('../../ proxy'). BlackListporxy;
var iPansWerLogProxy = require ('../../ proxy'). ipanswerlogProxy;
var eventProxy = request ('EventProxy');
/**
* Determinar si necesito mover la IP a la lista negra
* @param req
* @param res
* @param siguiente
*/
var isNeedMovetOblackList = function (req, res, next) {
var ip = req.ip;
// juzga si está en la lista negra
requireNotInblackList (req, res, function () {
var ep = new EventProxy ();
ep.fail (siguiente);
Ep.all ('MinuteCount', 'HourCount', 'Daycount', function (MinuteCount, HourCount, DayCount) {
if (minuteCount> 10) {
BlackListProxy.NeWandSaveOneHourtempForbidden (IP, function (err, BlackList) {
if (err) {
regresar siguiente (err);
}demás{
devolver res.send ('La presentación es demasiado frecuente, vuelva a intentarlo después de 1 hora!');
}
});
} else if (HourCount> 100) {
BlackListProxy.NewandSaveonedaytempForbidden (IP, function (err, BlackList) {
if (err) {
regresar siguiente (err);
}demás{
return res.send ('' Las presentaciones son demasiado frecuentes, ¡intente nuevamente después de 1 día! ');
}
})
} else if (daycount> 1000) {
BlackListProxy.NewandSaveonedaytempForbidden (IP, function (err, BlackList) {
if (err) {
regresar siguiente (err);
}demás{
return res.send ('' Las presentaciones son demasiado frecuentes, ¡intente nuevamente después de 1 día! ');
}
})
}demás{
regresar next ();
}
})
Ipanswerlogproxy.countoneminteanswer (ip, ep.done ('minuteCount'));
Ipanswerlogproxy.countonehouranswer (ip, ep.done ('hourcount'));
Ipanswerlogproxy.countonedayanswer (ip, ep.done ('daycount'));
});
}
/**
* El middleware requiere que IP no esté en la lista negra
* @param req
* @param res
* @param siguiente
*/
var requireNotInBlackList = function (req, res, next) {
var ip = req.ip;
BlackListProxy.ISInblackList (IP, function (err, resultado) {
if (err) {
siguiente (err);
} else if (resultado) {
return res.send ('Su IP tiene prohibido enviar. Si tiene alguna pregunta, comuníquese con [email protected]');
}demás{
próximo();
}
})
}
exports.iseedMovetOblackList = isNeedMoVetOblackList;
Exports.RequirenotInblackList = requireNotInblackList;
Uso en el enrutamiento:
La copia del código es la siguiente:
// interfaz de envío de la página web
router.post ('/create', middleware.iseedMovetOblackList, PaperAnswers.create);