我是在这里疯了,还是用户输入的签名图片 URL 根本没有验证?
基本上,用户可以输入任何他们想要的东西,然后会被推送到其他用户?
另外,为什么 URL 签名数据库大小设置为 32_000?
谁需要 32000 个字符的图片 URL?
太诡异了 ![]()
我修改了 CSS,硬编码了最大高度和宽度;
.signature-img {
max-width: 600px;
max-height: 100px;
width: auto;
height: auto;
display: block;
margin: 5px 0;
}
我在 plugin.rb 中将签名 URL 的最大大小更改为 250
register_user_custom_field_type("signature_url", :string, max_length: 250)
register_user_custom_field_type("signature_raw", :string, max_length: 250)
我将此添加到 plugin.rb 中“on(:user_updated) do |user|”的底部(我不会使用高级模式)
# 如果不在高级模式下,则验证 URL
if !SiteSetting.signatures_advanced_mode && user.custom_fields["signature_url"]
url = user.custom_fields["signature_url"]
# 严格验证:仅限 HTTPS,仅限某些图片文件类型
unless url =~ /\Ahttps:\/\/\[a-zA-Z0-9.\-\/_]+\.(png|jpe?g|gif|webp)(\?[a-zA-Z0-9=&]+)?\z/
Rails.logger.warn("[discourse-signatures] Rejected invalid signature_url for user #{user.id}: #{url.inspect}")
user.custom_fields["signature_url"] = nil
user.save
end
end
如果我在这里做错了什么(以前从未接触过 Discourse),请纠正我并告诉我正确的方法。