Skip to content
KitploitKITPLOIT
أدواتعمليات الاستغلالالمدونة
Log in
إرسال
أدواتعمليات الاستغلالالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

الخلاصاتاتصالالخصوصية© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
bluemonday — bluemonday: منظف HTML سريع بلغة golang (مستوحى من OWASP Java HTML Sanitizer) لتنظيف المحتوى الذي أنشأه المستخدم من XSS | Kitploit
أدوات/GitHubGitHub/microcosm-cc/bluemonday
أدوات دفاعيةالتحليل الثابتتحليل الثغرات الأمنيةتحليل الكودأمن الويبأمن واجهات برمجة التطبيقات
GitHubmicrocosm-cc/bluemonday

bluemonday

bluemonday: منظف HTML سريع بلغة golang (مستوحى من OWASP Java HTML Sanitizer) لتنظيف المحتوى الذي أنشأه المستخدم من XSS

عرض المستودع
3.7k19526منذ سنة واحدةتمت المراجعة من قبل Kitploit

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

bluemonday GoDoc Sourcegraph

bluemonday هو أداة تنقية HTML مطبّقة في Go. إنّها سريعة وقابلة للتكوين بشكل كبير.

تأخذ bluemonday المحتوى الذي ينشئه المستخدم غير الموثوق كمدخل، وتُعيد HTML تم تنقيته وفقًا لقائمة سماح من عناصر وسمات HTML المعتمدة، بحيث يمكنك تضمين المحتوى بأمان في صفحة الويب الخاصة بك.

إذا كنت تقبل محتوى من إنشاء المستخدم وكان خادمك يستخدم Go، فأنت تحتاج إلى bluemonday.

السياسة الافتراضية للمحتوى الذي ينشئه المستخدم (bluemonday.UGCPolicy().Sanitize()) تحوّل هذا:

Hello <STYLE>.XSS{background-image:url("javascript:alert('XSS')");}</STYLE><A CLASS=XSS></A>World

إلى هذا غير الضار:

Hello World

وتحوّل هذا:

<a href="javascript:alert('XSS1')" onmouseover="alert('XSS2')">XSS<a>

إلى هذا:

XSS

بينما تسمح مع ذلك بهذا:

<a href="http://www.google.com/">
  <img src="https://ssl.gstatic.com/accounts/ui/logo_2x.png"/>
</a>

للمرور دون تغيير كبير (أضافت rel="nofollow" وهو أمر جيد للمحتوى الذي ينشئه المستخدم):

<a href="http://www.google.com/" rel="nofollow">
  <img src="https://ssl.gstatic.com/accounts/ui/logo_2x.png"/>
</a>

إنها تحمي المواقع من هجمات XSS. هناك العديد من ناقلات هجوم XSS وأفضل طريقة للتخفيف من المخاطرة هي تنقية إدخال المستخدم مقابل قائمة آمنة معروفة من عناصر وسمات HTML.

يجب عليك دائمًا تشغيل bluemonday بعد أي معالجة أخرى.

إذا كنت تستخدم blackfriday أو Pandoc، فيجب تشغيل bluemonday بعد هذه الخطوات. هذا يضمن عدم إدخال HTML غير آمن لاحقًا في عمليتك.

bluemonday مستوحى بشدة من كل من OWASP Java HTML Sanitizer و HTML Purifier.

ملخص فني

يعتمد على قائمة السماح، تحتاج إما إلى بناء سياسة تصف عناصر وسمات HTML المسموح بها (وأنماط regexp للسمات)، أو استخدام إحدى السياسات المقدمة التي تمثل إعدادات افتراضية جيدة.

يتم تطبيق السياسة التي تحتوي على قائمة السماح باستخدام محلل سريع غير تحقق، وأمامي فقط، قائم على الرموز المميزة مطبق في مكتبة Go net/html من فريق Go الأساسي.

نتوقع تزويدنا بـ HTML منسّق جيدًا (عناصر إغلاق لكل عنصر مفتوح قابل للتطبيق، متداخلة بشكل صحيح) ولذا لا نركز على إصلاح HTML سيئ التداخل أو غير مكتمل. نركز ببساطة على ضمان أن أي عناصر موجودة موصوفة في قائمة السماح للسياسة وأن السمات والروابط آمنة للاستخدام على صفحة الويب الخاصة بك. ينطبق GIGO وإذا قمت بتغذيته بـ HTML سيئ، فليس من مهام bluemonday معرفة كيفية جعله جيدًا مرة أخرى.

هل هي جاهزة للإنتاج؟

نعم

نحن نستخدم bluemonday في الإنتاج بعد أن هاجرنا من أداة OWASP Java HTML Sanitizer المستخدمة على نطاق واسع والمختبرة ميدانيًا بكثافة.

نحن نجتاز مجموعة اختباراتنا الواسعة (بما في ذلك اختبارات AntiSamy بالإضافة إلى اختبارات لأي مشكلات تم رفعها). تحقق من أي مشكلات غير محلولة لترى ما إذا كان هناك أي شيء قد يشكل عائقًا لك.

نرحب بطلبات السحب والمشكلات لمساعدتنا في ضمان تقديم حماية شاملة ضد الهجمات المختلفة عبر المحتوى الذي ينشئه المستخدم.

الاستخدام

قم بالتثبيت باستخدام go get github.com/microcosm-cc/bluemonday

ثم قم باستدعائها:

package main

import (
	"fmt"

	"github.com/microcosm-cc/bluemonday"
)

func main() {
	// افعل هذا مرة واحدة لكل سياسة فريدة، واستخدم السياسة طوال عمر البرنامج
	// إنشاء/تعديل السياسة ليس آمنًا للاستخدام في عدة goroutines
	p := bluemonday.UGCPolicy()

	// يمكن بعد ذلك استخدام السياسة لتنقية الكثير من المدخلات وهي آمنة للاستخدام في عدة goroutines
	html := p.Sanitize(
		`<a onblur="alert(secret)" href="http://www.google.com">Google</a>`,
	)

	// المخرجات:
	// <a href="http://www.google.com" rel="nofollow">Google</a>
	fmt.Println(html)
}

نقدم ثلاث طرق لاستدعاء Sanitize:

p.Sanitize(string) string
p.SanitizeBytes([]byte) []byte
p.SanitizeReader(io.Reader) bytes.Buffer

إذا كنت مهووسًا بالأداء، p.SanitizeReader(r).Bytes() سيعيد []byte دون إجراء أي تحويل غير ضروري للمدخلات أو المخرجات. على الرغم من أن الفرق ضئيل جدًا بحيث لا تحتاج أبدًا إلى الاهتمام.

يمكنك بناء سياساتك الخاصة:

package main

import (
	"fmt"

	"github.com/microcosm-cc/bluemonday"
)

func main() {
	p := bluemonday.NewPolicy()

	// يتطلب أن تكون عناوين URL قابلة للتحليل بواسطة net/url.Parse وإما:
	//   mailto: http:// or https://
	p.AllowStandardURLs()

	// نسمح فقط بـ <p> و <a href="">
	p.AllowAttrs("href").OnElements("a")
	p.AllowElements("p")

	html := p.Sanitize(
		`<a onblur="alert(secret)" href="http://www.google.com">Google</a>`,
	)

	// المخرجات:
	// <a href="http://www.google.com">Google</a>
	fmt.Println(html)
}

نحن نشحن سياستين افتراضيتين:

  1. bluemonday.StrictPolicy() والتي يمكن اعتبارها مكافئة لتجريد جميع عناصر HTML وسماتها حيث لا يوجد شيء في قائمة السماح الخاصة بها. مثال على سيناريو الاستخدام سيكون عناوين منشورات المدونة حيث لا يُتوقع وجود علامات HTML على الإطلاق، وإذا كانت موجودة، فيجب تجريد العناصر ومحتوى العناصر. هذه سياسة صارمة جدًا.
  2. bluemonday.UGCPolicy() والتي تسمح بمجموعة واسعة من عناصر وسمات HTML الآمنة للمحتوى الذي ينشئه المستخدم. لاحظ أن هذه السياسة لا تسمح بـ iframes، object، embed، styles، script، إلخ. مثال على سيناريو الاستخدام سيكون نصوص منشورات المدونة حيث يُتوقع مجموعة متنوعة من التنسيقات إلى جانب احتمالية وجود جداول وصور.

بناء السياسة

جوهر بناء السياسة هو تحديد عناصر وسمات HTML التي تعتبر آمنة لسيناريوهك. توفر OWASP ورقة غش لمنع XSS للمساعدة في شرح المخاطر، ولكن بشكل أساسي:

  1. تجنب أي شيء بخلاف عناصر HTML القياسية
  2. تجنب عناصر script، style، iframe، object، embed، base التي تسمح بتنفيذ الكود من قبل العميل أو تضمين محتوى من طرف ثالث يمكنه تنفيذ كود
  3. تجنب أي شيء بخلاف سمات HTML العادية ذات القيم المطابقة لـ regexp

بشكل أساسي، يجب أن تكون قادرًا على وصف HTML المناسب لسيناريوهك. إذا لم تكن لديك ثقة في قدرتك على وصف سياستك، فيرجى التفكير في استخدام إحدى السياسات المشحونة مثل bluemonday.UGCPolicy().

لإنشاء سياسة جديدة:

p := bluemonday.NewPolicy()

لإضافة عناصر إلى سياسة إما بإضافة العناصر فقط:

p.AllowElements("b", "strong")

أو باستخدام regex:

ملاحظة: إذا تم إضافة عنصر بالاسم كما هو موضح أعلاه، فسيتم تجاهل أي regex مطابق

يوصى أيضًا بضمان عدم تداخل أنماط متعددة حيث أن ترتيب التنفيذ غير مضمون ويمكن أن يؤدي إلى تفويت بعض القواعد.

p.AllowElementsMatching(regex.MustCompile(`^my-element-`))

أو إضافة عناصر كفضيلة لإضافة سمة:

// لاحظ النمط الموصى به، انظر التوصية باستخدام .Matching() أدناه
p.AllowAttrs("nowrap").OnElements("td", "th")

مرة أخرى، هذا يدعم أيضًا بديل مطابقة نمط regex:

p.AllowAttrs("nowrap").OnElementsMatching(regex.MustCompile(`^my-element-`))

يمكن إضافة السمات إما إلى جميع العناصر:

p.AllowAttrs("dir").Matching(regexp.MustCompile("(?i)rtl|ltr")).Globally()

أو يمكن إضافة السمات إلى عناصر محددة:

// ليس النمط الموصى به، انظر التوصية باستخدام .Matching() أدناه
p.AllowAttrs("value").OnElements("li")

يوصى دائمًا بأن يتم مطابقة السمة مع نمط. XSS في سمات HTML سهل جدًا بخلاف ذلك:

// \p{L} يطابق الحروف اليونيكود، \p{N} يطابق الأرقام اليونيكود
p.AllowAttrs("title").Matching(regexp.MustCompile(`[\p{L}\p{N}\s\-_',:\[\]!\./\\\(\)&]*`)).Globally()

يمكنك التوقف في أي وقت واستدعاء .Sanitize():

// string htmlIn تم إدخاله من HTTP POST
htmlOut := p.Sanitize(htmlIn)

ويمكنك أخذ أي سياسة موجودة وتوسيعها:

p := bluemonday.UGCPolicy()
p.AllowElements("fieldset", "select", "option")

CSS المضمنة

تنزيل الأداة