即使使用mysql_real_escape_string()函数,是否存在SQL注入的可能性?
考虑这个示例情况.SQL是用PHP构造的,如下所示:
$login = mysql_real_escape_string(GetFromPost('login'));
$password = mysql_real_escape_string(GetFromPost('password'));
$sql = "SELECT * FROM table WHERE login='$login' AND password='$password'";
Run Code Online (Sandbox Code Playgroud)
我听过很多人对我说,这样的代码仍然很危险,即使使用了mysql_real_escape_string()函数也可以破解.但我想不出任何可能的漏洞?
像这样的经典注射:
aaa' OR 1=1 --
Run Code Online (Sandbox Code Playgroud)
不工作.
你知道任何可能通过上面的PHP代码注入的注入吗?
好的,所以我不是那种经验丰富的Python.
我有以下Python代码:
cursor.execute("INSERT INTO table VALUES var1, var2, var3,")
Run Code Online (Sandbox Code Playgroud)
where var1是整数,var2&var3是字符串.
如何在没有python的情况下编写变量名,包括它们作为查询文本的一部分?
我使用Python和MySQLdb下载网页并将它们存储到数据库中.我遇到的问题是我无法在数据库中保存复杂的字符串,因为它们没有被正确转义.
我可以使用Python中的函数来转义MySQL的字符串吗?我试过'''(三个简单的引号)""",但它没有用.我知道PHP有mysql_escape_string()类似的东西吗?
谢谢.
我正在尝试执行一个简单的查询,但无论我如何传递参数,都会收到此错误.
这是查询(我使用Trac db对象连接到DB):
cursor.execute("""SELECT name FROM "%s".customer WHERE firm_id='%s'""" % (schema, each['id']))
Run Code Online (Sandbox Code Playgroud)
schema和每个['id']都是简单的字符串
print("""SELECT name FROM "%s".customer WHERE firm_id='%s'""" % (schema, each['id']))
Run Code Online (Sandbox Code Playgroud)
结果:
SELECT name FROM "Planing".customer WHERE firm_id='135'
有错误是删除后引用firm_id=,但该方式参数被视为一个整数,并::text导致相同的错误.
我试图根据用户之前所做的选择来限制下拉列表中的选择。这就是我的烧瓶的样子:
初始化.py
@app.route('/create/', methods=['GET','POST'])
def create():
mySQL2 = SelectCustomer(session['ID']) #displayed invoicereceiver
global sessioncur
try:
form = CreateinvoiceForm(request.form)
if request.method == 'POST' and form.validate():
#HEADER
#This fetches from HTML
customer = request.form.get('customer')
goodsrec = request.form.get('goodsrec')
return render_template("createinvoice.html", form=form, mySQL2 = mySQL2)
Run Code Online (Sandbox Code Playgroud)
使用 mySQL2 作为可能的变量从 html 表单中填充客户以供选择:
html 选择表单
<select required name="customer" class="selectpicker form-control" ,
placeholder="Select">
<option selected="selected"></option>
{% for o in mySQL2 %}
<option value="{{ o[2] }}">{{ o[2] }}</option>
{% endfor %}
</select>
Run Code Online (Sandbox Code Playgroud)
Goodsrec的选择必须取决于选择的客户。我的想法是通过执行以下操作来获取客户 ID:
c, conn …Run Code Online (Sandbox Code Playgroud) 我的目标是使用库将 JSON 对象存储到 json 类型的 MySQL 数据库字段中mysql.connector。
import mysql.connector
import json
jsonData = json.dumps(origin_of_jsonData)
cnx = mysql.connector.connect(**config_defined_elsewhere)
cursor = cnx.cursor()
cursor.execute('CREATE DATABASE dataBase')
cnx.database = 'dataBase'
cursor = cnx.cursor()
cursor.execute('CREATE TABLE table (id_field INT NOT NULL, json_data_field JSON NOT NULL, PRIMARY KEY (id_field))')
Run Code Online (Sandbox Code Playgroud)
现在,下面的代码可以正常工作,我的问题的重点是“%s”的使用:
insert_statement = "INSERT INTO table (id_field, json_data_field) VALUES (%s, %s)"
values_to_insert = (1, jsonData)
cursor.execute(insert_statement, values_to_insert)
Run Code Online (Sandbox Code Playgroud)
我的问题是:在将变量 aValue(s) 组合成一个字符串时,我非常严格地坚持使用'...{}'.format(aValue)(or f'...{aValue}'),从而避免使用%s(不管我的原因是什么,我们不要在这里辩论它们 - 但它是如何我想尽可能保留它,因此我的问题)。
在任何情况下,无论我尝试哪种方式,我都无法使用类似于上述结构并使用'...{}'.format()(以任何形状或形式)而不是%s. 例如,我(在多次迭代中)尝试过
insert_statement …Run Code Online (Sandbox Code Playgroud)