Blacklist -Schema:
Die Codekopie lautet wie folgt:
/**
* Erstellt von YCXJ-Wanglihui am 2014/5/28.
*/
"Strikte";
var mongoose = erfordern ('mongoose');
var schema = mongoose.schema;
// 1. Kurzfristige Blockierung 2. Permanente Blockierung
var Grad = {temp: 1, für immer: 2};
/**
* Blacklist
* @type {schema}
*
* @param ip {String} Blacklist IP
* @param createat {Date} Erstellungszeit
* @Param -Ablauf {Datum} Wenn es sich um eine kurze Blockierung handelt, blockieren Sie die Ablaufzeit
* @Param ForbidDendegree {Nummer} Blockierung der Stufe 1. Kurzfristige Blockierung 2. Permanente Blockierung
* @Param Reason {String} Blockierungsgrund
*/
var Blacklist = neues Schema ({{
IP: {
Typ: String,
Index: Richtig
},
createat: {
Typ: Datum,
Standard: Datum.Now
},
Ablaufzeit: {{
Typ: Datum
},
Forbiddendegree: {
Typ: Nummer,
Standard: Grad.Temp
},
Grund:{
Typ: String,
Standard: "Häufige Anfragen"
}
});
mongoose.model ('Blacklist', Blacklist);
IP- und Einreichungsdatensatzschema:
Die Codekopie lautet wie folgt:
/**
* Erstellt von YCXJ-Wanglihui am 2014/5/28.
*/
"Strikte";
var mongoose = erfordern ('mongoose');
var schema = mongoose.schema;
var objectId = schema.objectId;
/**
* Reaktionen und IP der Teilnahme am Fragebogen aufzeichnen
* @type {schema}
*
* @param beantwortetid {objectId} Antwort -ID
* @param createat {Date} Erstellungszeit
* @param IP {String} Personen, die an der Antwort -IP teilgenommen haben
*/
var ipanswerlog = neues Schema ({{
Antwort: {
Typ: ObjectID
},
createat: {
Typ: Datum,
Standard: Datum.Now
},
IP: {
Typ: String,
Index: Richtig
}
});
mongoose.model ('ipanswerlog', ipanswerlog);
Verwandter Proxycode:
Die Codekopie lautet wie folgt:
/**
* Erstellt von YCXJ-Wanglihui am 2014/5/28.
*/
"Strikte";
var ipanswerlog = required ('../ models'). ipanswerlog;
/**
* Erstellen und speichern
* @param ipanswerlog {schema oder dict}
* @Param Callback
*/
var newsave = function (ipanswerlog, callback) {
if (ipanswerlog instanceof ipanswerlog) {
ipanswerlog.save (Rückruf);
}anders{
var m = new ipanswerlog (ipanswerlog);
M.Save (Rückruf);
}
}
/**
* Anzahl der Antworten innerhalb einer Minute
* @param ip
* @Param Callback
*/
var caffoneminuteanswer = function (IP, Rückruf) {
var endime = date.now ();
var begintime = endzeit - 1000*60*1;
countipanswerbytime (Begintime, Endzeit, IP, Callback);
}
/**
* Antworten Sie auf Zahlen innerhalb einer Stunde
* @param ip
* @Param Callback
*/
var circingsOneHouranswer = function (IP, Rückruf) {
var endime = date.now ();
var Begintime = Endime - 1000*60*60*1;
countipanswerbytime (Begintime, Endzeit, IP, Callback);
}
/**
* Antworten Sie innerhalb eines Tages
* @param ip
* @Param Callback
*/
var cirpedayanswer = function (IP, Rückruf) {
var endime = date.now ();
var Begintime = Endime - 1000*60*60*24;
countipanswerbytime (Begintime, Endzeit, IP, Callback);
}
/**
* Berechnen Sie die Anzahl der Antworten in einem bestimmten Zeitraum
* @Param Begintime {Nummer} Startzeitstempel für Startzeit
* @param endzeit {number} Endzeit Wenn NULL das aktuelle Zeitstempel verwenden
* @param IP {String} IP -Adresse
* @Param Callback
*/
var countipanswerbytime = function (Begintime, Endzeit, IP, Rückruf) {
if (! endzeit) {
EndTime = Datum.Now ();
}
Ipanswerlog.count ({ip: ip, '$ und': {$ lt: BeginTime, $ gt: endzeit}}, callback);
}
exports.countipanswerbytime = countipanswerbytime;
Exports.Countonedayanswer = Countonedayanswer;
Exports.CountOneHouranswer = GrafOneHouranswer;
Exports.CountoneminUTeanswer = unalconeminuteanswer;
exports.newandsave = newAndsave;
Blacklist Proxy:
Die Codekopie lautet wie folgt:
/**
* Erstellt von YCXJ-Wanglihui am 2014/5/28.
*/
"Strikte";
var BlackList = Request ('../ Models'). Blacklist;
/**
* Erstellen und speichern
* @param Backlist {Blacklist} oder {dict} Blacklist -Daten
* @Param Callback
*/
var newsave = function (backlist, callback) {
if (Backlist -Instanz von Blacklist) {
Backlist.Save (Callback);
}anders{
var m = new Blacklist (Backlist);
M.Save (Rückruf);
}
}
/**
* Deaktivieren Sie den IP -Zugriff für eine Stunde
* @param ip {string}
* @Param Callback
*/
var newsaveOneHourtempforbidden = Funktion (IP, Rückruf) {
var expiretime = date.now () + 1000*60*60;
newandsavetempforbidden (IP, Verfallszeit, Rückruf);
}
/**
* Deaktivieren Sie für einen Tag
* @param ip {string}
* @Param Callback
*/
var newsaveonedaytempforbidden = function (IP, Rückruf) {
var expiretime = date.now () + 1000*60*60*24;
newandsavetempforbidden (IP, Verfallszeit, Rückruf);
}
/**
* Erstellen Sie eine temporäre schwarze Liste
* @param ip {string}
* @Param -Ablaufzeit {Nummer} Ablaufzeit
* @Param Callback
*/
var newsavetempforbidden = Funktion (IP, Verfallszeit, Rückruf) {
var BlackList = new BlackList ({IP: IP, Verfallszeit: Verfallszeit, ForbidDendegree: 1});
NewAndsave (Blacklist, Callback);
}
/**
* Erstellen und speichern Sie eine dauerhafte schwarze Liste
* @param ip
* @Param Callback
*/
var newsaveforeverforbidden = function (IP, Rückruf) {
var BlackList = new BlackList ({IP: IP, ForbidDendEgree: 2});
NewAndsave (Blacklist, Callback);
}
/**
* Bestimmen Sie, ob es sich auf der schwarzen Liste befindet
* @param IP {String} IP -Adresse
* @Param Callback
*/
var isinblacklist = function (IP, Rückruf) {
GetBlackListByIP (IP, Funktion (Err, Blacklist) {
if (err) {
Rückruf (arr);
} else if (Blacklist) {
var CurrentDate = Datum.Now ();
if (BlackList.forbidDendegree === 1 && Blacklist.expiretime> currentDate) {
REMEBLACKLISTBYIP (IP, Funktion (err) {
if (err) {
Rückruf (arr);
}anders{
Rückruf (NULL, FALSE);
}
})
}anders{
Rückruf (NULL, TRUE);
}
}anders{
Rückruf (NULL, FALSE);
}
})
}
/**
* Holen Sie sich die Blacklist -Eintrag über IP
* @param ip
* @Param Callback
*/
var getBlackListByIp = Funktion (IP, Rückruf) {
BlackList.Findone ({IP: IP}, Callback);
}
/**
* Löschen Sie die schwarze Liste entsprechend IP
* @param ip
* @Param Callback
*/
var removeBlackListByIp = Funktion (IP, Rückruf) {
GetBlackListByIP (IP, Funktion (Err, Blacklist) {
if (err) {
Rückruf (arr);
} else if (Blacklist) {
BlackList.Remove (Callback);
}anders{
Rückruf (NULL, NULL);
}
})
}
exports.newandsave = newAndsave;
exports.issinblacklist = isinblacklist;
Exporte.GetBlackListByIP = getBlackListByIP;
exports.removeblacklistByIp = removeBlackListByIP;
exports.newandsaveOneHourTempforbidden = newsaveOneHourtempforbidden;
exports.newandsaveonedaytempforbidden = newsaveonedaytempforbidden;
exports.Newandsaveforverbidden = newsaveforeverbidden;
exports.newandsavetempforbidden = newandsavetempforbidden;
Middleware Details:
Die Codekopie lautet wie folgt:
/**
* Erstellt von YCXJ-Wanglihui am 2014/5/28.
*/
"Strikte";
var BlackListProxy = Request ('../../ Proxy'). BlackListPorxy;
var ipanswerlogproxy = required ('../../ proxy'). ipanswerLogproxy;
var eventProxy = Request ('eventProxy');
/**
* Stellen Sie fest, ob ich die IP auf die schwarze Liste verschieben muss
* @param req
* @param res
* @param als nächstes
*/
var isNeedMovetoBlacklist = Funktion (req, res, next) {
var ip = req.ip;
// Beurteile, ob es auf der schwarzen Liste liegt
fordersotinblacklist (req, res, function () {
var ep = new eventProxy ();
ep.fail (als nächstes);
EP.All ('MinuteCount', 'Hourcount', 'Daycount', Funktion (MinuteCount, HourCount, DayCount) {
if (minuteCount> 10) {
BlackListProxy.NewandsaveOneHourtempforbidden (IP, Funktion (Err, Blacklist) {
if (err) {
Weitere zurückgeben (arr);
}anders{
Return Res.Send ('Einreichung ist zu häufig, versuchen Sie es nach 1 Stunde erneut!');
}
});
} else if (HourCount> 100) {
BlackListProxy.NewandsaveOnedayTempforbidden (IP, Funktion (Err, Blacklist) {
if (err) {
Weitere zurückgeben (arr);
}anders{
return res.send ('Einreichungen sind zu häufig, versuchen Sie es nach 1 Tag erneut!');
}
})
} else if (DayCount> 1000) {
BlackListProxy.NewandsaveOnedayTempforbidden (IP, Funktion (Err, Blacklist) {
if (err) {
Weitere zurückgeben (arr);
}anders{
return res.send ('Einreichungen sind zu häufig, versuchen Sie es nach 1 Tag erneut!');
}
})
}anders{
kehre als nächstes zurück ();
}
})
IpanswerLogproxy.CountoneminuteanSwer (IP, EP.Done ('minuteCount');
IpanswerLogproxy.countOneHouranswer (IP, ep.done ('HourCount'));
Ipanswerlogproxy.Countonedayanswer (IP, ep.done ('DayCount'));
});
}
/**
* Middleware erfordert, dass IP nicht auf der schwarzen Liste steht
* @param req
* @param res
* @param als nächstes
*/
var forderotinblacklist = Funktion (req, res, next) {
var ip = req.ip;
BlackListProxy.issinblacklist (IP, Funktion (Err, Ergebnis) {
if (err) {
Weiter (arr);
} else if (result) {
return res.send ('Ihre IP ist untersagt, einzureichen. Wenn Sie Fragen haben, wenden Sie sich bitte an [email protected]');
}anders{
nächste();
}
})
}
exports.isNeedMovetoBlacklist = isNeedMovetoBlacklist;
Exports.RequirenotinBlackList = forderotinBlackList;
Verwendung im Routing:
Die Codekopie lautet wie folgt:
// Webseiteneinstellungsschnittstelle
Router.post ('/create', Middleware.isNeedMovetoBlacklist, Paperanswers.create);