هل أنا مجنون أم لا يوجد أي تحقق من صحة عنوان URL لصورة التوقيع للمدخلات من المستخدم؟
بشكل أساسي، يمكن للمستخدم إدخال أي شيء يريده وسيتم دفعه للمستخدمين الآخرين؟
أيضًا، لماذا حجم قاعدة بيانات عنوان URL للتوقيع مضبوط على 32000؟
لماذا سيحتاج أي شخص إلى 32000 حرف لعنوان URL لصورة؟
مخيف ![]()
لقد قمت بتعديل CSS إلى هذا من أجل ترميز الحد الأقصى للارتفاع والعرض يدويًا؛
.signature-img {
max-width: 600px;
max-height: 100px;
width: auto;
height: auto;
display: block;
margin: 5px 0;
}
لقد غيرت الحد الأقصى لحجم عنوان URL للتوقيع إلى 250 في plugin.rb
register_user_custom_field_type("signature_url", :string, max_length: 250)
register_user_custom_field_type("signature_raw", :string, max_length: 250)
لقد أضفت هذا في أسفل “on(:user_updated) do |user|” في plugin.rb (لن أستخدم الوضع المتقدم)
# التحقق من صحة عنوان 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 من قبل)، فيرجى تصحيحه وإظهار الطريقة الصحيحة للقيام بذلك.