在使用psycopg2将数据插入数据库之前,我注意到使用了许多pythonic替换函数。我知道这样做是为了防止用户创建格式错误的sql查询。
示例:
insert into users (name) values ('Hello''World');
它将在该列中存储:Hello'World
。
我的想法是,他们只是在插入之前才真正这样做,对此我感到不安。
示例:
s = "Hello'World"
q = "insert into users (name) values ('{}');".format(s.replace("'", "''"))
cursor.execute(q)
对我来说感觉很不错。我的一部分想法是,我仍然可以用s
来解决这种替换问题,因为这是唯一停止注入的方法。是的,arent正确使用了psycopg2,因为第二个参数是与数据库条目相关的值的列表或字典。
它应该说:
cursor.execute("insert into users (name) values (%s);", ["Hello'World"])
所以我试图在这里找到进行SQL注入的概念证明,因为我认为仅仅两次滴答就不够好了。
因为这是python,所以我在考虑选项,但是我不知道postgres是如何工作的,是否在字符串等中使用了某种预处理器。
有没有一种方法可以传递将被处理为s '
的字符串,而无需替换触摸它?我正在研究尝试传递unicode之类的东西。看看我是否可以对unicode或chr进行处理以使其处理方式有所不同?
还有其他人遇到过吗?我坐在dbeaver以及psycopg2 / python中,看看我是否可以得到一个工作样本。