SQL注入
SQL注入,就是通过在系统UI界面的表单填写带有slq语言的特殊字符串对系统数据库进行攻击的一种SQL命令。简单点说,就是一个系统的安全性如果不够好的话,很容易被有心人利用SQL语言编写字符串对系统进行攻击。
例子
- <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注入而后快各种方案满天飞。这里只介绍正则表达式、参数化和数据架构这三种方法,至于为啥介绍这三种,因为他们简单啊~~~
正则表达式
- <span style="font-family:Comic Sans MS;font-size:24px;">private static readonly Regex RegInsert =
- new Regex(@"\s?or\s*|\s?;\s?|\s?drop\s|\s?grant\s|^'|\s?--|\s?union\s|\s?delete\s|\s?truncate\s|" +
- @"\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?",
- RegexOptions.Compiled | RegexOptions.IgnoreCase);</span>
参数化
- <span style="font-family:Comic Sans MS;font-size:24px;">string sql = "insert into category(name) values(@caName);</span>
- <span style="font-family:Comic Sans MS;font-size:24px;">SqlParameter[] paras = new SqlParameter[] { new SqlParameter("@caName", caName) };</span>
架构
架构的话,主要是利用数据库自带的架构功能在表之前再加上一个架构的名字,这样用户只获取到表名也不能对数据库进行不友好的操作。(不过感觉架构的作用好像有点弱......)。
PS:选择具体数据库所属的安全性选项,而不是服务器的安全性选项。
总结
以上就是我对应对SQL注入的一些简单理解,希望能和路过的您共同交流学习。