Esempio n. 1
0
        private bool SanitizeStyleRule(ICssRule rule, IElement styleTag, string baseUrl)
        {
            if (!AllowedAtRules.Contains(rule.Type))
            {
                return(false);
            }

            var styleRule = rule as ICssStyleRule;

            if (styleRule != null)
            {
                SanitizeStyleDeclaration(styleTag, styleRule.Style, baseUrl);
            }
            else
            {
                var groupingRule = rule as ICssGroupingRule;

                if (groupingRule != null)
                {
                    for (int i = 0; i < groupingRule.Rules.Length;)
                    {
                        var childRule = groupingRule.Rules[i];
                        if (!SanitizeStyleRule(childRule, styleTag, baseUrl) && RemoveAtRule(styleTag, childRule))
                        {
                            groupingRule.RemoveAt(i);
                        }
                        else
                        {
                            i++;
                        }
                    }
                }
                else if (rule is ICssPageRule)
                {
                    var pageRule = (ICssPageRule)rule;
                    SanitizeStyleDeclaration(styleTag, pageRule.Style, baseUrl);
                }
                else if (rule is ICssKeyframesRule)
                {
                    var keyFramesRule = (ICssKeyframesRule)rule;
                    foreach (var childRule in keyFramesRule.Rules.OfType <ICssKeyframeRule>().ToList())
                    {
                        if (!SanitizeStyleRule(childRule, styleTag, baseUrl) && RemoveAtRule(styleTag, childRule))
                        {
                            keyFramesRule.Remove(childRule.KeyText);
                        }
                    }
                }
                else if (rule is ICssKeyframeRule)
                {
                    var keyFrameRule = (ICssKeyframeRule)rule;
                    SanitizeStyleDeclaration(styleTag, keyFrameRule.Style, baseUrl);
                }
            }

            return(true);
        }
 public HtmlSanitizer() : base()
 {
     AllowedTags.Clear();
     AllowedTags.Add("p");
     AllowedTags.Add("h2");
     AllowedTags.Add("strong");
     AllowedTags.Add("em");
     AllowedTags.Add("ul");
     AllowedTags.Add("ol");
     AllowedTags.Add("li");
     AllowedTags.Add("a");
     AllowedTags.Add("br");
     AllowedAttributes.Clear();
     AllowedAttributes.Add("href");
     AllowedCssProperties.Clear();
     AllowedAtRules.Clear();
 }
Esempio n. 3
0
        internal Md2HtmlSanitizer()
        {
            AllowedTags.Add(@"meta");
            AllowedTags.Add(@"style");

            AllowedAttributes.Add(@"content");
            AllowedAttributes.Add(@"http-equiv");
            AllowedAttributes.Add(@"id");
            AllowedAttributes.Add(@"class");

            AllowedCssProperties.Add(@"src");
            AllowedCssProperties.Add(@"word-break");
            AllowedCssProperties.Add(@"word-wrap");
            AllowedCssProperties.Add(@"-moz-tab-size");
            AllowedCssProperties.Add(@"-o-tab-size");
            AllowedCssProperties.Add(@"tab-size");
            AllowedCssProperties.Add(@"-webkit-hyphens");
            AllowedCssProperties.Add(@"-moz-hyphens");
            AllowedCssProperties.Add(@"-ms-hyphens");
            AllowedCssProperties.Add(@"hyphens");
            AllowedCssProperties.Add(@"background-position-x");
            AllowedCssProperties.Add(@"background-position-y");
            AllowedCssProperties.Add(@"transition-property");
            AllowedCssProperties.Add(@"transition-duration");
            AllowedCssProperties.Add(@"transition-timing-function");
            AllowedCssProperties.Add(@"transition-delay");
            AllowedCssProperties.Add(@"box-shadow");

            AllowedSchemes.Add(@"file");
            AllowedSchemes.Add(@"data");

            AllowedAtRules.Add(CssRuleType.Media);
            AllowedAtRules.Add(CssRuleType.Keyframe);
            AllowedAtRules.Add(CssRuleType.Keyframes);

            RemovingAtRule    += ChangedEvent;
            RemovingAttribute += ChangedEvent;
            RemovingCssClass  += ChangedEvent;
            RemovingStyle     += ChangedEvent;
            RemovingTag       += ChangedEvent;
        }