화이트리스트에없는 html 태그 및 속성을 제거하는 기능을 만들려고합니다. 내가 tryig 달성하고있는 출력HTML 민첩성 팩 스트립 태그가 화이트리스트에 없음
<b>first text </b>
<b>second text here
some text here
some text here
</b>
some twxt here
입니다
static List<string> WhiteNodeList = new List<string> { "b" };
static List<string> WhiteAttrList = new List<string> { };
static HtmlNode htmlNode;
public static void RemoveNotInWhiteList(out string _output, HtmlNode pNode, List<string> pWhiteList, List<string> attrWhiteList)
{
// remove all attributes not on white list
foreach (var item in pNode.ChildNodes)
{
item.Attributes.Where(u => attrWhiteList.Contains(u.Name) == false).ToList().ForEach(u => RemoveAttribute(u));
}
// remove all html and their innerText and attributes if not on whitelist.
//pNode.ChildNodes.Where(u => pWhiteList.Contains(u.Name) == false).ToList().ForEach(u => u.Remove());
//pNode.ChildNodes.Where(u => pWhiteList.Contains(u.Name) == false).ToList().ForEach(u => u.ParentNode.ReplaceChild(ConvertHtmlToNode(u.InnerHtml),u));
//pNode.ChildNodes.Where(u => pWhiteList.Contains(u.Name) == false).ToList().ForEach(u => u.Remove());
for (int i = 0; i < pNode.ChildNodes.Count; i++)
{
if (!pWhiteList.Contains(pNode.ChildNodes[i].Name))
{
HtmlNode _newNode = ConvertHtmlToNode(pNode.ChildNodes[i].InnerHtml);
pNode.ChildNodes[i].ParentNode.ReplaceChild(_newNode, pNode.ChildNodes[i]);
if (pNode.ChildNodes[i].HasChildNodes && !string.IsNullOrEmpty(pNode.ChildNodes[i].InnerText.Trim().Replace("\r\n", "")))
{
HtmlNode outputNode1 = pNode.ChildNodes[i];
for (int j = 0; j < pNode.ChildNodes[i].ChildNodes.Count; j++)
{
string _childNodeOutput;
RemoveNotInWhiteList(out _childNodeOutput,
pNode.ChildNodes[i], WhiteNodeList, WhiteAttrList);
pNode.ChildNodes[i].ReplaceChild(ConvertHtmlToNode(_childNodeOutput), pNode.ChildNodes[i].ChildNodes[j]);
i++;
}
}
}
}
// Console.WriteLine(pNode.OuterHtml);
_output = pNode.OuterHtml;
}
private static void RemoveAttribute(HtmlAttribute u)
{
u.Value = u.Value.ToLower().Replace("javascript", "");
u.Remove();
}
public static HtmlNode ConvertHtmlToNode(string html)
{
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(html);
if (doc.DocumentNode.ChildNodes.Count == 1)
return doc.DocumentNode.ChildNodes[0];
else return doc.DocumentNode;
}
: 나는 HTML 민첩성 팩과 내가 지금까지 가지고있는 코드이다 사용하고
<b>first text </b>
<b>second text here
<a>some text here</a>
<a>some text here</a>
</b>
<a>some twxt here</a>
: 나는 다음과 같은 HTML을
즉, 나는 단지 <b>
태그를 유지하기를 원합니다.
사용자 중 일부가 MS WORD에서 Ny WYSYWYG html 편집기로 붙여 넣기 때문에이 작업을 수행하는 이유가 있습니다.
감사합니다.
HtmlSanitizer에 대한 링크가 끊어집니다. 이것은 Meltdown이 참조하는 코드 일 수 있습니다. https://gist.github.com/814428 –
이는 Whitelist 유효성 검사 클래스를 작성한 코드가 아닙니다. 원래 저자는 RegEx를 사용하지 않았습니다. 저자의 원래 코드는 제가 게시 한 코드의 첫 번째 코드입니다. –
이 코드는 작동하지 않으며, 유해한 코드가 포함 된 스크립트 섹션뿐만 아니라 제출 단추가있는 폼을 쉽게 저장할 수 있습니다. –