Sono pazzo qui o non c’è alcuna validazione sull’URL dell’immagine della firma dell’input dell’utente?
In pratica, un utente può inserire qualsiasi cosa e verrà inviata ad altri utenti?
Inoltre, perché la dimensione del database dell’URL della firma è impostata su 32_000?
Perché qualcuno avrebbe bisogno di 32.000 caratteri per un URL di un’immagine?
Spettrale ![]()
Ho modificato il css in questo modo per codificare in modo fisso un’altezza e una larghezza massime;
.signature-img {
max-width: 600px;
max-height: 100px;
width: auto;
height: auto;
display: block;
margin: 5px 0;
}
Ho cambiato la dimensione massima dell’URL della firma a 250 in plugin.rb
register_user_custom_field_type("signature_url", :string, max_length: 250)
register_user_custom_field_type("signature_raw", :string, max_length: 250)
Ho aggiunto questo in fondo a “on(:user_updated) do |user|” in plugin.rb (non utilizzerò la modalità avanzata)
# Valida l'URL se non in modalità avanzata
if !SiteSetting.signatures_advanced_mode && user.custom_fields["signature_url"]
url = user.custom_fields["signature_url"]
# Validazione rigorosa: solo HTTPS, solo determinati tipi di file immagine
unless url =~ /\Ahttps:\/\/\[a-zA-Z0-9.\-\/_]+\.(png|jpe?g|gif|webp)(\?[a-zA-Z0-9=\&]+)?\z/
Rails.logger.warn("[discourse-signatures] Rifiutato signature_url non valido per l'utente #{user.id}: #{url.inspect}")
user.custom_fields["signature_url"] = nil
user.save
end
end
Se sto facendo qualcosa di sbagliato qui (non ho mai lavorato con Discourse prima), per favore correggilo e mostrami il modo giusto per farlo.