【问题标题】:Storing HTML in database codeigniter在数据库codeigniter中存储HTML
【发布时间】:2011-10-28 13:37:26
【问题描述】:

我正在使用 codeigniter 创建一个 CMS,并且需要存储一些用 html 包装的文本。然后,我将从数据库中获取数据并将其回显到我的页面上。具有安全意识的最佳方法是什么?

数据示例:

<h2>A fresh approach</h2>
    <p>Whether you have queries regarding your</p>
<a href="#">cgoto page</a>

【问题讨论】:

    标签: php html database codeigniter content-management-system


    【解决方案1】:

    在保存之前应用 XSS 过滤器(更好,因为您将保存一次并回显多次)或输出并将内容分配给传递给视图的变量。您可以使用 $this->security->xss_clean($data_retrieved)。

    【讨论】:

      【解决方案2】:

      消毒始终是必要的。

      我特别喜欢为 HTML 标签使用白名单,因此您可以分析要存储的数据并简单地清除不在该白名单中的 HTML 标签。这样,如果您愿意,您可以阻止用户插入某些标签,如 &lt;script&gt;&lt;object&gt; 具有不可预测或模糊的行为。

      假设您的一个 CMS 用户使用了一个非常愚蠢的密码,而某人 else 获得对应用程序的访问权限。过滤 HTML 内容会 防止冒名顶替者插入恶意跨域javascript 收集键盘事件(可能会泄露可能的密码) 登录表单)等。

      此外,验证您要存储的 HTML 总是好的,因为任何无效的 HTML 最终都会损害您的网站标记,甚至破坏您在某些浏览器中的呈现。

      在将内容存储到数据库之前进行检查可能还不够,因为直接访问数据库可能会破坏数据,因此在回显内容之前,请按照@RodrigoFerreira 所说的进行。

      【讨论】:

      • 是的。但是如果攻击者已经可以直接访问数据库,过滤输出内容将是最小的问题...在这种情况下)并在保存到数据库之前进行 xss 过滤(提高性能的最佳方法,而不是每次请求一次又一次地过滤相同的数据)。
      • 过滤器之前和之后的方法仍然是最安全的,他只需要找到适合他需要的性能平衡:] 我是不是在谈论直接数据库黑客,指的是由任何直接数据库操作引起的数据库不一致(包括疯狂的 DBA 运行疯狂的维护脚本,是的,它发生了哈哈)。
      猜你喜欢
      • 2013-05-06
      • 2011-02-16
      • 1970-01-01
      • 1970-01-01
      • 2014-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多