SQL注入

SQL注入

       SQL注入,就是通过在系统UI界面的表单填写带有slq语言的特殊字符串对系统数据库进行攻击的一种SQL命令。简单点说,就是一个系统的安全性如果不够好的话,很容易被有心人利用SQL语言编写字符串对系统进行攻击。

例子

  1. <span style="font-family:Comic Sans MS;font-size:24px;">Insert into TableName(field name) values('Text.text')</span>  

       上面这行代码实现的就是一个向某个表中插入记录的功能。一般情况下,用户会按照UI界面的提示信息进行友好的输入;但是若是一个想搞破坏的用户,输入这样的字符串的话,对系统来说将是一种灾难:') delete TableName--')。如果没有对用户的输入信息进行安全检查的话,后面的delete的命令就会被sql数据库执行,系统的某个表将会遭受灭顶之灾,连个渣渣都不会剩。

解决方案

      正所谓魔高一尺,道高一丈(PS:但是现实好像永远是道高一尺,魔高一丈来着),SQL注入的问题一度让人们头疼不已:就连我现在用来发表分享的CSDN也曾在13年遭受被黑客通过SQL注入等技术泄露600多万用户信息的灾难。之后就是我们猜想的一样:欲除SQL注入而后快各种方案满天飞。这里只介绍正则表达式、参数化和数据架构这三种方法,至于为啥介绍这三种,因为他们简单啊~~~

正则表达式

  1. <span style="font-family:Comic Sans MS;font-size:24px;">private static readonly Regex RegInsert =  
  2.         new Regex(@"\s?or\s*|\s?;\s?|\s?drop\s|\s?grant\s|^'|\s?--|\s?union\s|\s?delete\s|\s?truncate\s|" +  
  3.             @"\s?sysobjects\s?|\s?xp_.*?|\s?syslogins\s?|\s?sysremote\s?|\s?sysusers\s?|\s?sysxlogins\s?|\s?sysdatabases\s?|\s?aspnet_.*?|\s?exec\s?",  
  4.             RegexOptions.Compiled | RegexOptions.IgnoreCase);</span>  
       上面这个正则表达式就是检测用户输入信息中是否含有“、”、“‘’”和“-”等转换字符以及SQL语句的保留字WHERE、EXEC和DELETE等。

参数化

  1. <span style="font-family:Comic Sans MS;font-size:24px;">string sql = "insert into category(name) values(@caName);</span>  
  1. <span style="font-family:Comic Sans MS;font-size:24px;">SqlParameter[] paras = new SqlParameter[] { new SqlParameter("@caName", caName) };</span>  
       通过对sql语句进行参数化处理,可以将诸如') delete TableName--')这样的用户输入当做字符串直接输入到数据库中制定的位置,而不是被数据库执行。

架构

       架构的话,主要是利用数据库自带的架构功能在表之前再加上一个架构的名字,这样用户只获取到表名也不能对数据库进行不友好的操作。(不过感觉架构的作用好像有点弱......)。

      PS:选择具体数据库所属的安全性选项,而不是服务器的安全性选项。

总结

       以上就是我对应对SQL注入的一些简单理解,希望能和路过的您共同交流学习。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值