从 HTML 中过滤 JavaScript

2023-11-21

我有一个富文本编辑器,可以将 HTML 传递到服务器。然后该 HTML 会显示给其他用户。我想确保该 HTML 中没有 JavaScript。有什么办法可以做到这一点吗?

另外,如果有帮助的话,我正在使用 ASP.NET。


唯一的方法是ensure某些 HTML 标记不包含任何 JavaScript 是为了过滤掉所有不安全的 HTML 标记和属性,以防止跨站脚本 (XSS).

但一般来说没有可靠的方法显式删除所有不安全的元素和属性都按其名称,因为某些浏览器可能会解释您在设计时甚至不知道的元素和属性,从而为恶意用户打开安全漏洞。这就是为什么你最好采取白名单方法而不是列入黑名单一。也就是说,只允许你自己的HTML标签sure是安全的,默认情况下会剥离所有其他内容。事实上,只有一个意外允许的标签就会使您的网站容易受到 XSS 攻击。


白名单(好方法)

请参阅这篇文章HTML 清理,其中提供了一些具体示例来说明为什么应该将其列入白名单而不是黑名单。引用该页面的内容:

以下是潜在危险 HTML 标签和属性的不完整列表:

  • script,其中可能包含恶意脚本
  • applet, embed, and object,可以自动下载并执行恶意代码
  • meta,其中可能包含恶意重定向
  • onload, onunload,以及所有其他on*属性,可能包含恶意脚本
  • style, link,以及style属性,可能包含恶意脚本

Here是另一个有用的页面,它建议了一组通常可以安全允许的 HTML 标签和属性以及 CSS 属性,以及推荐的做法。

列入黑名单(通常是不好的方法)

尽管许多网站过去(和目前)都使用黑名单方法,但几乎从来没有真正需要它。 (安全风险总是超过白名单通过授予用户的格式化功能所强制执行的潜在限制。)您需要非常了解它的缺陷。

例如,这一页给出了您可能想要删除的“所有”HTML 标签的列表。只需简单观察一下,您就会发现它包含的元素名称数量非常有限;浏览器很容易包含一个专有标签,无意中允许脚本在您的页面上运行,这本质上是黑名单的主要问题。


最后,我强烈建议您使用HTML DOM 库(比如大家熟知的HTML 敏捷包)对于 .NET,而不是 RegEx 来执行清理/白名单,因为它会更加可靠。 (很可能创建一些非常疯狂的混淆 HTML 来愚弄正则表达式!无论如何,适当的 HTML 阅读器/编写器可以使系统编码变得更加容易。)

希望这能让您大致了解需要设计什么才能完全(或至少最大限度地)防止 XSS,以及在考虑未知因素的情况下执行 HTML 清理的重要性。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 HTML 中过滤 JavaScript 的相关文章

  • 使用 JavaScript 禁用第三方 cookie

    我正在努力根据所有在欧盟运营的公司的数据保护规则实施新的 Cookie 政策合规性 根据该规则 用户在使用任何网站时必须能够拒绝 接受除必需的 Cookie 之外的所有内容 在我客户的网站中 我可以看到正在存储以下第三方 cookie ga
  • 响应式图像 - srcset 和尺寸属性 - 如何正确使用两者:基于设备像素比和基于视口的选择一起?

    到目前为止 我经常读到这个问题 并且它也发生在我自己的项目中 这里介绍一下我到目前为止所发现的关于 srcset 和 size 属性的内容 关于如何使用有两种不同的可能性srcset 属性 来源 w3c http w3c github io
  • 如何格式化 Highcharts 的 (x,y) 对数据的日期时间

    我的序列化方法会产生如下所示的日期时间字符串 2014 07 09T12 30 41Z 为什么下面的代码不起作用 function container highcharts xAxis type datetime series data x
  • 如何在codeigniter中将上传图片比例限制为16:9?

    这是我用来上传图像的代码 this gt load gt library upload ext pathinfo file name PATHINFO EXTENSION img name now ext imgConfig upload
  • 带有淘汰赛js的隐形recaptcha

    我正在完成隐形验证码 但我在实现它时遇到问题 谷歌开发人员页面中的代码显示它应该是这样的
  • 在打字稿中导入 json

    我是 typescript 的新手 在我的项目中 我们使用 typescript2 在我的要求之一中 我需要导入 json 文件 所以我创建了 d ts 文件如下 test d ts declare module json const va
  • React-Redux:state.setIn() 和 state.set() 有什么区别?

    我见过使用setIn and set 在一些react redux代码中 state setIn state set 我在这里找到了一些文档https facebook github io immutable js https facebo
  • 调整图像大小并将画布旋转 90 度

    这里有很多关于在 js 上使用画布旋转图像的主题 我阅读了其中的大部分内容 但无法找到解决我的问题的方法 我正在接收任何分辨率的图像 来自上传组件 我将其大小调整为 1024x768 如下所示 var canvas document cre
  • 如何制作没有 ng-repeat 的模板并使用 Angular-drag-and-drop-lists 将数据传递到 $scope?

    我想用角度拖放列表 https github com marceljuenemann angular drag and drop lists使用我自己的网格模板到所见即所得编辑器 如何构建我自己的 HTML 模板而不需要ng repeat因
  • window.location 和 location.href 之间的区别

    我对之间的区别感到困惑window location and location href 两者似乎都以相同的方式行事 有什么不同 window location是一个对象 它保存有关当前文档位置的所有信息 主机 href 端口 协议等 lo
  • Javascript 假值(null、未定义、false、空字符串:“”或 '' 和 0)和比较(==)运算符 [重复]

    这个问题在这里已经有答案了 当我使用任何一个值时 null undefined false 0 in a if陈述 它总是被评估为谬误 false 另外 这些值的否定 null undefined false 0 in a if语句总是被评
  • 正则表达式 - 从 markdown 字符串中提取所有标题

    我在用灰质 https www npmjs com package gray matter 以便将文件系统中的 MD 文件解析为字符串 解析器产生的结果是这样的字符串 n Clean er ReactJS Code Conditional
  • 日期出现奇怪的错误,“未捕获非法访问”

    所以我试图找到最新的DateJavascript 可以处理 我把它减少到 9 月 275760 并增加了我开始捕获未捕获的天数illegal access例外new Date 09 24 275760 to new Date 10 13 2
  • Three.js 各种大小的粒子

    我是 Three js 的新手 正在尝试找出添加 1000 个粒子的最佳方法 每个粒子都有不同的大小和颜色 每个粒子的纹理是通过绘制画布创建的 通过使用粒子系统 所有粒子都具有相同的颜色和大小 为每个粒子创建一个粒子系统是非常低效的 有没有
  • Vue 和 Vuex:处理依赖的计算属性

    我的应用程序是一个使用 Vuex 在 Vue 中构建的精简电子表格 关键组件是TableCollection Table and Row The TableCollection有一个包含多个的数组Table对象 每个Table有一个包含多个
  • 如何使用 crypto-js 解密 AES ECB

    我正在尝试将加密数据从 flash 客户端 发送到服务器端的 javascript 在 asp 中作为 jscript 运行 有几个 javascript Aes 库 但它们实际上没有文档记录 我正在尝试使用 crypto js 但无法让代
  • Javascript - 水波纹效果

    我需要 JS 上的脚本 它将以 水波纹 样式更改 images html 抱歉 6MB GIF 文件 http fcuunited ru temp listening2 gif http fcunited ru temp listening
  • 带参数的事件监听器

    我想将参数传递给 JavaScript 中的事件侦听器 我已经找到了解决方案 但我无法理解它们为什么或如何工作以及为什么其他解决方案不起作用 我有 C C 背景 但是 Javascript 函数的执行有很大不同 您能否帮助我理解以下示例如何
  • 从 FileReader 设置背景图像样式

    我正在寻找一种解决方案 允许我从文件上传输入中获取文件并通过设置 document body style backgroundImage 来预览它 以下代码用于在 Image 元素中显示预览 function setImage id tar
  • HTML 锚点,禁用样式

    我有一些 html 锚链接代码 与文档的其余部分不同 我希望它看起来不是链接 有没有一种简单的方法可以禁用由于将文本包装在锚标记中而引起的样式更改 而不必强行使其相同 即 如果我更改正文字体样式 我不必也更改其他一些 link东西 将颜色设

随机推荐

  • 卷积神经网络的维度

    我试图了解卷积神经网络中的维度如何表现 下图中 输入是具有 1 个通道的 28 28 矩阵 然后有 32 个 5 5 过滤器 高度和宽度的步长为 2 所以我知道结果是 14 14 32 但在下一个卷积层中 我们有 64 个 5 5 滤波器
  • 错误:exportArchive:找不到“io.ionic.starter”的配置文件

    我正在尝试构建我的 ionic 3 应用程序并在我的设备上部署和实时重新加载 因此我正在尝试以下命令 ionic cordova run ios device prod lcs 但运行该命令后 我收到以下错误 error exportArc
  • 如何通过 FileWriter 设置 BufferedWriter 上的缓冲区大小

    我遇到了一个问题BufferedWriter当我使用一些线程将数据写入单个文件时 我设置了缓冲区大小BufferedWriter 但是无论我设置什么数字 当缓冲区为8192 默认缓冲区大小 时 它会将数据刷新到磁盘 而不是我设置的大小 这里
  • 使用 AXIS2 创建的 ADB 存根在客户端获取原始 XML SOAP 响应

    我使用 AXIS2 创建的 ADB 存根访问 SOAP 服务 我想记录服务返回的任何轴故障的原始 XML 响应 我可以将这些错误捕获为 ServiceError 但是 我没有找到检索原始 XML 的方法 请参见下面的示例 我找到了一种使用
  • Google Api Php 客户端的刷新令牌

    我正在使用 Google API 客户端访问 Google Analytics 我想以离线模式访问数据 所以我需要刷新令牌 如何获取刷新令牌 尝试使用以下代码
  • 多线程比单线程慢

    我有以下代码 控制台应用程序 Program cs 的完整内容 单线程执行 countUp 到 countUp4 需要 13 秒 多线程执行需要 21 秒 我有 Intel Core i5 2400 3 10 GHz 8 GB RAM Wi
  • 在 FastAPI 中从根目录提供静态文件

    我正在尝试让 FastAPI 与 Svelte 一起工作 我已经使用 Svelte 构建了静态文件 现在我尝试通过 FastAPI 提供它们 问题是构建的 Svelte 文件引用了例如global css从根目录 这意味着我不能将它们安装在
  • 在java中通过ref传递枚举

    如何在java中通过引用传递枚举参数 有什么解决办法吗 Java 总是按值传递 您传递引用 而不是对象 引用是按值传递的 您可以更改引用在传入的函数中指向的可变对象的状态 但不能更改引用本身
  • 如何在 Django/Python Web 应用程序中使用 Trac wiki 格式?

    我有一个 Python Web 应用程序 特别是 Django 我正在从 Trac 数据库中读取一些数据 其中的描述使用维基格式 并将其显示为 HTML 我考虑过 markdown 模块 但意识到 Trac wiki 格式和 markdow
  • 在 Symfony2 中异步调用命令

    我想从 Symfony2 的控制器中异步调用命令 到目前为止我找到了以下解决方案 cmd this gt get kernel gt getRootDir console new MLCJobWorkerCommand gt getName
  • 如何给tomcat设置IP地址? [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我有一个 Tomcat 服务器 其中 war文件正在运行 我可以运行 war打字时文件本地主机 8080 在浏览器中 但我必须通过网络访问这个 war 文件 所以我有一个外部IP
  • 使用 matplotlib 显示图像序列

    我有一个简单的 python 脚本 使用 OpenCV 从文件夹加载图像并循环显示它们 我想使用重现这种效果matplotlib import cv2 as cv import os im files for f in os listdir
  • 在tomcat中绑定JNDI数据源?

    是否可以通过编程方式将数据源绑定到 Tomcat 6 JNDI 我想动态创建一个数据源 然后通过 JNDI 使其可用 例如 ColdFusion 这就是我所拥有的 public void bindToConext DataSource da
  • “找不到 Python 可执行文件...” - npm install 挂起

    我正在使用 npm install 下载并编译我编写的小型 Node js 应用程序的所有依赖项 我正在使用的 package json 文件是正确的并且包含所有需要的信息 要安装的软件包之一具有 node gyp 作为依赖项 因此我之前安
  • Spring Boot webjars:无法通过 webjar 加载 javascript 库

    我有一个 Spring Boot 我使用 Thymeleaf 进行模板化 项目 我想在其中使用一些 jQuery 库 不幸的是 webjar 根本没有加载 我尝试了很多配置 但都失败了 这是我的 HTML 页面的代码片段
  • 如何删除 VSTS 中的共享步骤

    我正在尝试以编程方式删除共享步骤 我正在尝试导出 导入 并且正在生成大量步骤 并且希望能够删除它们 而不是手动删除 一次一个 与所有 隐藏 类别工作项类型一样 无法使用删除工作项 API 删除共享步骤 测试用例 测试计划和测试套件都有特殊的
  • 使用 Docker 驱动程序启动 Minikube 并将其绑定到主机网络

    我想知道是否可以将我的 minikube 网络绑定到我的host网络 I tried minikube start memory 10000 cpus 4 vm driver docker kubernetes version v1 19
  • LinkedIn OAuth2 授权服务器遇到意外情况

    对于一些尝试通过移动设备在 Web 视图中链接的 OAuth2 API 进行身份验证的用户 我们遇到了这个奇怪的错误 https www linkedin com uas oauth2 authorization response type
  • 尝试运行 npm install 或yarn 时出现 Zlib 错误

    我刚刚从 GitHub 上的库中提取了一些内容 我正在使用 Windows 计算机在 VSCode 中进行编码 代码没有问题 尽管当我尝试运行 npm install 或yarn install 来获取node modules 和yarn
  • 从 HTML 中过滤 JavaScript

    我有一个富文本编辑器 可以将 HTML 传递到服务器 然后该 HTML 会显示给其他用户 我想确保该 HTML 中没有 JavaScript 有什么办法可以做到这一点吗 另外 如果有帮助的话 我正在使用 ASP NET 唯一的方法是ensu