Suis-je fou ou n’y a-t-il aucune validation sur l’URL de l’image de signature de l’entrée utilisateur du tout ?
En gros, un utilisateur peut entrer n’importe quoi et cela sera poussé à d’autres utilisateurs ?
Aussi, pourquoi la taille de la base de données de l’URL de la signature est-elle définie sur 32 000 ?
Pourquoi quelqu’un aurait-il besoin de 32 000 caractères pour une URL vers une image ?
Effrayant ![]()
J’ai modifié le CSS comme suit afin de coder en dur une hauteur et une largeur maximales ;
.signature-img {
max-width: 600px;
max-height: 100px;
width: auto;
height: auto;
display: block;
margin: 5px 0;
}
J’ai changé la taille maximale de l’URL de signature à 250 dans plugin.rb
register_user_custom_field_type("signature_url", :string, max_length: 250)
register_user_custom_field_type("signature_raw", :string, max_length: 250)
J’ai ajouté ceci en bas de “on(:user_updated) do |user|” dans plugin.rb (je n’utiliserai pas le mode avancé)
# Valider l'URL si pas en mode avancé
if !SiteSetting.signatures_advanced_mode && user.custom_fields["signature_url"]
url = user.custom_fields["signature_url"]
# Validation stricte : uniquement HTTPS, uniquement certains types de fichiers image
unless url =~ /\Ahttps:\/\/\[a-zA-Z0-9.\-\/_]+\.(png|jpe?g|gif|webp)(\?[a-zA-Z0-9=\&]+)?\z/
Rails.logger.warn("[discourse-signatures] Rejeté signature_url invalide pour l'utilisateur #{user.id}: #{url.inspect}")
user.custom_fields["signature_url"] = nil
user.save
end
end
Si je fais quelque chose de mal ici (je n’ai jamais travaillé avec Discourse auparavant), veuillez corriger et me montrer la bonne façon de le faire.