5

我有一个插入 tinyMCE 的文本区域,其中包含我希望保存到数据库中的 HTML 代码。

我想按原样保存该 html 代码,以便能够随时打印,甚至能够将其写入文件(using fopen("filename","w"); )

因为我正在设置我将使用的表,所以我不知道我应该为我的数据库中的这个 html 文本分配哪种类型的记录。

我是不是该..:

  • addslashes/stripslashes当我保存/标记html文本时使用?
  • 还是htmlencodechars/decodechars
  • 还是根本没有?
4

4 回答 4

2

使用TEXT数据类型来存储 HTML,并使用 PDO 或 mysqli 而不是addslashes.

于 2012-11-13T14:36:57.343 回答
2

使用大型 varchar(例如 varchar(5000))意味着您将能够进行全文索引,而在 TEXT 列上则不能。

如果改用 BBcode 标记之类的东西会更安全,但是如果您必须使用 HTML(希望不允许客人输入它),那么http://htmlpurifier.org/之类的插件可以很好地清理 HTML。

显然,您可以使用标准 PHP 函数对 HTML 进行编码和解码,但总是存在让某些东西通过的风险。

希望这可以帮助。

于 2012-11-13T14:37:49.030 回答
2

使用HTMLPurifier从 HTML 中去除任何恶意 XSS 代码。TinyMCE 尝试这样做,但可以通过直接发布到您的脚本来绕过它。

存储数据时,使用参数化查询/准备语句而不是转义,以防止 SQL 注入。PDOMySQLi可以做到这一点。这是一个很好的 PDO 教程,特别是如果您来自本地 mysql_* 库。

至于数据类型,任何字符串类型都可以,这取决于您的内容可以有多长。

于 2012-11-13T14:38:31.487 回答
1

对数据库中的列使用“文本”类型,并使用一些数据库抽象层来代替您进行封装,例如 PDO。

htmlencodechars()并且addslashes()都不适合。进行一些编码并不重要,但要针对给定目的进行正确的编码类型。

于 2012-11-13T14:35:40.237 回答