Javascript GetSafeThmlFragment仍无法按预期工作,无法停止c中的跨站点脚本编写#

Javascript GetSafeThmlFragment仍无法按预期工作,无法停止c中的跨站点脚本编写#,javascript,c#,asp.net,xss,Javascript,C#,Asp.net,Xss,我想要的是,我想要阻止用户输入无效代码,如hialert('1'),或者攻击者可以插入的其他无效字符 因此,我尝试使用以下代码 [HttpPost] [验证输入(错误)] public JsonResult InitiateWFfttx(字符串FSAID、字符串CREATEDBY、字符串MZONECODE、字符串MZONENAME、双COMLEG、双UGLEG、双ARLEG、双MDULEG、int STATUSID、字符串HOTOOFFERDATE、字符串备注、双HOTOOFFERLEG、int

我想要的是,我想要阻止用户输入无效代码,如
hialert('1')
,或者攻击者可以插入的其他无效字符

因此,我尝试使用以下代码

[HttpPost]
[验证输入(错误)]
public JsonResult InitiateWFfttx(字符串FSAID、字符串CREATEDBY、字符串MZONECODE、字符串MZONENAME、双COMLEG、双UGLEG、双ARLEG、双MDULEG、int STATUSID、字符串HOTOOFFERDATE、字符串备注、双HOTOOFFERLEG、int UMSGROUPIDBY、字符串UMSGROUPNAMEBY、int UMSGROUPIDTO、字符串UMSGROUPNAMETO、字符串SPANTYPE)
{
字符串strMessage=“”;
字符串消息=”;
字符串msg=“”;
尝试
{                
字符串stremarks=“”;
stremarks=Sanitizer.GetSafeHtmlFragment(Convert.ToString(REMARK));//这里是通过传递无效字符
如果(stremarks!=“”)
{
CTManagement ObjCTMang=新的CTManagement();
ApplicationLog.Trace(“信息”,“初始化进程”,UMSGROUPNAMEBY,CREATEDBY);
Message=ObjCTMang.InitiateWorkflowfttx(FSAID、CREATEDBY、MZONECODE、MZONENAME、COMLEG、UGLEG、ARLEG、MDULEG、STATUSID、HOTOOFFERDATE、备注、HOTOOFFERLEG、UMSGroupIDY、UMSGROUPNAMEBY、UMSGROUPIDTO、UMSGROUPNAMETO、SPANTYPE);
字符串状态=Message.Split(“|”)[0];
string req_id=Message.Split(“|”)[1];
如果(状态=“成功”)
{
//Jyotir为优化作业创建响应而注释的代码
//SendEmail(CREATEDBY、UMSGROUPIDTO、UMSGROUPNAMETO、UMSGROUPNAMEBY,“新建”、请求id、SPANTYPE、R4GState、MZONECODE、备注、SPANTYPE==“城际”?SPANID:LINKID);
ApplicationLog.Trace(“Info”,“成功生成的请求Id:+req_Id,UMSGROUPNAMEBY,CREATEDBY”);
}
}
其他的
{
Message=“错误|备注中不允许有无效文本”;
}
strMessage=JsonConvert.SerializeObject(消息);
}
捕获(例外情况除外)
{
如果(Message.Length>0)
{
msg=Message.Split(“|”)[1];
}
其他的
{
msg=例如消息;
}
//ErrorLog.HandleErrorLog(由创建的,SPANID,“InitiateWF”,msg);
/*
*错误(字符串日志类型、字符串函数名、字符串消息)
*/
应用程序日志错误(“错误”,“启动WFFTTX”,消息);
}
返回Json(strMessage);
}
请建议如何对其进行编码


stremarks=Sanitizer.GetSafeHtmlFragment(Convert.ToString(备注))这里它绕过了html片段。

下面是消毒剂的工作原理

string REMARK = "hi<script>alert('1')</script>";
string strRemarks = Sanitizer.GetSafeHtmlFragment(Convert.ToString(REMARK));
Console.WriteLine("Sanitizer output:" + strRemarks);

你能举一个输入和输出的例子吗?为什么要将备注字符串转换为字符串?@AthanasiosKataras:输入的示例是
hialert('1')
,它呈现的输出是一些不需要的字符。对于string,这是我的错误,因为它已经是string了。您也可以发布输出吗?它是不是像:
hialert('1')
?你希望它做什么?消毒剂只会去除字符串的脆弱部分,保留其余部分。检查更新的答案。我想我已经知道你想要实现什么了。上面的字符串中没有javascript,所以没有什么需要清理的。锚标签是一个完全有效和安全的钉。不,它将保持原样。它仍然是一个链接。消毒剂的目的是创建安全的html(但html仍然是如此)。因此,锚定标签上不会有任何内容被剥离。
 if (strRemarks.Equals(REMARKS))