在python中,如何做postgresql' LIKE%name%'查询哪些缓解SQL注入?

时间:2017-10-03 05:59:12

标签: python sql postgresql sql-injection

我想执行以下查询,

select * from table where name LIKE %sachin%;

我以这种方式创建了sql查询,

sql = "select * from table where %s like '\%%s\%'"

它给了我以下错误,

ValueError: unsupported format character ''' (0x27) at index 42

我想'%'字符串前后的符号。 我怎么能得到这个?它还应该减轻SQL注入。

1 个答案:

答案 0 :(得分:1)

您最好的选择是使用占位符并在SQL中生成LIKE的右侧值,如下所示。最大的困难是你也希望传递标识符,这意味着你可能需要做一些不同的事情:

sqltemplate = "select * from table where {} like '%%' || %s || '%%'"

在此我们填写我们的标识符。请注意,将值列入白名单非常重要。

allowed_columns = ['foo', 'bar', 'bar']
if colname in allowed_columns:
   sql = sqltemplate.format(colname);
else:
   raise ValueError('Bad column name!')

然后你可以使用%s的占位符来实现它。

conn.execute(sql, (searchval,));

注意:在psycopg2中,您对占位符使用%s%d,并使用%%表示文字百分比。