我正在编写一个类,作为更大的建模算法的一部分。我的部分进行空间分析,计算从某些点到其他点的距离。有多种情况,包括返回距离的数目、截止距离等
目前,项目规范只指出硬编码的情况。i、 e.“函数#1需要列出500米范围内从点集A到点集B的所有距离。函数#2需要列出从点集C到点集D的所有距离…”等。
我不想硬编码这些参数,开发下一阶段模型的人也不想,因为他们显然想调整参数,或者可能在其他项目中重复使用算法,因为他们将有不同的条件。
现在的问题是我用psycopg2来做这个。这是我工作的标准,所以我没有选择偏离它。我已经读到,由于SQL注入的明显原因,将要放入已执行查询中的参数作为参数公开是一个非常糟糕的主意。但是,我认为psycopg2会自动清理SQL输入。我认为问题在于使用AsIs
函数。
简单的解决方案是按照项目中的指定对其进行硬编码,但这对我来说既懒又邋遢。我不喜欢做又懒又邋遢的工作。
允许用户输入将被输入到psycopg2执行的查询中的参数是安全的吗?或者只是使用AsIs
使其不安全?如果我想让用户能够输入这些参数,我是否必须自己承担责任来对输入进行santiize,如果是的话,是否有一种快速而简单的方法来实现它,就像使用另一个python库或其他什么东西一样?
AsIs
是不安全的,除非你真的知道自己在做什么。例如,您可以将它用于单元测试。只要不预先格式化sql查询,传递参数并不是那么不安全。永远不要:
例如,因为
user_input
可以是';DROP DATABASE;'
。相反,请:
pyscopg2
将清除您的查询。此外,如果确实不信任用户的输入,可以使用自己的逻辑对代码中的参数进行预清理。每^{}'s documentation :
而且,我永远不会让我的用户告诉我应该查询哪个表。你的应用程序的逻辑(或路由)应该告诉你这一点。
关于}'s documentation :
AsIs()
,根据^{所以,不要在用户输入时使用它。
可以使用psycopg2.sql组合动态查询。与
AsIs
不同,它将保护您不受SQL注入的影响。相关问题 更多 >
编程相关推荐