我正在编写一个类,用作更大的建模算法的一部分。我的部分进行空间分析以计算从某些点到其他点的距离。有多种条件,包括返回距离的数量、截止距离等。
目前,项目规范仅指示硬编码情况。即“功能#1需要列出500m以内从点集A到点集B的所有距离。功能#2需要列出从点集C到点集D的所有距离……”等等。
我不想硬编码这些参数,开发下一阶段模型的人也不想,因为显然他们想调整参数或可能在其他项目中重复使用该算法,因为他们会有不同的条件.
现在的问题是我正在使用 psycopg2 来执行此操作。这是我工作的标准,所以我没有选择偏离它的选择。我已经读到,由于 SQL 注入的明显原因,公开将作为参数放入执行的查询中的参数是一个非常糟糕的主意。但是,我认为 psycopg2 会自动清理 SQL 输入。我认为问题在于使用 AsIs
函数。
简单的解决方案就是按照项目中的规定对其进行硬编码,但这对我来说感觉很懒惰和草率。我不喜欢做懒惰和草率的工作。
允许用户输入将输入到 psycopg2 执行的查询中的参数是否安全?或者它只是使用 AsIs
这使得它不安全?如果我想让用户能够输入这些参数,我是否必须自己负责对输入进行消毒,如果是这样,是否有一种快速简便的方法,比如使用另一个 python 库或某物?
原文由 wfgeo 发布,翻译遵循 CC BY-SA 4.0 许可协议
您可以使用 psycopg2.sql 来编写动态查询。不像
AsIs
它会保护你免受 SQL 注入。