django如何避免sql注入


本文摘自php中文网,作者(*-*)浩,侵删。

Django中避免sql注入的方法:1、对用户的输入进行校验;2、不要使用动态拼装sql;3、不要把机密信息直接存放;4、应用的异常信息应该给出尽可能少的提示;5、利用Dajngo的ORM来有效避免sql注入。

什么是SQL注入?

所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意的)SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。比如先前的很多影视网站泄露VIP会员密码大多就是通过WEB表单递交查询字符暴出的,这类表单特别容易受到SQL注入式攻击。

比如现在数据库中有一个front_user表,表结构如下:

1

2

class User(models.Model): telephone = models.CharField(max_length=11) username = models.CharField(max_length=100)

 password = models.CharField(max_length=100)

然后我们使用原生sql语句实现以下需求:

1. 实现一个根据用户id获取用户详情的视图。示例代码如下:

1

2

3

def index(request): user_id = request.GET.get('user_id') cursor = connection.cursor() cursor.execute('select

id,username from front_user where id=%s' % user_id) rows = cursor.fetchall() for row in rows: print(row)

return HttpResponse('success')

这样表面上看起来没有问题。但是如果用户传的user_id是等于1 or 1=1,那么以上拼接后的sql语句为:

1

select id,username from front_user where id=1 or 1=1

以上sql语句的条件是id=1 or 1=1,只要id=1或者是1=1两个有一个成立,那么整个条件就成立。毫无疑问1=1

是肯定成立的。因此执行完以上sql语句后,会将front_user表中所有的数据都提取出来。

阅读剩余部分

相关阅读 >>

Python中int是什么意思

如何查看Python安装路径

Python圣诞树代码

Python是开源语言吗

input函数的用法是什么?

Python中split是什么意思

Python list元素为tuple时的排序方法

Python中如何比较两个时间点

Python实现给照片换底色(附代码)

浅谈Python中的排序

更多相关阅读请进入《Python》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...