安全性测试分享之SQL注入

发表于:2017-10-30 16:55

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:程序员    来源:51Testing软件测试网采编

  安全性测试是指机密的数据确保其机密性以及用户只能在其被授权的范围进行操作的这样一个过程。
  例如:
  a 机密内容不暴露给不被授权的个人或用户实体
  b 用户不能单方面有权限屏蔽掉网站的某一功能
  安全性测试有哪些方面?
  SQL Injection( SQL 注入)
  Cross-site script(XSS)  (跨站点脚本攻击)
  CSRF   (跨站点伪造请求)
  URL跳转
  Directory Traversal   (目录遍历)
  Email Header Injection   (邮件标头注入) 
  exposed error messages(错误信息)
  SQL Injection应该称为SQL指令植入式攻击,它是描述一个利用写入特殊SQL程序码攻击应用程序的动作.
  用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQL Injection,即SQL注入.
  如何判断sql注入存在的情况
  通常情况下,SQL注入一般存在于带有参数传递的URL页面
      例如:HTTP://xxx.xxx.xxx/abc.asp?id=XX
  有时一个动态网页中可能只有一个参数,有时可能有N个参数,有时是整型参数,有时是字符串型参数,不能一概而论。总之只要是带有参数的动态网页且此网页访问了数据库,那么就有可能存在SQL注入。
       例如: 搜索页面
             登录页面
             提交评论页面等等.
  判断过程:
  带有参数传递的URL:
   http://aipai.163.com/s/trade/orderDetail/?orderId=183004
  提交查询的数据库SQL为:
  select * from order where id=183004.
  测试SQL注入是否存在方法:
  1、附加一个单引号  : ’http://...ail.htm?oid=183004
  查询的SQL:select * from orders where id=183004’运行异常
  2、附加 “and 1=1”http://...ail.htm?oid=183004and 1=1, 
  查询的SQL: select * from orders where id=183004and 1=1  运行正常
  3、附加“and 1=2” http://...ail.htm?oid=183004and 1=2, 
  查询的SQL: select * from orders where id=183004and 1=2 运行异常
  如果以上三步骤全面满足,那么一定存在SQL注入漏洞
  如何进行sql注入的测试?
  对于未明显标识在URL中传递参数的,可以通过查看HTML源代码中
  的"FORM"标签来辨别是否还有参数传递.
  注:在<FORM>和</FORM>的标签中间的每一个参数传递都有可能被利用.
  <form action=“http://www.baidu.com" method="get">
  <div>
  <lab<input type="text" name="yourname" value=""/>
  el>用户名</label>
  <label>密码</label>
  <input type="password" name="yourpwd" value=""/>
  <input type="submit" value="提交">
  </div>
  </form>
  常用的SQL注入语句
  根据实际情况,SQL注 入请求可以使用以下语句:
  返回的是连接的数据库名 and db_name()>0
  作用是获取连接用户名 and user>0
  将数据库备份到Web目录下面 ;backup database 数据库名 to disk='c:\inetpub\wwwroot\1.db';--显示SQL系统版本 and 1=(select @@VERSION) 或an1=convert(int,@@version)—
  ' or 1=1- -
  " or 1=1- -
  or 1=1- -
  ' or 'a'='a
  " or "a"="a
  ') or ('a'='a
  如何防止SQL注入?
  从应用程序的角度来讲,我们要做以下三项工作:
  1、转义敏感字符及字符串,SQL的敏感字符包括:
  “exec”,”xp_”,”sp_”,”declare”,”Union”,”cmd”,”+”,”//”,”..”,”;”,”‘”,”--”,”%”,”0x”,”><=!-*/()|”,和”空格”).
  2、屏蔽出错信息:阻止攻击者知道攻击的结果
  3、在服务端正式处理之前提交数据的合法 性(数据类型,数据长度,敏感字符的校验)
  从测试人员的角度来讲,在程序开发前(即需求阶段),我们就应该有意识的将安全性检查应用到需求测试中,例如对一个表单需求进行检查时,我们一般检验以下 几项安全性问题:
  1、需求中应说明表单中某一FIELD的类型,长度,以及取值范围(主要作用就是禁止输入敏感字符)
  2、需求中应说明如果超出表单规定的类型,长度,以及取值范围的,应用程序应给出不包含任何代码或数据库信息的错误提示。
  当然在执行测试的过程中,我们也需求对上述两项内容进行测试。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号