【发布时间】:2018-09-03 19:01:28
【问题描述】:
我将 TinyMCE (V 4.8.2) 集成到网络应用程序中,用户可以在服务器上创建自己的网页。我们将所有内容都保存到 MySQL 数据库中。
准备将数据保存到数据库中然后从数据库中提取并显示它的正确方法是什么?
我尝试通过运行以下代码来准备保存:
$pageContent = $mysqli->real_escape_string($_POST['pageContent']);
当我从数据库中提取它时,我使用以下代码在 TinyMCE 编辑器中显示它:
htmlspecialchars($pageContent)
问题是,它正在将 \r\n 添加到显示中。
从 TinyMCE 保存和显示数据的正确方法是什么?
谢谢! 瑞克
【问题讨论】:
-
Oy,在 Mysqli 或 PDO 中使用准备好的语句,尽量不要修改数据,对 HTML 使用 BBCode 之类的东西,并在页面上显示用户输入时使用 htmlentities 以防止 XSS。在安全方面,这不是一件小事。我建议阅读XSS、SQLInjection 以及与向其他用户显示用户输入相关的任何内容。
-
感谢 ArtisticPhoenix 的信息。但是,使用 htmlentities 会直接在页面上显示所有标签;
PageTitle
而不是处理标签并仅显示数据。我需要网站在输入时显示用户设置的格式。 -
这就是重点,实际上。您不应该允许用户直接放入 HTML,而是使用某种“模板”系统,堆栈溢出是一个很好的例子,可以创建一个链接,您没有放入
<a>标签,而是放入[text](url),这可以防止人们从将 JavaScript 代码注入其他用户可以看到的页面中,这将允许他们执行诸如窃取会话 cookie 并以他们的身份登录等(XSS),当您在这里写帖子时,您不要输入<strong>text</strong>,而是输入**text**然后 SO 在构建页面时对其进行转换。 -
除了 SO 使用的系统之外,还有其他系统,有些使用
[b]text[/b]等伪标签...允许用户提供 HTML 是有风险的业务。 -
感谢ArtisticPhoenix的投入。我真的很感激。