怎么修改语句防sql注入攻击,我想把密码换成列表的形式,怎么操作?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎么修改语句防sql注入攻击,我想把密码换成列表的形式,怎么操作?相关的知识,希望对你有一定的参考价值。

原本的语句是这样的:
sql = "SELECT * FROM account WHERE email ='" + data_info["account_email"] + "'and password ='" + data_info["account_password"] + "'and type ='" + data_info["account_type"] + "';"
cursor.execute(sql)

用户名规则定为只能英文、数字,不支持特殊符号;用sql检查前先过滤用户名中的特殊字符。
密码在数据库中应该为md5形式,注册的时候就将明文密码md5后存储在库中。
在sql验证前先将输入的密码用md5函数转换一下,这样出来的md5串都是合法字符不会干扰sql语句。数据库用md5形式存密码也防止密码泄露。
搜搜 密码+盐 md5

不要相信任何能提交的东西,全要过滤一遍。所有过滤、校验都在后台,靠前台js是拦不住curl伪造的。
参考技术A sql拼接是最容易攻击的
最好换成参数式查询
参考技术B



一般,SQL 注入是 SQL语句直接是从页面获得值进行拼接的。

如果

string strUserid = "admin"; //从页面获得输入内容
string strSql = "select 1 from users where userid='" + strUserid + "' ";

若 strUserid 正常输入,是没问题的。

select 1 from users where userid='admin'

但,SQL注入时候会这样写

string strUserid = "' or 1=1 --";

这时,SQL为

select 1 from users where userid='' or 1=1 --'

这样永远返回验证通过的结果。





参考技术C 使用ORM, 试试sqlalchemy追答

使用ORM, 试试sqlalchemy

怎样防止sql注入

参考技术A 可以使用变量绑定的方式就可以防止sql注入,如果是直接拼接的方式那么就非常容易被注入。比如:select * from tablename where user='admin' and pwd ='123' 假设说这个是一个登录的sql语句,admin是用户文本框输入的,pwd是密码框输入的。如果密码文本框如果输入:' or '1'='1 那么拼接起sql就是select * from tablename where user='admin' and pwd ='' or '1'='1' 那么就会跳过sql的条件就直接进入登录,但是如果是使用绑定变量的就不一样
如下:
select * from tablename where user=@user and pwd =@pwd
@user=admin
@pwd=123
这样的话不管user和pwd传入的是什么内容都被sql server识别成字符串而不是直接拼接在sql 语句上。本回答被提问者采纳

以上是关于怎么修改语句防sql注入攻击,我想把密码换成列表的形式,怎么操作?的主要内容,如果未能解决你的问题,请参考以下文章

Go语言SQL注入和防注入

node sql语句占位符用法(防sql注入攻击)

PHP怎么防止sql注入

如何防止网站不被SQL注入攻击

防SQL注入攻击

防SQL注入