php - 使用 Markdown 和 MySQL 时正确的操作顺序?

标签 php mysql markdown sanitization

我希望我的用户能够用 Markdown 写一篇文章,将它存储在 MySQL 数据库中(可以选择在将来编辑它),并显示给其他用户。

在实践中,这是我对其工作原理的理解:

输入

  1. 用户使用 Markdown 语法通过 HTML 表单输入
  2. $queryInput = mysql_real_escape_string($userInput);
  3. 将过滤后的字符串插入数据库

输出

  1. 从数据库查询字段
  2. $output = Markdown($queryResult);
  3. 显示$output

是吗?

PHP Markdown 是否排除了对 htmlspecialcharsPure HTML 的需要?

谢谢!

最佳答案

几周前我评估了 markdown 在 PHP 中的使用(顺便说一下,我决定不使用它)。我的想法:

  • 每次呈现输出时都运行 markdown 解析器可能不是一个好主意 - 解析评论非常昂贵,而且通常的博客评论(作为示例)被阅读的频率远高于写入的频率。在将用户输入保存到数据库之前,您应该运行 markdown 解析器!

  • 现在真正棘手的问题是:Markdown 本身不进行任何安全检查。所有的xss攻击都愉快的通过了。如果你现在认为“没问题,我会在获得用户输入后立即使用 strip_tags”,再想一想:Markdown 很可能在处理用户输入时创建包含 XSS 的标签。因此,您必须检查由 markdown 创建的 HTML 代码是否存在安全问题——这是一项非常艰巨的任务,而且很容易出错。 (这就是我没有使用它的原因—— yield 与潜在成本的比例不高)

关于php - 使用 Markdown 和 MySQL 时正确的操作顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2764381/

相关文章:

html - 使用 pandoc for html/pdf/docx 在 markdown 中正确调整 PNG 图像的大小

ios - Appledoc 和自定义链接说明

php - mysql_fetch_array()/mysql_fetch_assoc()/mysql_fetch_row()/mysql_num_rows 等...期望参数 1 是资源

php - 如何在后台运行 php 进程?

mysql - 截断表后 PostgreSQL 错误 22012 除以零

php mysqli,如何选择值并准备它们以更新其他表

php - 来自 MySQL 表的 RecursiveArrayIterator

javascript - 谷歌地图 API 函数 getlatlong

php - 如何将 SSH 凭据安全地保存在数据库中?

javascript - 如何在浏览器中显示markdown内容(大概是用markdown.js?)