Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用psycopg2在Django中保护原始SQL查询_Python_Sql_Django_Security_Sql Injection - Fatal编程技术网

Python 使用psycopg2在Django中保护原始SQL查询

Python 使用psycopg2在Django中保护原始SQL查询,python,sql,django,security,sql-injection,Python,Sql,Django,Security,Sql Injection,我正在使用django框架创建一个web应用程序。在其中一个SQL查询中,我必须连接多个表,并使用用户输入作为“where”子句的一部分来获取结果。由于查询相当复杂,我选择使用原始SQL而不是django框架 查询的简化形式为: select * from table where {where_clause} where_子句的形式可能是col1>100和col2>50以及col3让用户定义(甚至知道)您的表/列名称似乎一开始就不安全 我将创建一些允许值的dict,用户可以通过该映射过滤到数据

我正在使用django框架创建一个web应用程序。在其中一个SQL查询中,我必须连接多个表,并使用用户输入作为“where”子句的一部分来获取结果。由于查询相当复杂,我选择使用原始SQL而不是django框架

查询的简化形式为:

select * from table where {where_clause}
where_子句
的形式可能是
col1>100和col2>50以及col3让用户定义(甚至知道)您的表/列名称似乎一开始就不安全

我将创建一些允许值的dict,用户可以通过该映射过滤到数据库中的实际表(所以用户不知道您的数据库列名)

然后,与其让用户写“>”,不如让用户定义(甚至知道)您的表/列名称,这似乎一开始就不安全

我将创建一些允许值的dict,用户可以通过该映射过滤到数据库中的实际表(所以用户不知道您的数据库列名)


然后,不再让用户写'>',注意到。这与我所做的有些相似。但您认为这足以阻止SQL注入吗?是的,只要您使用“格式”方法而不是插值来直接查询字符串。原因用户仍有可能通过“值”参数提供恶意代码。这与我所做的有些相似。但您认为这足以阻止SQL注入吗?是的,只要您使用“格式”方法而不是插值来直接查询字符串。原因用户仍有可能通过“值”参数提供恶意代码
query = sql.SQL("select {field} from {table} where {pkey} = %s").format(
    field=sql.Identifier('my_name'),
    table=sql.Identifier('some_table'),
    pkey=sql.Identifier('id'))