【SQL】SQL注入

前言

什么是SQL注入?

所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。

个人理解:

就是系统用户通过一些手段(Web表单输入),将含有自己意愿的SQL语句注入到系统设计的SQL语句中,违反设计者的要求,从而实现自己的目的。


实例:

我们平时接触的数据库链接,都是通过SQL语句来完成的,但是有的时候是不是用到了SQL语句的动态链接呢?

如下图:

select * from tablename where id = '+ id的字符串+'

这就是我们所谓的字符串的拼接,我们一般通过textbox获取用户输入的数据。

但是用户输入的是:

id的字符串 +' delete tablename where id = 1 -- //在SQL中--为注释符号

这样的结果就是:

select * from tablename where id = '+ id的字符串+' 
delete tablename where id = 1 
-- +'

运行结果为:

  1. 查询用户所需内容
  2. 删除表格id为1的新闻

你会发现这样的话, 程序不仅运行了系统默认的程序,还运行了你写的程序,从而使系统邮局很大的安全风险,这就是最简单的SQL注入了。

解决

那么怎么解决这种的问题呢?

参数化SQL

其实大家应该早就了解了,那就是在SQL语句中,通过参数传递变量,而不是简单的字符串拼接。

用C#举例

    SqlParameter[] para = new SqlParameter[]
    {
        new SqlParameter ("@id",Id ),
    };
    string sql = "select * from tablename where id =@id";       

这样的话,系统会把用户传来的Id默认为一个整体的变量,会自动对Id的数据类型进行转换,问题也就解决了!

反思


自问一:

我是怎么了解到SQL注入的呢?

答:没错,是在看视频的时候,里边的老师讲到了!


自问二:

其实我在之前机房重构的时候,就已经接触到了动态链接SQL语句参数化SQL,而且我用的也是参数化,是因为我早就了解了SQL注入吗?

答:不是,是因为大家都这么做,我也就跟着这样了,而没有深入思考为什么,都能实现相同的功能,为什么用它不用它呢?


虽然现在看来,结果是一样的,我都了解到了,但是如果自己思考发现的问题肯定与别人给你说的要深刻的多!

其实有很多新的事物不是不存在,而是大家没有去发现它!

正如那句话:“生活中不是缺少美,而是缺少发现美的眼睛!

后语

透过现象看本质,透过问题反思自己!

猜你喜欢

转载自blog.csdn.net/lk1822791193/article/details/80789734