国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Pyhton中防止SQL注入的方法

2019-11-25 18:00:20
字體:
來源:轉載
供稿:網友

復制代碼 代碼如下:

c=db.cursor()
max_price=5
c.execute("""SELECT spam, eggs, sausage FROM breakfast
          WHERE price < %s""", (max_price,))

注意,上面的SQL字符串與后面的tuple之間的分隔符是逗號,平時拼寫SQL用的是%。

如果按照以下寫法,是容易產生SQL注入的:

復制代碼 代碼如下:

c.execute("""SELECT spam, eggs, sausage FROM breakfast
          WHERE price < %s""" % (max_price,))

這個和PHP里的PDO是類似的,原理同MySQL Prepared Statements。

Python

Using the Python DB API, don't do this:

# Do NOT do it this way.

復制代碼 代碼如下:

cmd = "update people set name='%s' where id='%s'" % (name, id) curs.execute(cmd)

Instead, do this:
復制代碼 代碼如下:

cmd = "update people set name=%s where id=%s" curs.execute(cmd, (name, id))

Note that the placeholder syntax depends on the database you are using.
復制代碼 代碼如下:
'qmark' Question mark style, e.g. '...WHERE name=?' 'numeric' Numeric, positional style, e.g. '...WHERE name=:1' 'named' Named style, e.g. '...WHERE name=:name' 'format' ANSI C printf format codes, e.g. '...WHERE name=%s' 'pyformat' Python extended format codes, e.g. '...WHERE name=%(name)s'

The values for the most common databases are:

復制代碼 代碼如下:

>>> import MySQLdb; print MySQLdb.paramstyle format >>> import psycopg2; print psycopg2.paramstyle pyformat >>> import sqlite3; print sqlite3.paramstyle qmark

So if you are using MySQL or PostgreSQL, use %s (even for numbers and other non-string values!) and if you are using SQLite use ?

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 湘潭市| 浦县| 汾阳市| 祁东县| 喀喇沁旗| 阳城县| 华阴市| 鄂伦春自治旗| 扶余县| 永川市| 濮阳县| 楚雄市| 昆山市| 阿坝县| 延川县| 手机| 灯塔市| 舒兰市| 大田县| 龙门县| 茶陵县| 西乌珠穆沁旗| 辽阳县| 庆阳市| 津市市| 淳安县| 闻喜县| 资源县| 平泉县| 广昌县| 信丰县| 洪江市| 田东县| 上虞市| 乡城县| 巴彦县| 佛教| 石柱| 新龙县| 兰西县| 鸡东县|