【问题标题】:Prevent SQL injection in WebSQL database? (How to handle quotes in data?)防止 WebSQL 数据库中的 SQL 注入? (如何处理数据中的引号?)
【发布时间】:2012-04-13 21:34:01
【问题描述】:

我目前正在将 mysql 数据库的 xml 导出导入 websql 数据库,以用于在线移动体验。

在我插入的任何字符串中有双引号之前,一切都很好。通常,在 PHP 中我会使用类似:mysql_real_escape_string while inserting。

我知道我可以尝试的选项是编写正则表达式并制作用于添加/删除斜杠的函数。谷歌上有很多例子 - 但我想看看是否有其他人遇到过这个问题,并且可能有更好的解决方案。

感谢您的帮助!

【问题讨论】:

  • string.replace("\"", "\\\"") 将替换 "\"。它看起来有点奇怪,但那是因为转义字符也需要转义,funzies :P
  • 实际上确实有效......它也可以转换空格,但除此之外,这似乎是一个可靠的解决方案。我想我是在想这个。哈哈。发布为答案,我会将其标记为正确! (逃避答案)
  • 首要问题是SQL注入;意外或其他。我希望你能找到一些好的答案。 最佳解决方案是使用占位符,如果它们受支持的话。
  • 是的 sql 注入 --- 并且我导入的 xml 中包含一些 HTML...导致它在到达 quot =/ 时出错

标签: javascript webkit sql-injection web-sql


【解决方案1】:

忘记逃避。做正确的事:使用占位符。在这种情况下,数据永远不会被视为原始数据字符串。在 Web SQL 中,这可以通过 executeSql 完成。请参阅pre-processing section,了解其工作原理。

直接来自文档介绍的示例:

db.readTransaction(function (t) {
  t.executeSql('SELECT title, author FROM docs WHERE id=?', [id], function (t, data) {
    report(data.rows[0].title, data.rows[0].author);
  });
});

无论id 变量中的内容是什么,此请求都会查找逐字记录的值,而不会被解释为命令的一部分。

【讨论】:

  • 感谢您提供基于规范的解决方案。我的解决方案是 hack。
  • 可以用 INSERT INTO tablename (colnames) VALUES (?,?,?...) 来完成吗?
【解决方案2】:

一个简单的解决方法是使用 AJAX 请求将 XML 字符串发送到 PHP,PHP 将返回带有引号的字符串。

【讨论】:

  • 在形成每个查询和相等的服务器负载乘以客户端数量时从客户端到任意远程服务器的往返行程?你是认真的吗?
  • 这个问题没有阐明场景,所以我们有不同的假设。我假设从 localhost(127.0.0.1) 到服务器端一次以清除一个大型 XML 文件。我已经成功地从 Wordpress 导出了这样的操作。
猜你喜欢
  • 1970-01-01
  • 2013-04-18
  • 1970-01-01
  • 2020-02-10
  • 1970-01-01
  • 1970-01-01
  • 2011-10-25
  • 1970-01-01
  • 2021-11-21
相关资源
最近更新 更多