Ejemplo n.º 1
0
 public void AppendWord(string word, WordFilterStatus wordFilterStatus, string replaceChar)
 {
     AppendWord(new WordEntity()
     {
         Word = word, WordFilterStatus = wordFilterStatus, Replacement = replaceChar
     });
 }
Ejemplo n.º 2
0
        private bool FilterSensitiveWord(ModelBindingContext bindingContext, string inputText, out string outputText)
        {
            WordFilterStatus status = WordFilterStatus.Banned;

            outputText = WordFilter.SensitiveWordFilter.Filter(inputText, out status);
            if (status == WordFilterStatus.Banned)
            {
                bindingContext.ModelState.AddModelError("SensitiveWord", "内容未通过验证或包含非法词语!");
                return(true);
            }

            return(false);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// 内容过滤
        /// </summary>
        /// <param name="body">待过滤内容</param>
        /// <param name="isBanned">是否禁止提交</param>
        public static string TextFilter(string body, out bool isBanned)
        {
            isBanned = false;
            if (string.IsNullOrEmpty(body))
            {
                return(body);
            }

            string           temBody = body;
            WordFilterStatus staus   = WordFilterStatus.Replace;

            temBody = WordFilter.SensitiveWordFilter.Filter(body, out staus);

            if (staus == WordFilterStatus.Banned)
            {
                isBanned = true;
                return(body);
            }
            body = temBody;
            return(body);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// 使用正则过滤敏感词
        /// </summary>
        /// <param name="source">待处理字符串</param>
        /// <param name="status">字符处理状态</param>
        private string RegexFilter(string source, out WordFilterStatus status)
        {
            string replaceStr = source;

            status = WordFilterStatus.Replace;

            foreach (var word in _regexWords)
            {
                if (Regex.IsMatch(replaceStr, word.Word))
                {
                    if (word.WordFilterStatus == WordFilterStatus.Banned)
                    {
                        status = word.WordFilterStatus;
                        return(source);
                    }
                    replaceStr = Regex.Replace(replaceStr, word.Word, word.Replacement);
                }
            }

            status = WordFilterStatus.Replace;
            return(replaceStr);
        }
Ejemplo n.º 5
0
        /// <summary>
        /// 转换为Message用于数据库存储
        /// </summary>
        public Message AsMessage()
        {
            #region 对内容和标题的相关处理

            WordFilterStatus status  = WordFilterStatus.Replace;
            string           newBody = WordFilter.SensitiveWordFilter.Filter(this.Body, out status);
            newBody = HtmlUtility.CleanHtml(this.Body, TrustedHtmlLevel.Basic);

            #endregion

            Message message = Message.New();
            message.Subject = this.Subject;
            message.Body    = this.Body;

            message.IsRead = false;
            IUser user = UserContext.CurrentUser;
            if (user != null)
            {
                message.Sender       = user.DisplayName;
                message.SenderUserId = user.UserId;
            }
            return(message);
        }
        /// <summary>
        /// 内容过滤
        /// </summary>
        /// <param name="body">待过滤内容</param>
        /// <param name="isBanned">是否禁止提交</param>
        private string TextFilter(string body, out bool isBanned)
        {
            isBanned = false;
            if (string.IsNullOrEmpty(body))
            {
                return(body);
            }

            string           temBody = body;
            WordFilterStatus staus   = WordFilterStatus.Replace;

            temBody = WordFilter.SensitiveWordFilter.Filter(body, out staus);

            if (staus == WordFilterStatus.Banned)
            {
                isBanned = true;
                return(body);
            }

            body = temBody;
            HtmlUtility.CleanHtml(body, TrustedHtmlLevel.Basic);

            return(body);
        }
        public ActionResult _AddSensitiveWord(SensitiveWordEditModel model, WordFilterStatus select)
        {
            if (select.EnumMetadataDisplay() == WordFilterStatus.Banned.EnumMetadataDisplay())
            {
                model.Replacement = "{Banned}";
            }
            if (model.Id == 0 || model.Id == null)
            {
                string[] words = model.Word.Split(new string[] { "\r", "\n" }, StringSplitOptions.RemoveEmptyEntries);

                foreach (var word in words)
                {
                    model.Word = word;

                    int judge = sensitiveWordService.Create(model.AsSensitiveWord());

                    if (judge == -1)
                        return Json(new StatusMessageData(StatusMessageType.Error, "有重名的敏感词!"));
                }
                return Json(new StatusMessageData(StatusMessageType.Success, "添加成功!"));
            }
            else
            {
                int judge = sensitiveWordService.Update(model.AsSensitiveWord());

                if (judge == -1)
                    return Json(new StatusMessageData(StatusMessageType.Error, "敏感词不能同名,编辑失败!"));

                return Json(new StatusMessageData(StatusMessageType.Success, "编辑成功!"));
            }
        }
Ejemplo n.º 8
0
        /// <summary>
        /// 使用正则过滤敏感词
        /// </summary>
        /// <param name="source">待处理字符串</param>
        /// <param name="status">字符处理状态</param>
        private string RegexFilter(string source, out WordFilterStatus status)
        {
            string replaceStr = source;
            status = WordFilterStatus.Replace;

            foreach (var word in _regexWords)
            {
                if (Regex.IsMatch(replaceStr, word.Word))
                {
                    if (word.WordFilterStatus == WordFilterStatus.Banned)
                    {
                        status = word.WordFilterStatus;
                        return source;
                    }
                    replaceStr = Regex.Replace(replaceStr, word.Word, word.Replacement);
                }
            }

            status = WordFilterStatus.Replace;
            return replaceStr;
        }
Ejemplo n.º 9
0
        /// <summary>
        /// 测试字符串是否出现屏蔽字
        /// </summary>
        /// <param name="source">需要处理的字符串</param>
        /// <param name="status">敏感词处理状态</param>
        /// <returns>最终处理方式</returns>
        public string Filter(string source, out WordFilterStatus status)
        {
            status = WordFilterStatus.Replace;

            if (string.IsNullOrEmpty(source)) return source;

            StringBuilder sb = new StringBuilder();

            for (int start = 0; start < source.Length; start++)
            {
                WordGroup wordGroup = _wordTable[FastToLower(source[start])];

                if (wordGroup != null)
                {
                    bool found = false;

                    for (int idx = 0; idx < wordGroup.Count; idx++)
                    {
                        WordEntity we = wordGroup.GetItem(idx);

                        int matchLength = 0;
                        if (we.Word.Length == 0 || CheckString(source, we.Word, start + 1, out matchLength))
                        {
                            if (we.WordFilterStatus == WordFilterStatus.Banned)
                            {
                                status = we.WordFilterStatus;
                                break;
                            }

                            found = true;
                            sb.Append(we.Replacement);
                            start += matchLength;
                        }
                    }

                    if (status == WordFilterStatus.Banned)
                        break;

                    if (!found)
                    {
                        sb.Append(source[start]);
                        found = false;
                    }
                }
                else
                {
                    sb.Append(source[start]);
                }
            }

            if (status == WordFilterStatus.Replace)
            {
                source = sb.ToString();
                source = RegexFilter(source, out status);
            }

            return source;
        }
Ejemplo n.º 10
0
        /// <summary>
        /// 测试字符串是否出现屏蔽字
        /// </summary>
        /// <param name="source">需要处理的字符串</param>
        /// <param name="status">敏感词处理状态</param>
        /// <returns>最终处理方式</returns>
        public string Filter(string source, out WordFilterStatus status)
        {
            status = WordFilterStatus.Replace;

            if (String.IsNullOrEmpty(source))
            {
                return(source);
            }

            StringBuilder sb = new StringBuilder();

            for (int start = 0; start < source.Length; start++)
            {
                WordGroup wordGroup = _wordTable[FastToLower(source[start])];

                if (wordGroup != null)
                {
                    bool found = false;

                    for (int idx = 0; idx < wordGroup.Count; idx++)
                    {
                        WordEntity we = wordGroup.GetItem(idx);

                        int matchLength = 0;
                        if (we.Word.Length == 0 || CheckString(source, we.Word, start + 1, out matchLength))
                        {
                            if (we.WordFilterStatus == WordFilterStatus.Banned)
                            {
                                status = we.WordFilterStatus;
                                break;
                            }

                            found = true;
                            sb.Append(we.Replacement);
                            start += matchLength;
                        }
                    }

                    if (status == WordFilterStatus.Banned)
                    {
                        break;
                    }

                    if (!found)
                    {
                        sb.Append(source[start]);
                        found = false;
                    }
                }
                else
                {
                    sb.Append(source[start]);
                }
            }

            if (status == WordFilterStatus.Replace)
            {
                source = sb.ToString();
                source = RegexFilter(source, out status);
            }

            return(source);
        }
Ejemplo n.º 11
0
        /// <summary>
        /// 测试字符串是否出现屏蔽字
        /// </summary>
        /// <param name="source">需要处理的字符串</param>
        /// <returns>最终处理方式</returns>
        public string Filter(string source)
        {
            WordFilterStatus status = WordFilterStatus.Replace;

            return(Filter(source, out status));
        }
Ejemplo n.º 12
0
 public void AppendWord(string word, WordFilterStatus wordFilterStatus, string replaceChar)
 {
     AppendWord(new WordEntity() { Word = word, WordFilterStatus = wordFilterStatus, Replacement = replaceChar });
 }
Ejemplo n.º 13
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="controllerContext"></param>
        /// <param name="bindingContext"></param>
        /// <returns></returns>
        public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
        {
            var value = base.BindModel(controllerContext, bindingContext);

            if (value == null)
            {
                return(value);
            }
            if (controllerContext.RouteData.Values.ContainsKey(bindingContext.ModelName))
            {
                return(value);
            }

            string[] tempArray = null;

            if (bindingContext.ModelType.FullName.Contains("System.String") && value is Array)
            {
                tempArray = (string[])value;
            }

            //内容过滤
            if ((tempArray != null && tempArray.Length > 0) || value is string && !string.IsNullOrEmpty(value as string))
            {
                if (controllerContext.Controller.ValueProvider.ContainsPrefix(bindingContext.ModelName) || bindingContext.ModelMetadata.ContainerType != null)
                {
                    //处理敏感词
                    WordFilterStatus status = WordFilterStatus.Banned;
                    if (tempArray != null && tempArray.Length > 0)
                    {
                        for (int i = 0; i < tempArray.Length; i++)
                        {
                            tempArray[i] = WordFilter.SensitiveWordFilter.Filter(tempArray[i], out status);
                            if (status == WordFilterStatus.Banned)
                            {
                                bindingContext.ModelState.AddModelError("SensitiveWord", "内容未通过验证或包含非法词语!");
                                break;
                            }
                        }

                        return(tempArray);
                    }

                    string       tempValue    = (value as string).Trim();
                    Type         type         = bindingContext.ModelMetadata.ContainerType;
                    PropertyInfo propertyInfo = null;
                    if (type != null)
                    {
                        propertyInfo = type.GetProperty(bindingContext.ModelName);
                    }

                    var noFilterWordAttribute = propertyInfo != null?Attribute.GetCustomAttribute(propertyInfo, typeof(NoFilterWordAttribute)) as NoFilterWordAttribute : null;

                    if (noFilterWordAttribute == null)
                    {
                        tempValue = WordFilter.SensitiveWordFilter.Filter(tempValue, out status);
                        if (status == WordFilterStatus.Banned)
                        {
                            bindingContext.ModelState.AddModelError("SensitiveWord", "内容未通过验证或包含非法词语!");
                            return(tempValue);
                        }
                    }

                    if (propertyInfo != null)
                    {
                        var dataTypeAttribute = Attribute.GetCustomAttribute(propertyInfo, typeof(DataTypeAttribute)) as DataTypeAttribute;
                        if (dataTypeAttribute != null)
                        {
                            if (dataTypeAttribute.DataType == DataType.MultilineText)
                            {
                                //处理多行纯文本
                                tempValue = Formatter.FormatMultiLinePlainTextForStorage(tempValue, false);
                            }
                            else if (dataTypeAttribute.DataType == DataType.Html)
                            {
                                //处理html标签
                                tempValue = HtmlUtility.CleanHtml(tempValue, TrustedHtmlLevel.HtmlEditor);
                            }
                        }
                    }

                    return(tempValue);
                }
            }

            return(value);
        }