将 HTML 存储到 MySQL 数据库中
Posted
技术标签:
【中文标题】将 HTML 存储到 MySQL 数据库中【英文标题】:Store HTML into MySQL database 【发布时间】:2011-02-08 03:39:29 【问题描述】:我正在尝试使用 Longtext
数据类型将包含 html 的 String
存储在 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 数据库中