Sql 使用Korma清理Clojure中的数据库输入

Sql 使用Korma清理Clojure中的数据库输入,sql,clojure,korma,sqlkorma,Sql,Clojure,Korma,Sqlkorma,我在RESTful API后面使用Korma,我突然想到,我正在将用户提交的值传递给我的insertcalls。Clojure中是否有一种很好的方法可以防止SQL注入攻击?Korma以一种非常简单的方式生成SQL,因此如果有人告诉我他们的名字,我担心这会造成伤害。据我所知,Korma总是生成参数化SQL,至少对于select和insert,我没有亲自测试过其他表,所以小婴儿表应该可以 仔细检查这些值是如何从数据库返回的。清理数据库输入不会对CSRF/XSS等进行任何保护。在使用Clojure和D

我在RESTful API后面使用Korma,我突然想到,我正在将用户提交的值传递给我的insertcalls。Clojure中是否有一种很好的方法可以防止SQL注入攻击?Korma以一种非常简单的方式生成SQL,因此如果有人告诉我他们的名字,我担心这会造成伤害。

据我所知,Korma总是生成参数化SQL,至少对于select和insert,我没有亲自测试过其他表,所以小婴儿表应该可以

仔细检查这些值是如何从数据库返回的。清理数据库输入不会对CSRF/XSS等进行任何保护。在使用Clojure和DB web交互时,我使用的规则是,所有系统组件必须以对链中的下一个服务器安全的方式对数据进行编码,并且在环中间件中预先检查逻辑约束(如最大搜索大小)


安全是一场猫捉老鼠的军备竞赛,测试这些东西是无可替代的。继续,在每个查询中放入小的婴儿表,并尝试您能想到的编码和多重编码的所有组合。演示利用漏洞有时是帮助同事学会发现这些东西的一种相当有效的方法。公平地说,不要胡闹,存在一些实际上不支持wire协议级别的参数化查询的JDBC库。它们是邪恶的,永远不应该被使用,但重点是,一个人可以让内容通过网络传输,而不会从代码中将数据发送到带外,而严格来说,这并不是JDBC驱动程序本身以外的任何东西的错误。好的一点,我将添加一个任务来检查数据库中的内容!Korma确实以一种非常简单的方式生成SQL—但是如果您查看生成的查询,您将看到查询内容后面的数据,而不是嵌入其中的数据。Korma不必要地过度使用宏,使运行时合成变得比需要的更复杂,这至少有点可怕,但根据我的经验,影响安全性的情况并不可怕。顺便说一下,我戴上安全帽,认为XKCD 327传达了一个绝对错误的信息:对输入进行消毒是错误的;如果您成功地隔离了代码和数据,就不需要对输入进行清理,因为无论数据多么恶意,都不可能被解释为代码。是的,这意味着从数据库中读取的内容需要被视为具有潜在恶意的内容,就像它进入数据库时一样。。。但同样的规则也适用于那里。