Osama
16. September 2024 um 20:15
8
Penar Musaraj:
Ich wäre mit einer globalen Bereinigung nach einer bestimmten Zeitspanne einverstanden. @osama (da Sie der Autor des oben verlinkten Commits sind), glauben Sie, dass wir all diese Protokolle nach einiger Zeit bereinigen können (und wenn ja, nach wie langer Zeit)? Es scheint, dass wir einige davon aufbewahren müssen, um verdächtige Anmeldungen zu erkennen.
Ja, ich denke, wir können die meisten Protokolle bereinigen, aber einige müssen bleiben. Insbesondere denke ich, dass alle Einträge, die suspicious, generate oder rotate für die Aktion haben, aufbewahrt werden müssen, da sie zur Erkennung und Erstellung von Berichten für verdächtige Anmeldungen verwendet werden.
title: I18n.t("reports.suspicious_logins.labels.login_time"),
},
]
report.data = []
sql = <<~SQL
SELECT u.id user_id, u.username, u.uploaded_avatar_id, t.client_ip, t.user_agent, t.created_at login_time
FROM user_auth_token_logs t
JOIN users u ON u.id = t.user_id
WHERE t.action = 'suspicious'
AND t.created_at >= :start_date
AND t.created_at <= :end_date
ORDER BY t.created_at DESC
SQL
DB
.query(sql, start_date: report.start_date, end_date: report.end_date)
.each do |row|
data = {}
Math.sin((lat2_rad - lat1_rad) / 2)**2 +
Math.cos(lat1_rad) * Math.cos(lat2_rad) * Math.sin((lon2_rad - lon1_rad) / 2)**2
c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a))
c * EARTH_RADIUS_KM
end
def self.is_suspicious(user_id, user_ip)
return false unless User.find_by(id: user_id)&.staff?
ips = UserAuthTokenLog.where(user_id: user_id).pluck(:client_ip)
ips.delete_at(ips.index(user_ip) || ips.length) # delete one occurrence (current)
ips.uniq!
return false if ips.empty? # first login is never suspicious
if user_location = login_location(user_ip)
ips.none? do |ip|
if location = login_location(ip)
distance(user_location, location) < SiteSetting.max_suspicious_distance_km
end
end
3 „Gefällt mir“