Osama
16 Septiembre, 2024 20:15
8
Penar Musaraj:
Estaría de acuerdo con una limpieza global después de un cierto período de tiempo. @osama (ya que eres el autor del commit enlazado arriba), ¿crees que podemos limpiar todos estos registros después de un tiempo (y si es así, después de cuánto tiempo)? Parece que necesitamos conservar algunos de ellos para detectar inicios de sesión sospechosos.
Sí, creo que podemos limpiar la mayoría de los registros, pero algunos deben permanecer. Específicamente, creo que cualquier registro que tenga suspicious, generate o rotate como acción deberá conservarse porque se utilizan para detectar e generar informes de inicios de sesión sospechosos.
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 Me gusta