介绍

要输出 Raw HTML 最好是先消毒一下. 使用 Library 就可以了.

参考

Github – mganss / HtmlSanitizer

安装 nuget

dotnet add package HtmlSanitizer

调用

public static void Main()
{
var sanitizer = new HtmlSanitizer();
sanitizer.AllowedSchemes.Add("tel");
var rawHtml = @"<a href=""tel:+60167737062"">Call Me</a>";
var result = sanitizer.Sanitize(rawHtml);
Console.WriteLine(result);
}

实例化, 然后调用 Sanitize 方法就可以了. 它会消除许多东西, 包括 tel.

所以有许多 by pass 和 whitelist 的方式. 我目前只用到上面这一个. 以后有再来补上.

Razor HTML Encode

顺便聊一下 Razor 的 HTML Encode

<h2 data-key="@("\"Hello\"")">@("\"Hello\"")</h2>

上面这句会变成下面这个

attribute 的部分对 quote 做了 encode,innerHTML 的部分则没有 encode

再来一个

<h2 data-key="@("<Hello>")">@("<Hello>")</h2>

变成

相反,attribute 没有 encode,innerHTML 则 encode 了。

WebUtility.HtmlEncode

C# 有 build-in 的 encode 方法。

var v1 = WebUtility.HtmlEncode("<Hello>"); // &lt;Hello&gt;
var v2 = WebUtility.HtmlEncode("\"Hello\""); // &quot;Hello&quot;

quote 和 < 都会被 encode。

HTML Behaviour

for pure html,即使我们在 attribute 写上 encode 的代码,最终也会自动被 decode 掉哦

<h1 data-key="&lt;Hello&gt">Home page</h1>
<h1 data-key="<Hello>">Home page</h1>

最终出现

所以我们可以使用 WebUtility.HtmlEncode 在 attribute value 或 innerHTML 不用去区别它们。

ASP.NET Core Library – HtmlSanitizer的更多相关文章

  1. 《ASP.NET Core 高性能系列》致敬伟大的.NET斗士甲骨文!

    写在开始 三年前,曾写过一篇文章:从.NET和Java之争谈IT这个行业,当时遭到某些自认为懂得java就了不起的Javaer抨击, 现在可以致敬伟大的.NET斗士甲骨文了 (JDK8以上都需要收费, ...

  2. ASP.NET CORE MVC 2.0 项目中引用第三方DLL报错的解决办法 - InvalidOperationException: Cannot find compilation library location for package

    目前在学习ASP.NET CORE MVC中,今天看到微软在ASP.NET CORE MVC 2.0中又恢复了允许开发人员引用第三方DLL程序集的功能,感到甚是高兴!于是我急忙写了个Demo想试试,我 ...

  3. 基于 ASP.NET Core 2.1 的 Razor Class Library 实现自定义错误页面的公用类库

    注意:文中使用的是 razor pages ,建议使用 razor views ,使用 razor pages 有一个小坑,razor pages 会用到 {page} 路由参数,如果应用中也用到了这 ...

  4. ASP.NET Core and .NET Core Library Support

    ASP.NET Core and .NET Core Library Support 详情参见:https://github.com/linezero/NETCoreLibrary/blob/mast ...

  5. ASP.NET Core 1.0 开发记录

    官方资料: https://github.com/dotnet/core https://docs.microsoft.com/en-us/aspnet/core https://docs.micro ...

  6. ASP.NET Core: You must add a reference to assembly mscorlib, version=4.0.0.0

    ASP.NET Core 引用外部程序包的时候,有时会出现下面的错误: The type 'Object' is defined in an assembly that is not referenc ...

  7. ASP.NET Core中的依赖注入(1):控制反转(IoC)

    ASP.NET Core在启动以及后续针对每个请求的处理过程中的各个环节都需要相应的组件提供相应的服务,为了方便对这些组件进行定制,ASP.NET通过定义接口的方式对它们进行了"标准化&qu ...

  8. ASP.NET Core 1.0中实现文件上传的两种方式(提交表单和采用AJAX)

    Bipin Joshi (http://www.binaryintellect.net/articles/f1cee257-378a-42c1-9f2f-075a3aed1d98.aspx) Uplo ...

  9. Asp.Net Core 项目实战之权限管理系统(3) 通过EntityFramework Core使用PostgreSQL

    0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...

  10. 来份ASP.NET Core尝尝

    0x01.前言 学习ASP.NET Core也有一段时间了,虽说很多内容知识点还是处于一知半解的状态,但是基本的,还是 略懂一二.如果有错误,还望见谅. 本文还是和之前一样,Demo+在Linux下运 ...

随机推荐

  1. C++如何在main函数开始之前(或结束之后)执行一段逻辑?

    1. 问题 2. 考察的要点 3. 解决策略 3.1. 方案一:使用GCC的拓展功能 3.2. 方案二:使用全局变量 3.3. 方案三:atexit 4. Demo测试 4.1. 测试代码 4.2. ...

  2. GUI随笔

    ####GUI是一个很大的话题,从Win32(windows基础API编程)到MFC,QT再到DuiLib,WPF,Winform再到Html这是一个很漫长的路,下面是我对这个界面库的见解 就对我而言 ...

  3. Superviso可视化监控进程

    如果您需要同时运行多个 ThinkPHP 命令,可以在 Supervisor 中为每个命令创建一个单独的程序段.以下是示例配置,其中包含两个 ThinkPHP 命令:command1.php 和 co ...

  4. ChatGPT的作用(附示例)

    ChatGPT介绍(内容由ChatGPT生成) ChatGPT是一款基于GPT(生成式预测网络)的聊天机器人,它可以根据用户输入自动生成相应的回复. GPT是由OpenAI开发的一种预测网络模型,其中 ...

  5. [HTTP] HTTP 协议 Response Header 之 Content-Length、Transfer-Encoding与Content-Encoding

    0 引言 在近期项目一场景中,一 Web API (响应内容:7MB - 40MB.数据项:5W-20W条)的网络传输耗时较大,短则 5s,长则高达25s,前端渲染又需要耗时 9s-60s. 在这个场 ...

  6. ViT:拉开Trasnformer在图像领域正式挑战CNN的序幕 | ICLR 2021 —— An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale

    论文地址: https://arxiv.org/abs/2010.11929 Github地址: https://github.com/google-research/vision_transform ...

  7. conda环境下Python报错:raise MissingCUDAException("CUDA_HOME does not exist, unable to compile CUDA op(s)") CUDA_HOME does not exist, unable to compile CUDA op(s)

    conda环境下Python报错: (pytorch) devil@Monster:~$ pip install deepspeed Collecting deepspeed Using cached ...

  8. 横扫鸿蒙弹窗乱象,SmartDialog出世

    前言 但凡用过鸿蒙原生弹窗的小伙伴,就能体会到它们是有多么的难用和奇葩,什么AlertDialog,CustomDialog,SubWindow,bindXxx,只要大家用心去体验,就能发现他们有很多 ...

  9. Linux/Go环境搭建, HelloWorld运行

    package main import "fmt" func main() { fmt.Printf("Hello,World!!!\n") } 以上是Go语言 ...

  10. MPTCP(四):mptcpd编译及安装

    mptcpd编译及安装 简介 mptcpd可以在应用层执行mptcp多路径管理的相关操作 可以在普通的TCP连接基础上应用MPTCP协议,我描述得不准确,请参考下面得链接自行理解 https://mp ...