Bin ich verrückt oder gibt es überhaupt keine Validierung der URL des Benutzersignaturbildes?
Im Grunde kann ein Benutzer alles eingeben, und es wird an andere Benutzer weitergeleitet?
Außerdem, warum ist die DB-Größe der URL-Signatur auf 32.000 eingestellt?
Warum sollte jemand 32.000 Zeichen für eine URL zu einem Bild benötigen?
Gruselig ![]()
Ich habe das CSS wie folgt geändert, um eine maximale Höhe und Breite festzulegen:
.signature-img {
max-width: 600px;
max-height: 100px;
width: auto;
height: auto;
display: block;
margin: 5px 0;
}
Ich habe die maximale Größe der Signatur-URL in plugin.rb auf 250 geändert
register_user_custom_field_type("signature_url", :string, max_length: 250)
register_user_custom_field_type("signature_raw", :string, max_length: 250)
Ich habe dies am Ende von “on(:user_updated) do |user|” in plugin.rb hinzugefügt (ich werde den erweiterten Modus nicht verwenden)
# Validieren Sie die URL, wenn nicht im erweiterten Modus
if !SiteSetting.signatures_advanced_mode && user.custom_fields["signature_url"]
url = user.custom_fields["signature_url"]
# Strikte Validierung: nur HTTPS, nur bestimmte Bilddateitypen
unless url =~ /\Ahttps:\/\/\[a-zA-Z0-9.\-\/_]+\.(png|jpe?g|gif|webp)(\?[a-zA-Z0-9=\&]+)?\z/
Rails.logger.warn("[discourse-signatures] Ungültige signature_url für Benutzer #{user.id} abgelehnt: #{url.inspect}")
user.custom_fields["signature_url"] = nil
user.save
end
end
Wenn ich hier etwas falsch mache (habe noch nie mit Discourse gearbeitet), korrigieren Sie es bitte und zeigen Sie mir den richtigen Weg.