对于setHTML()方法,如果我们不使用Safehtml,但验证字符串&;只接受一些有限的html标记(Gwt)?
任何具有setHTML方法的小部件都可能在安全系统中造成漏洞,但如果我们验证字符串&只接受一些有限的html标记,例如对于setHTML()方法,如果我们不使用Safehtml,但验证字符串&;只接受一些有限的html标记(Gwt)?,html,gwt,Html,Gwt,任何具有setHTML方法的小部件都可能在安全系统中造成漏洞,但如果我们验证字符串&只接受一些有限的html标记,例如,…。然后我们将这个字符串放入setHTML方法中 那么我的问题是“如果我们这样做,它仍然安全吗?” 例如,我们检查字符串文本以确保它只包含一些有限的html标记,..。如果字符串文本包含其他标记,则不允许使用来输入该文本。然后我们使用: html1.setHTML(文本)而不是html1.setHTML(safehtmlitls.fromString(text)) 我不知道为什
,…
。然后我们将这个字符串放入setHTML方法中
那么我的问题是“如果我们这样做,它仍然安全吗?”
例如,我们检查字符串文本以确保它只包含一些有限的html标记,..
。如果字符串文本包含其他标记,则不允许使用来输入该文本。然后我们使用:
html1.setHTML(文本)
而不是html1.setHTML(safehtmlitls.fromString(text))
我不知道为什么html1.setHTML(safehtmlitls.fromString(text))
不生成格式化文本,在eclipse中运行时只显示纯文本?比如说
html1.setHTML(SafeHtmlUtils.fromString("<b>text</b>"))
html1.setHTML(safehtmlitls.fromString(“文本”))
将使用纯文本结果text
而不是正确html格式的粗体文本“text”您希望清理html,而不是转义它。fromString
方法用于转义字符串-如果用户输入a
,但忘记了空格,然后添加>c
,则不希望c为粗体,b完全缺失。转义是为了实际呈现给定的字符串,假设它是文本
在整个范围的另一端,您可以使用fromTrustedString
,它告诉GWT您绝对信任数据源,并且您将允许它做任何事情。通常不应对来自用户的任何数据执行此操作
在整个过程的另一端,我们有一个卫生设施,在这个过程中,您获取一个表示为HTML的字符串,并确保它是安全的,而不是将其视为文本,或者隐式地信任它。这很难做好-任何具有style
属性的标记都有可能攻击您(这就是为什么GWT像SafeHtml
一样具有SafeStyle
,任何具有uri、url或href的标记都可以被用来攻击(因此SafeUri
),并且浏览器视为回调的任何属性(如onclick
或类似属性)都可以用于运行JavaScript
至少在GWT 2.4-
SimpleHtmlSanitizer
中有一个内置的实现。这个类将某些html标记(包括
和
标记)以及其他一些标记)列为白名单。属性被完全删除,因为有太多情况下它们可能不安全。正如类名所示,这s只是解决此问题的一种简单方法-更复杂和深入的方法可能更符合原始代码,但这也带来了允许不安全HTML内容的风险。Thax您的答案是,但是为什么html1.setHTML(SafeThMLTILS.fromString(“text”))的输出是纯文本?上述代码的输出是:“text”没有格式化文本吗?这让我很困惑,为什么我们需要一个ehtmlutils.fromString??因为我想要安全的html,但我也希望结果有正确的html格式化文本,而不仅仅是纯文本。答案在第一段-内容“ac”
可能是糟糕的html,也可能是难以阅读的文本,就像有人故意编写了“文本”
并不意味着它看起来像html—代码不知道。一旦它变成了SafeHtml
,就应该清楚它是什么意思。你可以通过选择safehtmlits.fromString
来区分它,意思是“它只是一个字符串”、safehtmlits.fromTrustedString
意思是“它是html,已知安全的”,或者HtmlSanitizer.sanitize
意思是“这是html,可能不安全”。但你还没有回答我。为什么“html1.setHTML(safehtmlitls.fromString(“text”)”的输出是纯文本“text”(没有粗体文本)非格式化文本(&N)。如果它是格式化文本,则文本应为粗体。这是一个非常简单的问题,为什么每个人都避免回答它,我不知道为什么?最后我修复了,我必须使用SafeHtmlTils.fromSafeConstant,那么结果将是html格式的文本。Thax u无论如何,没有人在回避,您不理解答案。如果我,作为用户谁不懂HTML,想写“a”