确保用户发布的博客评论安全

2023-12-30

我正在我的网站上创建博客引擎。没有什么花哨。用户将注册一些基本信息,包括评论本身,即该问题的问题。

在评论字段中,用户可以编写一些文本,但目前没有什么可以阻止他在那里编写任何有害的内容,这会在使用评论渲染页面时弄乱页面。

所以我想知道完成这三个任务的最简单方法是什么(希望 .NET 内置一些东西:))

  • 确保没有有害的 html 被写入文本框中来运行脚本,或者在添加注释后使页面呈现给所有用户一个错误。
  • 我仍然想接受像这样的标签<a>,<b>等等,以便用户可以格式化他的文本,并提供链接。
  • 消息中的任何换行符都应受到尊重,以便注释在呈现为 html 时看起来与用户写入时相同。目前,作为 html 内容的标准,所有换行符都会被忽略。

您希望确保在向数据库添加值时使用正确的方法以避免 SQL 注入,有一篇 MSDN 文章如何防止 ASP.NET 中的 SQL 注入 http://msdn.microsoft.com/en-us/library/ff648339.aspx我推荐你阅读。

当您希望允许用户自行格式化代码时,您就会受到攻击,并且您肯定必须对此进行多次思考。首先,您要确保每个标签都有匹配的结束标签。因为如果有人写:<strong>Hello!您不希望之后的所有文本都是粗体。

为了帮助您实现这一目标,您可以使用几个不同的库,这是我推荐的两种方法/库:

  • Html 敏捷包 http://htmlagilitypack.codeplex.com/
  • ASP.NET BB代码 http://eksith.wordpress.com/2009/01/14/aspnet-bbcode-c/

您可以使用一种方法,允许用户编写[粗体]文本[/粗体],然后使用称为Html Encoding在其他一切上。所以如果你写下以下内容:

<strong>this will not be in bold</strong>[bold]But this will![/bold]

输出可能是:

<strong>this will not be bold</strong>但这会的!

您可以通过执行以下步骤来实现此目的:

  • HTML 对文本进行编码
  • 用正确的 HTML 替换您的 BB 代码标签([粗体] 等)

关于您需要替换的换行符\r\n with <br />,检查 Html Agility Pack 或使用String.Replace.

您可能还想阅读Jeffs 关于安全 HTML 和 XSS 的博客文章 https://blog.stackoverflow.com/2008/06/safe-html-and-xss/.

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

确保用户发布的博客评论安全 的相关文章

  • VS2010和ASP.NET单元测试问题/WebHostAdapter异常

    我花了半天的时间试图让 ASP NET 单元测试正常工作 如艾伦的开发博客 http www gangleri net 2007 12 29 UnitTestingASPNetApplicationsWithVisualStudio2008
  • 如何在标签中制作文字自动换行

    我想在其中添加文字 a 标签适合固定的 div 但它会破坏 div 并且显示得很丑 CSS3 有一个属性 word wrap break word 看看MDN 自动换行文档 https developer mozilla org en CS
  • 在网络共享或 Intranet 项目上编译网站时请求“System.Web.AspNetHostingPermission”类型的权限失败

    我已经使用 Windows 7 一段时间了 但自从升级以来 我还没有必要使用特定的旧版 Intranet 应用程序 不幸的是 该应用程序被设置为托管在 Intranet 服务器上的 ASP NET 网站项目 当我在 Visual Studi
  • Javascript显示/隐藏div onclick

    我有一个页面 其中包含三个 div 每个 div 是一个段落 我想使用 javascript 在用户从导航栏中按下每个 div 时仅在页面中显示这是导航栏 https i stack imgur com 1LnsS png WebDev 只
  • 关闭 Bootstrap 模式 onclick

    我使用 Bootstrap 模式让用户在将商品添加到购物车之前选择产品选项 我之前在这种情况下使用过它们 没有任何问题 但这个没有按预期关闭 当用户单击 添加到购物车 按钮时 会发生一些事情 我认为问题就在那里 首先 一些脚本检查某些字段是
  • 尝试获取类型 LogWriter、键“”的实例时发生激活错误?

    我有 ASP NET 网站 我添加了参考Microsoft Practices EnterpriseLibrary Logging dll到该网站 在 web config 文件中 定义如下
  • 文本区域下的额外填充

    我的文本区域下面有额外的填充 但我似乎找不到它的来源 我已将单独的代码放在此页面上 http jsfiddle net wfuks http jsfiddle net wfuks 我似乎找不到它的来源 它有类 field field bac
  • 使用 RsaProtectedConfigurationProvider 进行 Web.Config 加密 - “错误数据”错误

    我正在尝试加密 ASP NET 2 0 Web 应用程序的 Web Config 文件中的连接字符串值 如下所示MSDN 上描述的过程 http msdn microsoft com en us library yxw286t2 VS 80
  • 如何在 web.config 中设置默认的 text/html 内容类型?

    我想将 ASP NET MVC 应用程序中网页的默认内容类型设置为 text html 我知道这可以通过向我的所有 元素添加 ContentType text html 来完成 但我更喜欢使用 web config 我怎样才能做到这一点 T
  • 为什么Disabled = true对于html有效?

    我注意到我们的代码中有一个disabled ture 我是锚标签的源代码 我想知道为什么它在 IE 中有效 我也在互联网上进行了搜索 通过网络搜索 它也被用于很多源代码中 我一直在搜索if ture 拼写错误的true也可以被IE使用 有人
  • 如何使单词中的每个字母在悬停时发生变化

    假设我的网站上某个段落中有一个单词 IamGreat 我希望它在悬停时更改为 Good4you 但是 我不想更改整个单词 而是希望每个字母单独更改 因此 如果我将鼠标悬停在字母 I 上 它将变成字母 G 字母 r 将变成数字 4 等 这两个
  • 从提交的表单中转义字符串中的字符

    每次发布帖子时 我都会得到转义字符 gt gt gt 我有一个多步骤表单 它将数据从一种表单传输到另一种表单 我将这些值与准备好的语句一起保存在数据库中 数据库中的值当前看起来像Paul s House 用户应该可以在字符串中使用单引号和双
  • 等待动态加载脚本

    在我的页面正文中 我需要插入以下代码作为 AJAX 调用的结果 p Loading jQuery p p Using jQuery p 我不能使用 load 由于文档已经加载 因此该事件不会触发 这安全吗 如果没有 我如何确保在执行自定义生
  • html5 vs flash - 完整的比较图表在哪里? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 因此 自从史蒂夫 乔布斯说 Flash 很糟糕并暗示 HTML5 可以完成 Flash 可以做的所有事情
  • 输入元素可滚动并启用文本溢出省略号

    当我添加text overflow ellipsis对于输入元素 该元素是可滚动的 当我将光标放在元素上时 我可以左右滚动 就好像文本是全宽并且没有被截断一样 尽管后面没有文本 我该如何阻止这种行为 input width 180px te
  • ASP.NET:获取自 1970 年 1 月 1 日以来的毫秒数

    我有一个 ASP NET VB NET 日期 我试图获取自 1970 年 1 月 1 日以来的毫秒数 我尝试在 MSDN 中寻找方法 但找不到任何东西 有谁知道如何做到这一点 从 NET 4 6 开始 该方法ToUnixTimeMillis
  • 加密和解密图像.net

    谁能给我一个使用 net 和 asp net 加密和解密图像的示例 当我将图像作为二进制数据保存到 SQL Server 中时 我希望对图像进行加密 包含这些名称空间 using System IO using System Securit
  • 如果方法参数是 string 或 int,ASP.NET WebAPI 会抛出 404

    我对 ASP NET MVC4 WebAPI 做了一个非常简单的测试 发现了一些有趣的问题 当一个方法采用复杂类型时 它会起作用 但是当它采用 string 或 int 时 它将抛出 404 如给出的屏幕截图所示 AddProduct 可以
  • CSS交付优化:如何推迟CSS加载?

    我在尝试着优化 CSS 交付遵循针对开发人员的谷歌文档https developers google com speed docs insights OptimizeCSSDelivery example https developers
  • HTML标题属性样式[重复]

    这个问题在这里已经有答案了 如何在不使用 javascript 或 CSS 的情况下更改以下标记中标题属性的样式 因为我将 HTML 插入到原本无法编辑的文档中的特定位置 span title This is information Thi

随机推荐

  • StretchDIBits 失败,有时什么也画不出来,

    我正在使用 gdi c 如果我绘制大图像 例如 7000 5000 StretchDIBits 功能有时会失败 它什么也没画 GetLastError 表示系统资源不足 任何人都可以解释为什么即使 DC 已成功准备 StretchDIBit
  • java中如何从另一个正在运行的线程访问方法

    我是 Java 线程的新手 我想做的是从 ThreadB 对象获取当前正在运行的线程 ThreadA 的实例的访问权限 并调用其名为 setSomething 的方法 1 我认为我比实际情况更加努力 2 我有一个空指针异常 所以我在访问该方
  • 在 C# 循环中使用 ThreadPool

    我对线程不太了解 但以下代码是否可以接受 我更担心在循环中使用线程池 string filePaths GetFilePaths foreach string filePath in filePaths ThreadPool QueueUs
  • 如何在codeigniter活动记录中使用select插入记录

    我想使用 CodeIgniter Active Record 类实现 sql 查询 查询看起来像这样 INSERT california authors au id au lname au fname SELECT au id au lna
  • 如何将 HTML5 拖放与 KnockoutJS 结合使用?

    我似乎无法绑定到 html5 拖放事件 以下是来自模板的示例
  • 根据公共后缀列表从 URL 中提取注册域

    给定一个 URL 如何使用以下命令提取注册域公共后缀列表 http publicsuffix org list 有效 TLD 列表 例如这个清单 http mxr mozilla org mozilla central source net
  • 如何将 PHP DateTime 对象转换为 ISO 字符串?

    我收到了一个 MS 格式的 JSON 日期日期 它看起来像这样 Date 1365004652303 我可以通过执行以下操作将其转换为 PHP DateTime 对象 timestamp round int originalMSdate 1
  • SQL 子查询返回超过 1 个值

    我的查询导致以下错误 消息 512 级别 16 状态 1 过程 Item insupd 第 17 行子查询返回超过 1 个值 当子查询跟在 gt 后面或子查询用作表达式时 这是不允许的 Query INSERT INTO Total Dat
  • 将数据附加到已存在的 AudioBuffer 对象

    我正在寻找将数据附加到already现存的音频缓冲区 https developer mozilla org en US docs Web API AudioContext createBuffer正在使用网络音频播放 收到要播放的音频数据
  • 在 gdb-multiarch 中指定架构

    如果我使用任何arm编译器编译C程序 例如arm none eabi gcc 然后调用gdb multiarch使用二进制文件作为第二个参数 它将正确确定机器类型 并且我可以调试我的远程应用程序 然而如果我打电话gdb multiarch就
  • Linux 中以百分比形式准确计算 CPU 使用率?

    这是一个已经被问过很多次的问题 但是我找不到得到充分支持的答案 许多人建议使用 top 命令 但如果您运行 top 一次 因为您有一个脚本 例如每 1 秒收集一次 Cpu 使用情况 它将始终给出相同的 Cpu 使用结果 示例1 https
  • “COM”、“USB”、“串口”有什么区别? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我对这3个概念很困惑 我的理解是 Serial Port通常表示 RS 232 兼容端口 RS 推荐标准 USB代表Universal S
  • 如何使用 $.getJSON 从博主提要获取数据

    我想从博主提要中获取数据使用 getJSON 函数 我使用此代码来获取版本 但它不起作用
  • 从 Spark 保存分区 parquet HIVE 表时出现问题

    火花1 6 0 蜂巢1 1 0 cdh5 8 0 我在将数据帧从 Spark 保存到镶木地板支持的分区 Hive 表中时遇到一些问题 这是我的代码 val df sqlContext createDataFrame rowRDD schem
  • mysql/sqlserver 中截断与删除的比较[重复]

    这个问题在这里已经有答案了 关于 mysql sql 服务器的一件事一直困扰着我 即删除 截断 哪一个更好更快 在哪里使用删除 在哪里使用截断 DELETE DELETE 是一个 DML 命令 DELETE 语句使用行锁执行 表中的每一行都
  • Hive:如何显示表的所有分区?

    我有一个包含 1000 多个分区的表 Show partitions 命令仅列出少量分区 如何显示所有分区 Update 我发现 show partitions 命令仅列出 500 个分区 select where 仅处理 500 个分区
  • Numpy: arr[...,0,:] 有效。但是如何存储切片命令 (..., 0, :) 中包含的数据呢?

    在 Numpy 我想通常是 Python 中 如何存储切片索引 例如 0 以便传递它并将其应用于各种数组 比如说 如果能够在函数之间传递切片索引 那就太好了 Python 根据切片语法创建特殊对象 但仅在方括号内用于索引 您可以手动创建这些
  • 生成随机字符串

    好吧 我知道有很多这样的线程 但我对 vb net 很陌生 但我无法编辑给出的源代码来制作我真正想要的内容 所以我想要一个函数 它将生成随机字符串 每个字符串包含 15 32 个字符 每个字符串将具有以下字符 并非全部在同一字符串 但其中一
  • 如何使用clients2.google.com 下载CRX?

    上周我遇到了一些困难 我已经能够使用以下链接格式使用 Chrome 商店中列出的扩展名的 ID 下载 crx 文件 现在 最近几周发布到 chrome 商店的任何新 chrome 扩展程序都将无法使用 它不会下载任何东西 使用fiddler
  • 确保用户发布的博客评论安全

    我正在我的网站上创建博客引擎 没有什么花哨 用户将注册一些基本信息 包括评论本身 即该问题的问题 在评论字段中 用户可以编写一些文本 但目前没有什么可以阻止他在那里编写任何有害的内容 这会在使用评论渲染页面时弄乱页面 所以我想知道完成这三个