Osama
16 Settembre 2024, 8:15pm
8
Penar Musaraj:
Sarei a mio agio con una pulizia globale dopo un certo periodo di tempo. @osama (dal momento che sei l’autore del commit collegato sopra), pensi che possiamo ripulire tutti questi log dopo un po’ di tempo (e se sì, dopo quanto)? Sembra che dobbiamo conservarne alcuni per rilevare accessi sospetti.
Sì, penso che possiamo ripulire la maggior parte dei log, ma alcuni devono rimanere. Nello specifico, penso che qualsiasi record che abbia suspicious, generate o rotate per azione dovrà essere conservato perché viene utilizzato per rilevare e generare report per accessi sospetti.
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 Mi Piace