登录注册应该是每个网站的必作的业务,可是在选择使用Django中的ORM仍是说执行原生的Sql语句不一样的人应该会有不一样的建议,有经验的开发人员都喜欢原生的sql语句,由于相对于ORM来讲,执行效率高,能够随意地按照本身的思想去查询本身想要的数据,还有一点,就是看上去NB一点,不服不行正则表达式
对于sql注入来讲,最开始没有一点理解,我认为那是网络安全应该去管理的,但最后本身莫名的摊上事了,说大白话吧,当用户没有注册可是他点击登陆的时候,提交上的用户名以及密码是你应该去sql语句去拼接以后去你本身的数据库User表中去查询看一下有没有这个用户名和密码,或者说去判断你用户表中是否是这我的和这个密码,ok,麻烦来了,这就是重点,就通常人而言回不会给你捣乱,可是对于一些攻击者或者说开发来讲随意输入,万一用户名输入一个 “or 1 = 1” ,密码随意或者不输入,完蛋了,明明没有这我的没有这个密码可是一看他本身登上去了sql
正常的用户登陆sql语句数据库
select * from User where name = "led" and password = 123
恶意攻击登陆sql语句安全
select * from User where name="or 1 = 1 #and password = 123
解释一下,恶意攻击的sql语句必定会登录上,只由于咱们在执行sql语句进行身份校验的时候等待的是外边用户输入的信息,咱们没有对他进行一个严格的检验,而 # 这个符合在sql语句中表明注释,不会被执行,也就是说在其真正执行的·sql语句不过就是 select * from User where name = “or 1 = 1” ,1=1?√,1=1 True or这个连接词表示两个检验前面是真后边无论是否是真都是真,So,这就是sql注入网络
如今咱们知道了sql语句注入,可是咱们怎么来避免它呢?用ORM?其实如今网上有很多各自的说法都有,有的说ORM就能够避免这个问题,可是也有人说只要在外部输入的信息咱们进行拼接都会有可能出现这种问题,最保险的办法仍是说无论是使用sql仍是说ORM咱们在对于外部信息传入咱们在拼接前咱们对其进行一个严格的检验,例如正则表达式,不符合个人规则你给我滚一边去网站