Python防止sql注入
看了网上文章,说的都挺好的,给cursor.execute传递格式串和参数,就能防止注入,但是我写了代码,却死活跑不通,怀疑自己用了一个假的python
最后,发现原因可能是不同的数据库,对于字符串的占位定义不同,这段话:
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'
我理解,就是有多种占位方式,而我一棵树上吊死,光试验%s了,所以每次都报这个错:
rs=c.execute("select * from log where f_UserName=%s","jetz")
OperationalError: near "%": syntax error
换一个试试,
rs=c.execute("select * from log where f_UserName=:usr",{"usr":"jetz"})
可以
再试:
rs=c.execute("select * from log where f_UserName=:1 ",["jetz"])
也可以
看了sqlite对%比较过敏
对于sql注入的测试效果。
1)用构造串的方式,传递用户名
getData("select * from log where f_UserName='%s'"%("jetz"))
如果传递的是测试表名存在的串,可以执行
getData("select * from log where f_UserName='%s'"%("jetz' And (Select count(*) from user)<>0 and '1'='1"))
但是,如果改用参数方式,则不能执行
getData("select * from log where f_UserName=:1","jetz' And (Select count(*) from user)<>0 and '1'='1")
这种近乎“原生”的防止注入手段,比对传入参数进行检测来说,实在好太多了。
Python防止sql注入的更多相关文章
- python防止sql注入的方法
python防止sql注入的方法: 1. 使用cursor.execute(sql, args)的参数位: sql_str = "select * from py_msgcontrol.py ...
- 笔记:Python防止SQL注入
非安全的方式,使用动态拼接SQL 输入' or 1 = 1 or '1 sql ="""SELECT * FROM goods WHERE name = '%s';&qu ...
- python 防止sql注入字符串拼接的正确用法
在使用pymysql模块时,在使用字符串拼接的注意事项错误用法1 sql='select * from where id="%d" and name="%s" ...
- Python 防止mysql 注入的两种方式
Python防止sql注入一般有两种方法 1.escape_string MySQLdb.escape_string(param) 注意:如果报错出现 'ascii' codec can't en ...
- 视图,sql注入问题,事物,存储过程
视图:本质是一张虚拟的表数据来自select语句用途是保障原表安全 功能1:隐藏部分数据,开放指定数据功能2:因为视图可以将查询结果保存的特性,我们可以用视图来达到减少书写sql语句的功能 例如:se ...
- 使用C#winform编写渗透测试工具--SQL注入
使用C#winform编写渗透测试工具--SQL注入 本篇文章主要介绍使用C#winform编写渗透测试工具,实现SQL注入的功能.使用python编写SQL注入脚本,基于get显错注入的方式进行数据 ...
- Python中如何防止sql注入
sql注入中最常见的就是字符串拼接,研发人员对字符串拼接应该引起重视,不应忽略. 错误用法1: sql = "select id, name from test where id=%d an ...
- Python中防止sql注入的方法详解
SQL注入是比较常见的网络攻击方式之一,它不是利用操作系统的BUG来实现攻击,而是针对程序员编程时的疏忽,通过SQL语句,实现无帐号登录,甚至篡改数据库.下面这篇文章主要给大家介绍了关于Python中 ...
- python辅助sql手工注入猜解数据库案例分析
发现存在sql注入漏洞 简单一点可以直接用sqlmap工具暴库 但是如果想深入理解sql注入的原理,可以尝试手工注入,配合python脚本实现手工猜解数据库 首先hachbar开启 获取cms登录后的 ...
随机推荐
- NodeJS下的Mongodb操作
今天用Node写一个小程序中需要用到数据库操作,试用了一下,发现官方的驱动已经非常好用了,也支持async. 一个简单的实例如下: const MongoClient = require('mongo ...
- Revit API根据参数类型取得参数的值
参数的类型string与int取得的方法有所不同,可以封装成一个函数. //得到参数的值 public static string GetParamVal(Document doc, Paramete ...
- SATA工作模式咋选?揭秘AHCI和IDE区别(全文)
第1页:AHCI模式与Win7.SSD的不解之缘 AHCI这个注定和SATA接口结下不解之缘的接口模式,它担负着淘汰IDE模式的重任,从诞生开始就充满争议,它经历了整整7年时间.它伴随着SSD ...
- UIScrollView的判断位置的属性如下:
contentSize:CGSize类型,scrollview可以滑动的区域,例如,一个view的frame为(0,0,320,480),而scrollview的contentSize为(320,10 ...
- 用UICollectionView实现无限轮播图
用UICollectionView实现无限轮播图 效果 源码 https://github.com/YouXianMing/Animations 细节
- Leetcode刷题记录:计算复数乘法
题目要求 计算两个复数的乘积. 参考题解 这道题感觉很简单,主要是对复数的表达式进行解析,然后套用公式,输出结果就可以了. class Solution: def complexNumberMulti ...
- Statistical Artifact (error)
In natural science and signal processing, an artifact is any error in the perception or representati ...
- maven配置sqlServer的依赖
配置sqlServer的依赖 <dependency> <groupId>com.microsoft.sqlserver</groupId> <artifac ...
- PO BO VO DTO POJO DAO概念及其作用(附转换图)
J2EE开发中大量的专业缩略语很是让人迷惑,尤其是跟一些高手讨论问题的时候,三分钟就被人家满口的专业术语喷晕了,PO VO BO DTO POJO DAO,一大堆的就来了(听过老罗对这种现象的批判的朋 ...
- HTTP和HTTPS的区别(转)
原文链接:HTTP和HTTPS的区别 HTTPS(Secure Hypertext Transfer Protocol)安全超文本传输协议 它是一个安全通信通道,它基于HTTP开发,用于在客户计算机和 ...