Html-react-parser: هل يقوم html-React-parser بإخراج XSS؟

تم إنشاؤها على ٨ مارس ٢٠١٩  ·  9تعليقات  ·  مصدر: remarkablemark/html-react-parser

أرغب في استخدام محلل html-reaction-parser لتعقيم وتحليل HTML من نظام إدارة المحتوى الخاص بي. هل يقوم بتعقيم المدخلات من هجمات XSS بشكل فعال؟ https://stackoverflow.com/questions/29044518/safe-alternative-to-dangerouslysetinnerhtml#answer -48261046 يدعي أنه كذلك. إذا كان الأمر كذلك ، أعتقد أنه سيكون من الرائع توثيق / الإعلان عن هذا في مكان ما في README. شكرا لعملك في هذا.

question

التعليق الأكثر فائدة

لم أرغب في استخدام sanitize-html ، لأنه ضخم . لقد استخدمت dompurify بدلاً من ذلك ، فهو أصغر بعشر مرات ، ولا يزيل CSS.

import parse, { domToReact } from 'html-react-parser'
import DOMPurify from 'dompurify'
import React from 'react'

// export function replaceNode() {}

export default function html(html, opts = {}) {
  return parse(DOMPurify.sanitize(html), {
    ...{
      replace: replaceNode,
    },
    ...opts,
  })
}

html('<iframe src=javascript:alert("xss")></iframe>')

ال 9 كومينتر

سؤال عظيم @ ديف ستيفنز نت!

للأسف لم يحدث ذلك. السبب هو أنني اخترت أن أجعل هذه المكتبة مرنة وليست صارمة.

على الرغم من وجود خيار الاستبدال ، إلا أن التحقق من جميع الهجمات المحتملة قد يكون أكثر من اللازم. أوصي بدلاً من ذلك باستخدام مطهر XSS مع SetInnerHTML بشكل خطير .

جيد ان تعلم. شكرا على الاستجابة السريعة.

اهلا بك. إذا كان هذا يجيب على سؤالك @ dave-stevens-net ، فهل يمكن إغلاق المشكلة؟

@ dave-stevens-net ربما أخطأت في وقت سابق حول عدم أمان هذه المكتبة لـ XSS.

اعتقدت في الأصل أن هذه المكتبة ليست آمنة لـ XSS لأنه تم الاعتماد على dangerouslySetInnerHTML هنا .

ومع ذلك ، يبدو أنني غير قادر على إعادة إنتاج أي ثغرات أمنية في XSS. انظر كمانتي ، المبنية على هذا المثال .

اسمحوا لي أن أعرف إذا كان لديك أي حظ في إعادة إنتاج هجمات XSS.

تمكنت من إعادة إنتاج هجوم XSS بسيط. قد يكون هناك المزيد.

تحقق من كماني .

لقد وجدته هنا https://www.in-secure.org/misc/xss/xss.html

انتهى بي الأمر بترميز مكون Sanitize باستخدام تبعية حزمة sanitize-html .

import React from 'react'
import sanitizeHtml from 'sanitize-html'

const Sanitize = ({ html }) => {
    const clean = sanitizeHtml(html, {
        allowedTags: sanitizeHtml.defaults.allowedTags.concat(['img', 'span']),
        allowedAttributes: {
           ...
        },
    })
    return (
        <span
            className="sanitized-html"
            dangerouslySetInnerHTML={{ __html: clean }}
        />
    )
}
export default Sanitize

استخدام المثال:

<Sanitize html={data.wordpressPage.title} />

harveydf العثور على عظيم! شكرا لخلق ومشاركة الكمان.

سأقوم بتحديث README.md للإشارة إلى أن هذه المكتبة ليست آمنة XSS.

لم أرغب في استخدام sanitize-html ، لأنه ضخم . لقد استخدمت dompurify بدلاً من ذلك ، فهو أصغر بعشر مرات ، ولا يزيل CSS.

import parse, { domToReact } from 'html-react-parser'
import DOMPurify from 'dompurify'
import React from 'react'

// export function replaceNode() {}

export default function html(html, opts = {}) {
  return parse(DOMPurify.sanitize(html), {
    ...{
      replace: replaceNode,
    },
    ...opts,
  })
}

html('<iframe src=javascript:alert("xss")></iframe>')

شكرًا لمشاركة أسلوبك باستخدام

لقد قمت بإنشاء عرض Repl.it استنادًا إلى

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات