gpt4 book ai didi

asp.net - 我应该如何将评论存储在数据库中,以便我可以有效地将它们作为 html 文本显示在页面上?

转载 作者:搜寻专家 更新时间:2023-10-30 23:21:00 26 4
gpt4 key购买 nike

我有一个表单,用户可以在文本区域中输入多行文本。一些行也可以有 html 标记。假设一行是粗体。

我应该如何将文本保存在我的数据库中?我应该像这样存储它们吗?

This is a greap post
<br/>
I love this type of findings.
<br/>
<br/>
Thanks for sharing

或者像这样?

This is a greap post
&lt;br/&gt;
I love this type of findings.
&lt;br/&gt;
&lt;br/&gt;
Thanks for sharing

编辑期间:我必须在输入时显示文本。所以换行符将被换行这样使用会看到有换行符。 Textarea 不会理解 br 标记

显示期间:我必须呈现文本,使其在页面上显示如下:

This is a greap post

I love this type of findings.


Thanks for sharing

我想知道最简洁的方法来存储其中可以包含标记的文本。

感谢帮助

最佳答案

由于您要输出 HTML,因此您必须将输入以原始格式存储在数据库中。不过只有一个问题。您永远不应该相信输入,因为所有输入都是邪恶的,尤其是在这种情况下,因为在输入时直接输出 HTML,可能会引发跨站点脚本 (XSS) 攻击。

你基本上有两个选择:

  1. 使用 HTML 清理程序,让您删除所有不安全的标签。 Microsoft AntiXss toolkit 随附的 sanitizer 是一种很好的 sanitizer .

  2. 对已知安全的结果的输入和解码部分进行编码,例如:

string[] safeList = { "<br/>", "<b>", "</b>", "<i>", "</i>" };

public static string EncodeInputWithSafeList(string unsafeInput)
{
// First: encode the complete input.
string safeInput = Encoder.HtmlEncode(unsafeInput);

// Next: decode each tag that is known to be safe.
foreach (string safeTag in safeList)
{
string encodedTag = Encoder.HtmlEncode(safeTag, false);
safeInput = safeInput.Replace(encodedTag, safeTag);
}

return safeInput;
}

注意:该示例使用 Microsoft AntiXss toolkit 中的 Encoder 类.

现在的问题是,我们应该在什么时候清理它。通常,您应该在将输出发送到客户端之前对其进行编码,而不是将其编码存储在数据库中,因为它取决于输出类型(HTML、PDF、JSON)数据的编码方式。如果编码器中存在错误,则无法修复它,因为数据已经编码,这一事实进一步放大了这一点。

在这种情况下,它有点棘手,因为输入是 HTML 而不仅仅是文本。我会说清理是您仍然希望事先做的事情,因为这样可以防止错误的输入进入您的数据库。 EncodeInputWithSafeList 方法有点棘手,因为它既是 sanitizer 又是编码器。当我们在它进入数据库之前运行它时,它可以防止在我们更改安全列表时更改输出。这既可以是好事也可以是坏事,但我要说的是,当您将新标签添加到安全列表时,您不希望旧数据突然发生变化。所以在这种情况下,我会使用输入编码,而不是输出编码。

当您使用输入编码时,以明确我们正在处理经过净化、编码的数据的方式命名数据库列。

关于asp.net - 我应该如何将评论存储在数据库中,以便我可以有效地将它们作为 html 文本显示在页面上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6561553/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com