【问题标题】:html injection questionhtml注入问题
【发布时间】:2010-02-26 01:56:03
【问题描述】:

使用 FreeTextBox,我正在捕获 HTML 格式的文本。目的是允许网站所有者在几个页面上更新他们的网页内容。除了知道如何处理生成的 HTML 标记之外,我已经完成了系统。

页面编辑器完成工作后,我可以从 FreeTextBox 获取 html 格式的输出,如下所示:<font color="#000080"><b>This is some text.</b></font>

我尝试将它作为转义标记存储在 web.config 中,但这不起作用,因为即使在我将它们更改为转义字符后它仍然保留标签,如下所示:<font color="#000080">

我想将这种字符串作为键存储在 web.config 中的原因是我可以成功存储静态字符串,为其设置 lebel 值,并成功呈现文本。但是当我试图逃避它时,它会以某种方式在 web.config 中被 .Net 重新格式化。

所以我转义了所有字符,将它们编码为 Base64 并存储。然后在 page_load 上,我尝试对其进行解码,但它只是显示为文本,所有的 html 标签也显示出来——它没有被渲染。我知道有一百万人使用这个控件,但如果我能弄清楚如何正确使用它,我该死的。

所以这是我的问题:如何将保存的 HTML 注入到已编辑的页面中,以便它显示在浏览器中,就像编辑器希望它看起来一样?

【问题讨论】:

  • 您是否有示例说明如何在页面上显示已保存的 HTML?如果您有一个包含 HTML 标签的字符串,将其放入标签中将输出标签并导致浏览器呈现它们(假设它们实际上是标签,而不是 <,但可以使用 Server.HtmlDecode 来处理)。

标签: asp.net


【解决方案1】:

尝试Server.HtmlDecode 将 HTML 输出到屏幕。
作为旁注,我更喜欢使用 CKEditor 进行 html 格式的输入。我发现它是所有选项(FreeTextBox、TinyMCE 等等?)中更好的选择,并且在 3.0 版本中它已经完全重写并且速度更快!

【讨论】:

  • 您要求我“尝试”您的解决方案。当您的答案还包括一个待售程序的插件时,我必须承认对您的回答持一定的怀疑态度。此外,如果我还没有尝试过,我当然不会在 Stack Overflow 上发帖。
  • 对不起“尝试”。我只是不完全确定使用动词“使用”。关于该计划,我与该计划没有任何关联,正如您可能想知道的那样。这只是我使用的东西,喜欢并认为您可能想检查一下。它也有一个开源许可证。
【解决方案2】:

如果有人来这里寻求答案,这是一种方法。

我在 web.config 在存储时更改一些 HTML 标记时遇到了最初的问题,因此我们使用 B64 编码(可能没有必要)。将保存的 html 标记作为 Base64 编码存储到 web.config 中的 AppSettings 键,将其用于您的设置更新功能。添加错误检查以及您需要做的任何其他事情:

'create configuration object
Dim cfg As Configuration
cfg = WebConfigurationManager.OpenWebConfiguration("~")
'get reference to appsettings("HTMLstring")
Dim HTMLString As KeyValueConfigurationElement = _
CType(cfg.AppSettings.Settings("HTMLstring"), KeyValueConfigurationElement)

'get text entered by user and marked up with HTML tags from FTB1, then
'encode as Base64 so we can store it as XML-safe string in web.config
Dim b64String As String = Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(FTB1.Text))

'save new value into web.config
If Not HTMLString Is Nothing Then
    HTMLString.Value = b64String
    cfg.Save()
End If

接下来,在 aspx 标记中添加一个 Literal 控件:

<asp:Literal id="charHTML" runat="server"/>

要将保存的 HTML 添加到后期编辑的页面,请在 Page_Load 中执行以下操作:

'this string of HTML code is stored in web.config as Base64 to preserve XML-unsafe characters that come from FreeTextBox.
Dim injectedHTML As String = System.Text.Encoding.UTF8.GetString(Convert.FromBase64String(AppSettings("HTMLstring")))

'the literal control will directly inject this HTML instead of encoding it
charHTML.Mode = LiteralMode.PassThrough
'set the value
charHTML.Text = injectedHTML

希望这会有所帮助。 SF

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-12
    • 2012-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-07
    • 2011-05-17
    • 2015-07-12
    相关资源
    最近更新 更多