提问人:Ethosik 提问时间:1/30/2013 最后编辑:Ethosik 更新时间:6/18/2020 访问量:43081
内容数据库 - 可以存储 HTML 吗?
Database for Content - OK to store HTML?
问:
基本问题是 - 如果我限制谁可以提交 HTML,那么将 HTML 存储在数据库中是否安全?
我有一个非常简单的问题。我提供视频教程和其他内容。如果不花几个月的时间编写一个合适的 BBCode 解析器,我就需要存储 HTML,这样当我从数据库中获取它时,我就可以让它看起来完全符合我想要的样子。
基本上,我计划将有关教程系列和每一集的所有信息存储在数据库中。我希望对两者的描述进行一些格式设置,以便我可以添加多个段落、有序列表和无序列表、指向所需资源的链接等。
我正在使用PHP并创建自己的数据库。我现在正在使用phpMyAdmin将信息存储在表中。当我在PHP代码中提取信息时,我将使用具有只读权限的用户。
最好的方法是什么?谢谢!
答:
存储 HTML 代码是可以的。但是,如果它不是来自受信任的来源,则需要检查它并仅允许标记的安全子集。HTML Tidy 库将为您提供帮助。
此外,您需要计算网站设计的未来变化,因此不要使用过多的标记,只需使用基本标签。若要使它看起来像您想要的样子,请在标记中使用全局 CSS 规则和语义命名的类。
但更好的是使用 Markdown 或其他类似 wiki 的语法。Markdown 有很好的 JS 编辑器,具有实时预览功能(就像 Stackowerflow 上的编辑器一样),您可以完全避免使用 HTML。
评论
从安全的角度来看,将 HTML 存储在数据库中并不比将其存储在其他任何地方更安全 - 如果您是该 HTML 的唯一作者。但话又说回来,如果其他人可以在你的网站中创作 HTML,那么你存储它在哪里并不重要——重要的是你如何清理它,以及你如何以及在哪里显示它。
现在,它是否是存储HTML的有效方式是完全不同的事情。如果我是你,我会使用一些像样的模板系统并将 HTML 存储在文件中。
评论
就像其他人指出的那样,将 HTML 存储在数据库中并没有什么危险。但是当你显示它时,你需要知道HTML是安全的。看到你是唯一一个编辑 HTML 的人,我认为没有问题。
但是,我根本不会存储 HTML。如果你只需要标题、段落、列表、链接、图像等,我会说 Markdown 是一个完美的选择。Markdown 的好处是它看起来就像普通文本一样(即您可以将文章作为电子邮件发送或保存为 txt 文档),它比 HTML 占用的空间少得多,并且一旦 HTML 更新,您就不必更改它。
http://michelf.ca/projects/php-markdown/
评论
echo Markdown($textFromDB)
include 'Markdown.php'
我犯了一个非常大的错误,将文本数据存储在 Mongodb gridFS + 压缩中并使用 mongodump 进行日常备份。GridFS 是 1GB 的文本文件,但在备份后,内存使用量有时会增加 1GB,一个月后每天增加 1GB,由于备份的方式,内存为 20GB。
在mongodb中,您应该执行数据文件夹的快照 - 而不是执行mongodump。可能的原因是它将未使用的数据从磁盘复制到内存中,然后进行 bson 转储。因此,就我而言,从未长时间使用的文本永远不应该加载到内存中。我认为这就是备份的工作方式,因为即使现在我的 Mongodb 在运行 mongodump 后使用 200MB 的内存,它也可以上升到 3GB
因此,我认为最好的解决方案是使用文件系统来存储HTML文件,因为像PERC H700这样的RAID具有许多惊人的缓存功能,包括预读。但是它有一些限制,例如网络访问,并且根据我的经验,一些数据及时损坏,需要运行chkdsk进行修复,因为每天都会添加或删除许多GB的数据。此外,您应该考虑使用适当的 raid 功能,例如写入槽,以防止在断电时丢失数据。
Sqlite 不是为处理超大数据而设计的,所以你不应该不使用它,并且缺少许多缓存功能。
不完美的解决方案是在 nodejs 中使用 MariaDB 或它自己的缓存脚本,该脚本可以使用带有 1GB 热缓存的 memcached/Linux ramdisk。一段时间后使用内部 nodejs 缓存机制可能会产生许多内存泄漏。因此,我可以将其用于网络连接,并且 I/O 使用文件系统锁定,并且许多“热”最常用的文件可以编程为缓存在 RAM 中或保持原样
My initial answer to "should I store html in a db" is generally no. Sure it's safe if you know what you're storing, but are you really considering best practices when you ask only that question? The true answer is "It depends".
I'm sure there are things like Wordpress that store html in a database, however, as a professional website designer, I like to remember the Separation of Concerns principle. How reusable is storing html in your database for a mobile app? Is your back end now in charge of display as well as data? Do you have many implementation possibilities for a front end or are you now stuck with whatever the back end portrays, what if you want it a different color and you've stacked ul within ul within ul? How easy is the css styling now? How easy is it to change or update that html?
I could be wrong, but even Sitecore and Kentico may store an html template in a database somewhere, but the data associated with that html template is a model, not directly on the html template.
So, when you are considering this question, you may want to store your models one place and your templates another, that way when you say "hey, lets build a mobile app" you can grab your data and go, rather than creating yet another table to store the same data.
评论