[英]How do I escape SQL query's single quotes for query generated in javascript/jquery in cartodb database?
我使用javascript / jquery生成一个SQL查询。 我有一个sql查询我正在javascript / jquery脚本中生成和使用。
像这样的东西:
var storeName;
var query = "SELECT * FROM stores where storeName = '" + storeName + "';";
(当用户从html中选择时, storeName
是通过jquery生成的)
因此当storeName
类似于“Jackson Deli”时 ,查询运行得很好。
但是,当storeName
是“杰克逊的熟食店”时,它不起作用,似乎是因为杰克逊的撇号被视为结束语。 我知道如果我对查询进行硬编码,我可以通过加倍来引用它...所以
SELECT * FROM stores where storeName = 'Jackson''s Deli';
应该管用。 但我不是硬编码查询。 相反,它是由用户输入生成的,名称中可能有也可能没有撇号。 在这种情况下,我该如何逃避'
这个角色? 我需要它在Javascript / jquery中工作。
我是否需要编写一个if语句来查找'
在storeName
并用''
替换它''
? 或者还有另一种方法可以解决这个问题吗?
编辑:哎哟! 通常,是的,我意识到在客户端生成查询的危险。
所以这里有更多的背景。 我正在使用cartodb并关注他们的文档。 这里有一个例子来自他们的回购做类似我正在谈论的事情(他们也有其他例子):
https://github.com/CartoDB/cartodb.js/blob/develop/examples/layer_selector.html
您无法在cartodb中运行允许您以任何方式修改数据的查询 - 您只能运行允许您检索数据的查询。 所以我还在考虑逃避这个引用角色的最佳方法是什么。
话虽这么说,如果您打算使用动态查询,最好转义用户输入并将其绑定到服务器端的预准备语句。
如果您发布有关哪个数据库(MySQL,Postgres等)以及您用于服务器处理的语言的更多详细信息,您将获得更好的答案。
是的......我完全清楚这不回答这个问题。 但是,没有人应该以这种方式创建代码。
编辑:强调警告更大。
我看到其他人已经回答,但我想从几个角度来处理这个问题。
你问的问题很好。 您认识到SQL不适用于单引号。 你意识到需要逃避某些事情。 这些是一些很好的起点,可以帮助您以安全和可维护的方式构建软件。
永远不要直接执行客户端代码/内容 - 从客户端生成SQL或任何类型的代码/指令(javascript,字节码,编译代码)总是一个糟糕的主意,因为它打破了一些关键概念。
从坏人的角度来看待你的软件开发 - 而不是“如何逃避这个字符串以使其发挥作用”。 尝试“如何绕过此页面上的转义,以允许我删除记录,查看我应该做的事情等。
不要因为方法错误而感到难过 ,要从中吸取教训。 我看到很多关于你永远不应该这样做的评论(而且他们是对的)但是我们很多人都很难学到这一课。 我们嘲笑Little Bobby Tables,因为我们都写过或者不得不支持执行此操作的代码。 关键是要理解为什么这是一个坏主意的基础,然后在设计软件时使用它。 欢迎来到学校的艰难时刻。 我们都是毕业生,谢天谢地,你可以从我们的评论中学习,而不是当有人修饰,腐蚀,删除或渗透你的数据库和应用程序时。
为了让您开始这个旅程,我建议您阅读以下内容: SQL注入说明
并作为额外的奖励XSS例如逃避源自外部系统或人的OUTPUT。 例如,包含Hi!!! <script>alert('Thanks to this site not escaping this output I get to run this code under your login. Thanks for the 4000 crates of free tshirts you just ordered for me');</script> how are you???
的评论条目Hi!!! <script>alert('Thanks to this site not escaping this output I get to run this code under your login. Thanks for the 4000 crates of free tshirts you just ordered for me');</script> how are you???
Hi!!! <script>alert('Thanks to this site not escaping this output I get to run this code under your login. Thanks for the 4000 crates of free tshirts you just ordered for me');</script> how are you???
所以当你输出它时你会得到
Comments:Hi!!! <script>alert('Thanks to this site not escaping this output I get to run this code under your login. Thanks for the 4000 crates of free tshirts you just ordered for me');</script> how are you???
哪个是“有效”HTML,浏览器会执行它。
最后的想法 - 采用座右铭信任但验证 ,你会没事的
仅供参考,CartoDB不允许您执行更改表中某些内容的查询,它是只读的。
首先将数据发送到服务器,然后使用addslashes()命令转义需要转义的所有字符(假设您使用的是PHP)。
完成简化字符后,您可以使用API和API密钥将数据发送到cartoDB。
cartoDB确实通过其SQL API提供插入/更新/删除任务。 看到这个链接:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.