如何防止SQL注入

      在腾讯测试一面的时候,面试官问到了这个问题,当时对这个没什么概念,就大概根据自己理解的东西,随便说了一些,可以被SQL注入的情况,现在根据网上一些资料,自己整理一下,自己能够理解到的一些SQL的注入方式以及如何防止SQL。

首先,说一下概念,

什么是SQL注入?

      所谓SQL注入式攻击,就是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令。在某些表单中,用户输入的内容直接用来构造(或者影响)动态SQL命令,或作为存储过程的输入参数,这类表单特别容易受到SQL注入式攻击。

一些常见的SQL注入的方式

1、绕过后台身份验证,直接登录(我面试的时候,说的就是这个方向的,嘻嘻)

     大概的思路就是,当用户登录一个系统时,系统需要查找数据库的用户信息表,对用户输入的用户名以及密码进行查找数据库。如果在数据库中存在该用户,并且该用户的用户名以及密码匹配的话,就可以成功登录,否则,登录不成功(当然,登录不成功的原因有很多种情况。。。)。

       在编程初期,很多对数据库的操作使用来自用户的数据的时候,是没有考虑到用户输入的合法性的,随着,学习和使用数据库操作的人越来越多,SQL的注入也变得容易许多。

   那么说到底,有什么方法可以实现SQL的注入呢?

  先看一下,数据库的查询的语句:

  user=request("user")

  passwd=request("passwd")

  sql='select admin from adminbate where user='&'''&user&'''&' and passwd='&'''&passwd&''';

  由于查询的时候使用的是一个字符串,所以,在字符串中添加多一点其他的字符,就可以很好的避开后面的password的验证了,比如,

a、在输入用户名的时候,在用户名的后面,添加“;--”,就可以将语句的后半部分注释掉,在程序执行的时候,不管你输入的是什么密码,都会成功登录的(前提是,该程序没有对用户名的输入的合法性进行判断)。

b、在输入用户名的时候,在用户名的后面添加“ or 1 = 1”,因为是作为where的条件,“1=1”恒成立,所以,也可以避过后面的密码判断。


最后,怎样防止SQL注入?

    1.如果使用数据库时,需要使用到用户输入的数据,那么就一定要对用户的输入进行校验,可以通过正则表达式,或限制长度;对单引号和双"-"进行转换等。

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

    3.不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。

    4.不要把机密信息直接存放,加密或者hash掉密码和敏感的信息。

    5.应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装

    6.sql注入的检测方法一般采取辅助软件或网站平台来检测,软件一般采用sql注入检测工具jsky,网站平台就有亿思网站安全平台检测工具。MDCSOFT SCAN等。采用MDCSOFT-IPS可以有效的防御SQL注入,XSS攻击等。



转载于:https://my.oschina.net/u/1767433/blog/263029

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值