Estou louco aqui ou não há validação nenhuma na URL da imagem da assinatura da entrada do usuário?
Basicamente, um usuário pode inserir o que quiser e isso será enviado para outros usuários?
Além disso, por que o tamanho do banco de dados da URL da assinatura está definido como 32.000?
Por que alguém precisaria de 32.000 caracteres para uma URL de imagem?
Assustador ![]()
Modifiquei o CSS para o seguinte, a fim de codificar permanentemente uma altura e largura máximas;
.signature-img {
max-width: 600px;
max-height: 100px;
width: auto;
height: auto;
display: block;
margin: 5px 0;
}
Mudei o tamanho máximo da URL da assinatura para 250 em plugin.rb
register_user_custom_field_type("signature_url", :string, max_length: 250)
register_user_custom_field_type("signature_raw", :string, max_length: 250)
Adicionei isto ao final de “on(:user_updated) do |user|” em plugin.rb (não usarei o modo avançado)
# Valida a URL se não estiver no modo avançado
if !SiteSetting.signatures_advanced_mode && user.custom_fields["signature_url"]
url = user.custom_fields["signature_url"]
# Validação rigorosa: apenas HTTPS, apenas certos tipos de arquivo de imagem
unless url =~ /\Ahttps:\/\/a-zA-Z0-9.\-\/_]+\.(png|jpe?g|gif|webp)(\?[a-zA-Z0-9=\&]+)?\z/
Rails.logger.warn("[discourse-signatures] Rejeitada signature_url inválida para o usuário #{user.id}: #{url.inspect}")
user.custom_fields["signature_url"] = nil
user.save
end
end
Se estou fazendo algo errado aqui (nunca trabalhei com Discourse antes), por favor, corrija e me mostre a maneira certa de fazer isso.