草庐IT

javascript - DOM 文本节点是否保证不会被解释为 HTML?

coder 2024-05-16 原文

有谁知道 Text 类型的 DOM Node 是否保证不会被浏览器解释为 HTML?

更多详细信息如下。

背景

我正在为一个 friend 构建一个简单的网络评论系统,我一直在思考 XSS 攻击。我不认为过滤或转义 HTML 标签是一个非常优雅的解决方案——想出一个可以绕过过滤器的卷积太容易了。根本问题是,我想保证,对于某些内容(即随机未经身份验证的网络用户发布的内容),浏览器从不尝试解释或运行该内容。

一个普通的(文本)开始

首先想到的是使用Content-Type: text/plain,但这必须应用于整个页面。您可以将纯文本 IFRAME 放在页面中间,但这很丑陋,并且如果用户点击进入框架,它会产生焦点问题。

innerText/textContent/JQuery

事实证明,有一些特定于浏览器的属性(IE 中的 innerText,FF、Safari 中的 textContent 等)属性在设置时需要创建单个 Text 节点。

JQuery 试图通过实现单个函数 text(val) 来避免特定于浏览器的属性的差异,该函数跳过特定于浏览器的属性并直接转到 document.createTextNode(text ),正如您猜到的那样,它创建了一个 Text 节点。

W3 DOM 文本 节点

所以我认为这接近我想要的,它看起来不错——Text 节点不能有子节点,而且看起来它们不能被解释为 HTML。但我不是 100% 从官方文档中确定。

textContent 中的部分特别令人鼓舞,因为它说“在设置时,也不执行解析,输入字符串被视为纯文本内容。”但这是所有 Text 节点的基础,还是仅设置了 textContent 的节点的基础?这可能看起来像一个愚蠢的狡辩,但它可能很重要,因为 IE 不支持 textContent(见上文)。

回到最初的问题

任何人都可以确认/拒绝这行得通吗?也就是说,兼容 w3 DOM 的浏览器永远不会Text 节点解释为 HTML,无论内容是什么?如果能解决这个令人痛苦的小不确定性,我将非常感激。

感谢您的宝贵时间!

最佳答案

是的,这已得到证实,无论是哪种浏览器,该浏览器都会有 严重 缺陷。呈现除文本以外的任何内容的文本节点将是矛盾的。通过使用 document.createTextNode("some string");并附加该节点,字符串保证呈现为文本。

关于javascript - DOM 文本节点是否保证不会被解释为 HTML?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/476821/

有关javascript - DOM 文本节点是否保证不会被解释为 HTML?的更多相关文章

  1. ruby-on-rails - 如何验证 update_all 是否实际在 Rails 中更新 - 2

    给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru

  2. ruby - 使用 ruby​​ 将 HTML 转换为纯文本并维护结构/格式 - 2

    我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h

  3. ruby - Highline 询问方法不会使用同一行 - 2

    设置:狂欢ruby1.9.2高线(1.6.13)描述:我已经相当习惯在其他一些项目中使用highline,但已经有几个月没有使用它了。现在,在Ruby1.9.2上全新安装时,它似乎不允许在同一行回答提示。所以以前我会看到类似的东西:require"highline/import"ask"Whatisyourfavoritecolor?"并得到:Whatisyourfavoritecolor?|现在我看到类似的东西:Whatisyourfavoritecolor?|竖线(|)符号是我的终端光标。知道为什么会发生这种变化吗? 最佳答案

  4. ruby - 检查数组是否在增加 - 2

    这个问题在这里已经有了答案:Checktoseeifanarrayisalreadysorted?(8个答案)关闭9年前。我只是想知道是否有办法检查数组是否在增加?这是我的解决方案,但我正在寻找更漂亮的方法:n=-1@arr.flatten.each{|e|returnfalseife

  5. ruby-on-rails - Rails HTML 请求渲染 JSON - 2

    在我的Controller中,我通过以下方式在我的index方法中支持HTML和JSON:respond_todo|format|format.htmlformat.json{renderjson:@user}end在浏览器中拉起它时,它会自然地以HTML呈现。但是,当我对/user资源进行内容类型为application/json的curl调用时(因为它是索引方法),我仍然将HTML作为响应。如何获取JSON作为响应?我还需要说明什么? 最佳答案 您应该将.json附加到请求的url,提供的格式在routes.rb的路径中定义。这

  6. ruby-on-rails - 项目升级后 Pow 不会更改 ruby​​ 版本 - 2

    我在我的Rails项目中使用Pow和powifygem。现在我尝试升级我的ruby​​版本(从1.9.3到2.0.0,我使用RVM)当我切换ruby​​版本、安装所有gem依赖项时,我通过运行railss并访问localhost:3000确保该应用程序正常运行以前,我通过使用pow访问http://my_app.dev来浏览我的应用程序。升级后,由于错误Bundler::RubyVersionMismatch:YourRubyversionis1.9.3,butyourGemfilespecified2.0.0,此url不起作用我尝试过的:重新创建pow应用程序重启pow服务器更新战俘

  7. ruby-on-rails - 使用 Sublime Text 3 突出显示 HTML 背景语法中的 ERB? - 2

    所以我在关注Railscast,我注意到在html.erb文件中,ruby代码有一个微弱的背景高亮效果,以区别于其他代码HTML文档。我知道Ryan使用TextMate。我正在使用SublimeText3。我怎样才能达到同样的效果?谢谢! 最佳答案 为SublimeText安装ERB包。假设您安装了SublimeText包管理器*,只需点击cmd+shift+P即可获得命令菜单,然后键入installpackage并选择PackageControl:InstallPackage获取包管理器菜单。在该菜单中,键入ERB并在看到包时选择

  8. ruby - 检查字符串是否包含散列中的任何键并返回它包含的键的值 - 2

    我有一个包含多个键的散列和一个字符串,该字符串不包含散列中的任何键或包含一个键。h={"k1"=>"v1","k2"=>"v2","k3"=>"v3"}s="thisisanexamplestringthatmightoccurwithakeysomewhereinthestringk1(withspecialcharacterslike(^&*$#@!^&&*))"检查s是否包含h中的任何键的最佳方法是什么,如果包含,则返回它包含的键的值?例如,对于上面的h和s的例子,输出应该是v1。编辑:只有字符串是用户定义的。哈希将始终相同。 最佳答案

  9. ruby-on-rails - Ruby 检查日期时间是否为 iso8601 并保存 - 2

    我需要检查DateTime是否采用有效的ISO8601格式。喜欢:#iso8601?我检查了ruby​​是否有特定方法,但没有找到。目前我正在使用date.iso8601==date来检查这个。有什么好的方法吗?编辑解释我的环境,并改变问题的范围。因此,我的项目将使用jsapiFullCalendar,这就是我需要iso8601字符串格式的原因。我想知道更好或正确的方法是什么,以正确的格式将日期保存在数据库中,或者让ActiveRecord完成它们的工作并在我需要时间信息时对其进行操作。 最佳答案 我不太明白你的问题。我假设您想检查

  10. ruby - 检查日期是否在过去 7 天内 - 2

    我的日期格式如下:"%d-%m-%Y"(例如,今天的日期为07-09-2015),我想看看是不是在过去的七天内。谁能推荐一种方法? 最佳答案 你可以这样做:require"date"Date.today-7 关于ruby-检查日期是否在过去7天内,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/32438063/

随机推荐