ユーザー入力の署名画像URLには全くバリデーションがないのでしょうか?
基本的に、ユーザーは何でも入力でき、それが他のユーザーにプッシュされるということですか?
また、URL署名のDBサイズが32,000に設定されているのはなぜですか?
画像へのURLに32,000文字も必要とする人がいるでしょうか?
不気味ですね ![]()
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] ユーザー #{user.id} の無効なsignature_urlを拒否しました: #{url.inspect}")
user.custom_fields["signature_url"] = nil
user.save
end
end
もし私が何か間違っていること(Discourseでの作業は初めてです)があれば、修正して正しい方法を教えてください。