【牛腩新闻发布系统】——SQL注入

【背景】

前一段时间在学牛腩,在机房重构中的知识现在又复习了一遍,我们对知识的掌握不能急于求成,需要一点一点地来,第一遍的学习想要全部学会是不可能的,都说一口不能吃个胖子,一遍一遍的重复,一遍有一遍的理解,这次比上次知道的多一点,知识就是在这样的情况下慢慢积累起来的,下面来总结一下这次对于SQL注入的学习。

【什么是SQL注入?】

       百度百科的答案:通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。

      我的理解:有一定数据库知识的人利用有安全漏洞的网站的数据库通过在Web界面上输入有恶意作用的SQL命令,而跳转到应用程序的后台试图获取数据库的信息而进行非法的操作(增删或修改数据库信息)影响应用程序的正常使用,背离数据库设计者的意图。

【举例说明】

实现功能:

     增加一个新闻类别,需要执行一条插入新闻类别语句,向数据库的新闻类别(category)表中插入一条记录。

代码展示(部分):

     

前台输入:

执行效果:

  如果D层语句使用拼接字符串(红框内),界面上显示添加成功,但是后台数据库中在添加一条“”娱乐新闻”的新闻类别记录的同时,还悄悄地将id为5的那条记录删除了!!!如果使用参数化查询(蓝框内),一切正常,输入的删除语句是无效的!

原因解读:

界面输入是这样的:娱乐新闻’)delete category where id=5—
完整SQL插入语句是这样的:insert into category (name)values('娱乐新闻')delete categorywhere id=5--')
--表示注释,上面的语句表示后面的’)部分表示注释掉了,所以执行后既有插入又有删除。

【如何避免SQL注入?】

      1.插入的时候不能使用构造的sql语句,应该使用带参数的SQL语句,参数化查询是指在设计与数据库链接并访问数据时,在需要填入数值或数据的地方,使用参数 (Parameter) 来赋值, SQL Server 的参数格式是以 "@" 字符加上参数名称而成的。这样输入语句中的删除字段就不起作用了,含有恶意的查询语句都不会插入数据库了——牛腩老师;

     2.永远不要信任用户的输入。对用户的输入进行校验,可以通过正则表达式,或限制长度;对单引号和双"-"进行转换等。

     3.永远不要使用动态拼装sql,可以使用参数化的sql或者直接使用存储过程进行数据查询存取。

     4.永远不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。
     5.不要把机密信息直接存放,加密或者hash掉密码和敏感的信息。
     6.应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装
     7.sql注入的检测方法一般采取辅助软件或网站平台来检测,软件一般采用sql注入检测工具jsky,网站平台就有亿思网站安全平台检测工具。MDCSOFT SCAN等。采用MDCSOFT-IPS可以有效的防御SQL注入,XSS攻击等。

【总结】

    用一个大圆圈所学到的知识,但是圆圈之外是那么多的空白,对我来说就意味着无知。由此可见,我感到不懂的地方还大得很呢。————  爱因斯坦

       

      

评论 39
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奔跑的大白啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值