将 HTML 存储到 MySQL 数据库中

Posted

技术标签:

【中文标题】将 HTML 存储到 MySQL 数据库中【英文标题】:Store HTML into MySQL database 【发布时间】:2011-02-08 03:39:29 【问题描述】:

我正在尝试使用 Longtext 数据类型将包含 htmlString 存储在 mysql 数据库中。但它总是说“你的 SQL 语法有错误”。我尝试存储一个普通的String,它可以工作。

更新

这是查询:

st.executeUpdate("insert into website(URL,phishing,source_code,active) values('" + URL + "','" + phishingState + "','" + sourceCode + "','" + webSiteState + "');");

我正在使用 Java。

【问题讨论】:

您可能没有转义您的文本。您使用什么语言与 mySQL 交互? 【参考方案1】:

SQL 查询中的字符串 - 通常 - 用单引号括起来。例如

INSERT INTO tbl (html) VALUES ('html');

但如果 HTML 字符串本身也包含单引号,则会破坏 SQL 查询:

INSERT INTO tbl (html) VALUES ('<form onsubmit="validate('foo', 'bar')">');

您已经在语法高亮显示中看到它,SQL 值在 foo 之前结束,SQL 解释器无法理解之后的内容。 SQL 语法错误!

但这不是唯一的,它还为SQL injections (examples here) 敞开大门

您确实需要在构建 SQL 查询期间清理 SQL。如何执行取决于您用于执行 SQL 的编程语言。如果是 php,你需要mysql_real_escape_string():

$sql = "INSERT INTO tbl (html) VALUES ('" . mysql_real_escape_string($html) . "')";

PHP 中的替代方法是使用prepared statements,它会为您处理 SQL 转义。

如果您使用的是 Java (JDBC),那么您需要 PreparedStatement

String sql = "INSERT INTO tbl (html) VALUES (?)";
preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1, html);

更新:事实证明您实际上是在使用 Java。您需要按如下方式更改代码:

String sql = "INSERT INTO website (URL, phishing, source_code, active) VALUES (?, ?, ?, ?)";
preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1, URL);
preparedStatement.setString(2, phishingState);
preparedStatement.setString(3, sourceCode);
preparedStatement.setString(4, webSiteState);
preparedStatement.executeUpdate();

不要忘记正确处理 JDBC 资源。您可能会发现this article 有助于了解如何以正确的方式执行基本的 JDBC 内容。希望这会有所帮助。

【讨论】:

虽然使用prepared statements 可以防止您进行sql注入,但请记住在将其拉出并再次显示时转义HTML!否则,您将容易受到各种 xss 攻击。 @nos:完全正确。然而,这是一个不同的故事。到目前为止,看到编码(变量名),我希望它可以用于完全不同的目的:) @jouzef19:如果这个 HTML 来自 user input 而你是 ever 将在 JSP 页面中显示它,然后使用fn:escapeXml() 对其进行清理以避免XSS attacks - examples here。【参考方案2】:

尝试对要存储的字符串使用mysql_real_escape_string 函数。这是最简单的方法。

【讨论】:

【参考方案3】:

您需要在将字符串插入数据库之前对其进行转义。

【讨论】:

【参考方案4】:

没有看到查询就很难说。可以发一下吗?

我假设 html 字符串的某些部分需要转义,你可能错过了?

【讨论】:

以上是关于将 HTML 存储到 MySQL 数据库中的主要内容,如果未能解决你的问题,请参考以下文章

将Mysql数据库中的BLOB图像显示到html中的动态div中

Canonical:如何将 HTML 表单数据保存到 MySQL 数据库中

如何使用php将图像存储在mysql数据库中

MYSQL数据表中要存储密码要用啥类型

如何将 html 存储在 mysql 数据库中并将其作为 html 在 nodejs 应用程序中检索?

使用jsp将图像从html上传到mysql数据库