前言
- 例行前言【我也不知道为什么一定要这个】
- 数据库是程序开发过程中必须要涉及到的内容,除不存储或者采用文件存储的程序之外,基本都会涉及到数据库的操作
- 关于数据库操作,无非涉及到增、删、改、查,正常情况下,写上sql语句,传递变量值,运行即可。
- 那么问题来了,如果用户是一个守规矩的用户,即严格按照程序使用说明来操作的用户,我们不用担心sql注入的问题;但如果用户不是那么“听话”,就是要随着性子来,碰巧,又输入了类似“ ‘1’or‘1’=‘1’ ”这样的用户名和密码呢?
- 如果同时,程序又没有进行防sql注入处理,那么,很不幸,用户可能就绕过了你辛辛苦苦做的登录验证,直接进入系统内部了。
方法
- 说了这么多,那要怎么防止sql注入的发生呢,那就是使用:参数化
- 不多说,直接上代码看看
query = "insert into user_info (u_userid, u_name, u_dep, u_level, u_EntryTime)" +
"values (@userid, @name, @dep, @level, @entrytime)";
MySqlConnection connection = common.myOwnCon();
connection.Open();
MySqlCommand MyCommand = new MySqlCommand(query, connection);
MyCommand.Parameters.AddWithValue("@userid", userid);
MyCommand.Parameters.AddWithValue("@name", name);
MyCommand.Parameters.AddWithValue("@dep", dep);
MyCommand.Parameters.AddWithValue("@level", level);
MyCommand.Parameters.AddWithValue("@entrytime", entrytime);
MyCommand.ExecuteNonQuery();
- 通过上述代码,我们可以看到,我们没有按照以往的方式,直接给 query 字段进行变量传值,而是使用了“@”这个符号。
- 我们通过“@”字符在sql语句中注明了参数,在后续连接数据库的过程中,我们使用了Parameters.AddWithValue方法对参数进行赋值,Parameters.AddWithValue("@userid",userid)中"@userid"是参数名,后方的userid是参数值,即我们的变量。
- 通过这种方式对sql及进行处理,可以有效的防止因为sql拼接带来的sql注入风险。
最后一次更新于2020-11-21
0 条评论