import pymysql
# 1. 链接mysql
conn=pymysql.connect(
user='root',password="123",host='127.0.0.1',database='cars' # 需要去数据库创建表,无法在此创建
)
# 2. 获取一个游标
cursor=conn.cursor(cursor=pymysql.cursors.DictCursor)
# 返回的查询结果以字典的形式表示,其中列名作为字典的键,对应的值为每行的数据。
# 3 执行sql语句
cursor.execute('insert into news (title,img,url,`desc`) values (%s,%s,%s,%s)',args=[title,img,url,desc]) # 这样不会有xss攻击
cursor.execute('insert into news (title,img,url,`desc`) values (%s,%s,%s,%s)'%(title,img,url,desc)) # 这样会有xss攻击
# 4 二次确认,除查询之外的都要用
conn.commit()
在数据库查询语句中,使用参数化查询(即将变量作为参数传递给查询语句)是一种推荐的做法,可以防止SQL注入攻击,并提高代码的安全性。
第一种方式使用参数化查询,即通过将参数传递给`execute`方法的`args`参数来替代查询语句中的占位符(`%s`)。这种方式会自动将参数进行适当的转义和编码,以防止潜在的XSS(跨站脚本)攻击。
而第二种方式是通过字符串插值的方式构建查询语句,将变量直接嵌入到查询语句中。这种方式容易受到XSS攻击,因为变量的值未经过转义或编码,可能包含恶意的脚本代码,从而导致安全漏洞。
总结来说,使用参数化查询可以提供更好的安全性,因为数据库驱动程序会自动处理参数的转义和编码,确保数据被正确地插入到数据库中,同时防止恶意注入攻击。而字符串插值的方式则需要自行处理转义和编码,容易出错且存在安全隐患。
为了防止XSS攻击,建议始终使用参数化查询或安全的查询构建方法,而不是直接将变量嵌入到查询语句中。
标签:语句,img,Python,查询,cursor,攻击,参数,SQL From: https://www.cnblogs.com/10086upup/p/17545329.html