(1)对于动态构造SQL查询的场合,可以使用下面的技术:

第一:替换单引号,即把所有单独出现的单引号改成两个单引号,防止攻击者修改SQL命令的含义。再来看前面的例子,“SELECT * from Users WHERE login = ''' or ''1''=''1' AND password = ''' or ''1''=''1'”显然会得到与“SELECT * from Users WHERE login = '' or '1'='1' AND password = '' or '1'='1'”不同的结果。

第二:删除用户输入内容中的所有连字符,防止攻击者构造出类如“SELECT * from Users WHERE login = 'mas' -- AND password =''”之类的查询,因为这类查询的后半部分已经被注释掉,不再有效,攻击者只要知道一个合法的用户登录名称,根本不需要知道用户的密码就可以顺利获得访问权限。

第三:对于用来执行查询的数据库帐户,限制其权限。用不同的用户帐户执行查询、插入、更新、删除操作。由于隔离了不同帐户可执行的操作,因而也就防止了原本用于执行SELECT命令的地方却被用于执行INSERT、UPDATE或DELETE命令。

⑵ 用存储过程来执行所有的查询。SQL参数的传递方式将防止攻击者利用单引号和连字符实施攻击。此外,它还使得数据库权限可以限制到只允许特定的存储过程执行,所有的用户输入必须遵从被调用的存储过程的安全上下文,这样就很难再发生注入式攻击了。

⑶ 限制表单或查询字符串输入的长度。如果用户的登录名字最多只有10个字符,那么不要认可表单中输入的10个以上的字符,这将大大增加攻击者在SQL命令中插入有害代码的难度。

⑷ 检查用户输入的合法性,确信输入的内容只包含合法的数据。数据检查应当在客户端和服务器端都执行——之所以要执行服务器端验证,是为了弥补客户端验证机制脆弱的安全性。

在客户端,攻击者完全有可能获得网页的源代码,修改验证合法性的脚本(或者直接删除脚本),然后将非法内容通过修改后的表单提交给服务器。因此,要保证验证操作确实已经执行,唯一的办法就是在服务器端也执行验证。你可以使用许多内建的验证对象,例如RegularExpressionValidator,它们能够自动生成验证用的客户端脚本,当然你也可以插入服务器端的方法调用。如果找不到现成的验证对象,你可以通过CustomValidator自己创建一个。

⑸ 将用户登录名称、密码等数据加密保存。加密用户输入的数据,然后再将它与数据库中保存的数据比较,这相当于对用户输入的数据进行了“消毒”处理,用户输入的数据不再对数据库有任何特殊的意义,从而也就防止了攻击者注入SQL命令。System.Web.Security.FormsAuthentication类有一个HashPasswordForStoringInConfigFile,非常适合于对输入数据进行消毒处理。

⑹ 检查提取数据的查询所返回的记录数量。如果程序只要求返回一个记录,但实际返回的记录却超过一行,那就当作出错处理。
--------------------------------------------------------------------------------------------------------------------------

最新文章

  1. 百度地图JavaScript API [一]
  2. 新一代记事本“Notepad++”个性化设置备份
  3. Servlet 之 GenericServlet
  4. Rxjava的基本使用
  5. linux的点滴积累
  6. 解决Windows和Ubuntu时间不一致的问题
  7. JQuery文件上传插件uploadify在MVC中Session丢失的解决方案
  8. [转载] zookeeper faq
  9. Unicode 与多字节编码
  10. Android中Application全局方法(变量)的调用
  11. 201521123039 《java程序设计》第十周学习总结
  12. nodejs 做后台的一个完整业务整理
  13. Web Service进阶(三)HTTP-GET, HTTP-POST and SOAP的比较
  14. 日历插件bootstrap-datetimepicker的使用感悟
  15. 在Android上使用Socket
  16. QSignalMapper类处理多信号关联同一个槽的方法(2)
  17. javacript window对象
  18. DELPHI一个对付内存汇漏的办法和技巧
  19. Codeforces Global Round 2 题解
  20. 创建maven web项目无法创建sec目录

热门文章

  1. 201521123024 《Java程序设计》第1周学习总结
  2. JAVA课程设计——团队(&个人)博客
  3. dup和dup2详解
  4. DAOFactory复用代码
  5. Spring - lookup-method方式实现依赖注入
  6. 如何加固Linux系统
  7. mongoose api 图表整理
  8. 【个人笔记】《知了堂》前端mySql基础
  9. Spring Boot 学习之项目构建
  10. 【个人笔记】《知了堂》express模块