php - 应该如何在数据库中保存为 HTML 标签?

标签 php html symfony1 xss

我创建了我的新网站。现在我学习和使用 Symfony。我有几个问题。

  1. 为什么默认的 Symfony 允许添加 HTML 标签到数据库?例如,我创建新模块,我转到模块/新,在标题中输入 <strong>test</strong>然后保存它。在数据库 MySQL 中,我有 <strong>test</strong> .安全吗?
  2. 我知道 - 如果我只使用 $test->getTitle() 那么这个渲染文本 <strong>test</strong> ,但是如果我想添加用户评论 WYSYWIG 并使用 RawValue() 怎么办?用户无法关闭标签</strong>所有网站都坏了...
  3. 例如,他们可以窃取 cookie?
  4. Symfony 有安全的所见即所得编辑器吗?如果我使用 CKEditor 或 TinyMCE 我是安全的?
  5. 在 stackoverflow 上有 WMD Markdown ,但在任何地方都找不到。他如何在数据库中保存 html 标签? **test**

最佳答案

1a) 对什么安全?只要您的数据库操作在插入查询之前通过 mysql_real_escape_string() 清理所有用户输入,那么恶意用户就无法通过注入(inject)攻击来攻击您的数据库。数据库中的 HTML 与数据库中的任何其他文本一样 - 它只是带有一些额外“奇怪”字符的文本。

1b) 至于它为什么允许它,你有明确告诉它不允许 html 吗? PHP/Symphony/MySQL 完全按照您的要求进行操作。

2) 确保 HTML 有效由您决定。您可以使用类似 HTML Purifier 的东西修复“损坏的”html。

3) 如果您正在进行 HTML 清理/过滤,那么用户可以嵌入 <script>阻止他们通过该方法添加和窃取 cookie 的 html...

4) 那些编辑只是编辑。他们展示内容并让您(或其他人)编辑展示的内容。它们安全或不安全,如您所愿。它们只是工具。如果您向某人提供一把上膛的枪,那么如果有人被 Gunicorn ,请不要感到惊讶。

5) 仅仅因为某些文本中有任何类型的标签,并不能使该文本神奇地与其他文本“不同”。 MySQL 不关心、不需要知道,甚至不必知道您正在将 Markdown 文本插入到字段中。它只存储您告诉它的内容,并在您需要时将其拉回。

关于php - 应该如何在数据库中保存为 HTML 标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7867204/

相关文章:

php - "global"Symfony函数应该放在哪里?

caching - Symfony 过滤器在 Controller 之前运行并可能跳过 Controller

php - 如何用印度语创建网站 - 卡纳达语

php - Symfony2 将值传递给集合表单类型

javascript - 如何修复提交按钮激活错误?

php - 浏览器不兼容请使用 Mozilla Firefox 3.2 以上或 IE 8.0 以上

php - 重写这些 IF 子句的更好方法是什么?

javascript - 全尺寸 AmCharts

javascript - 元素的绑定(bind)值

javascript - PhpStorm 和 JavaScript : list of functions in code embedded in PHP