Jon*_*ior 31 python database sql-injection escaping
我已经尝试了各种各样的Python模块,它们要么逃避太多,要么以错误的方式逃脱.你在Python中找到逃避引号(",")的最佳方法是什么?
Dav*_*ebb 29
如果它是数据库查询的一部分,您应该能够使用参数化SQL语句.
除了转义引号外,这将处理所有特殊字符并保护您免受SQL注入攻击.
edd*_*e_c 22
使用json.dumps
.
>>> import json
>>> print json.dumps('a"bc')
"a\"bc"
Run Code Online (Sandbox Code Playgroud)
转义字符串以及将其他对象转换为编程形式的简单和标准方法是使用repr()函数中的构建.它将对象转换为您需要使用手动代码输入的对象.
例如:
s = "I'm happy I am \"here\" now"
print repr(s)
>> 'I\'m happy I am "here" now'
Run Code Online (Sandbox Code Playgroud)
没有奇怪的黑客,它是内置的,它只适用于大多数用途.
如果使用 psycopg2,其execute()
方法具有内置转义:
cursor.execute("SELECT column FROM table WHERE column=%s AND column2=%s", (value1, value2))
Run Code Online (Sandbox Code Playgroud)
请注意,您为执行方法提供了两个参数(字符串和元组),而不是使用 Python 的 % 运算符来修改字符串。
答案从这里窃取:psycopg2相当于mysqldb.escape_string?
三重单引号可以方便地封装 SQL 查询中经常使用的单引号:
c.execute('''SELECT sval FROM sdat WHERE instime > NOW() - INTERVAL '1 days' ORDER BY instime ASC''')
Run Code Online (Sandbox Code Playgroud)