• 浅谈系统安全测试


    目录

    前言

    1、软件系统的账户及数据安全

    三、常见的web攻击及防御手段

    1、SQL注入

      概念

        案例

       被攻击的原因

           预防

     2、XSS(跨站脚本攻击)

      概念

      案列

      被攻击的原因

      预防

    3、跨站请求伪造(CSRF)

      概念

      案列

      被攻击的原因

      预防

    4、DDOS

      概念

      案例

      被攻击的原因

      预防

     四、业务系统测试可能存在的安全问题

     1、注册、登录

    2、用户数据

    3、数据查询

    4、下单

    5、取消订单

    6、支付

    7、订单完成

    8、退货

    9、用户输入

    防御

    结语


    前言

      我刚开始接触安全测试的时候,想的最多就说那种在昏暗的灯光下,带着神秘面具的黑客,对着键盘噼里啪啦一顿猛如虎的操作,然后长舒一口气,最后来了句yes,完美收工!

    随后的职业生涯中,在同行的带领下开始了第一次安全测试之旅。当时大致的过程如下,选择一款安全扫描工具(Appscan),配置好要扫描的网站地址,登录信息等,点击开始扫描,two thousands years later,Appscan生成了一份非常详细的安全测试报告,然后我们对这份详细的报告里面的安全问题进行了一一验证,最后再提交给开发进行修复,经历了这次实战之后,让我觉得安全测试只不过如此嘛,随着个人工作经验的不断积累,我对于安全测试的理解也越来越深刻,此致,记录个人对于安全测试的理解。

      对于软件安全测试,本次主要分享以下几类安全问题,第一类:软件系统的账户及数据安全;第二类:常见的web攻击及防御手段;第三类:业务系统测试可能存在的安全。以下内容限于个人水平有限,如有叙述不当,还请海涵。

    1、软件系统的账户及数据安全

      可以说大部分的公司,对于我们核心系统的账户/密码的保护几乎为零,任何一个员工的任何一个理由就能轻易的拿到管理后台的账户和密码,并且对于这个账户的密码几乎也不做任何的定期修改,还有的公司直接将客户的用户名和密码打印在日志里面,对于这类情况,其最大的问题在于公司缺少对于这块的风险意识和完善的安全机制,总会觉得一切没有那么巧合,或许到这你才恍然发现,为什么我们的信息会被泄露。新闻媒体经常报道,某某因贩卖用户资料被逮捕,但是没抓到的又有多少呢?之前我在的一家公司,一小伙为了利益,将公司500G的客户资料卖给了竞争对手,被当场抓住,之所以能抓住,一切得力于公司健全的安全机制,对于软件系统而言,客户的信息至关重要,切莫让悲剧发生!

    三、常见的web攻击及防御手段

      在互联网开始兴起之初,存在各式各样的web安全问题,不过现在随着各种框架的不断诞生,对于此类的安全问题都做的比较好了,同时也有很多扫描工具可以完成安全扫描,所以这块对于我们来说不需要投入太多的精力。但是,从学习的角度来说,了解一下常见的web攻击及防御手段也是有必要的。

    1、SQL注入

      概念

      • 通过sql命令伪装成正常的http请求参数,传递到服务器端,服务器执行sql命令造成对数据库进行攻击

        案例

      • ' or '1'= '1。这是最常见的sql注入攻击,当我们输如用户名 admin,然后密码输如'or '1'= '1的时候,我们在查询用户名和密码是否正确的时候,本来要执行的是select * from user where username=user and password=pwd,经过参数拼接后,会执行sql语句 select * from user where username='admin' and password=' ' or ' 1'='1 ',这个时候1=1是成立,自然就跳过验证了。
      • 但是如果再严重一点,密码输如的是';drop table user;--,那么sql命令为select * from user where username='admin' and password='';drop table user;--' 这个时候我们就直接把这个表给删除了。

       被攻击的原因

      • sql语句伪造参数,然后在对参数进行拼接的后形成破坏性的sql语句,最后导致数据库受到攻击

           预防

      • 在java中,我们可以使用预编译语句(PreparedStatement),这样的话即使我们使用sql语句伪造成参数,到了服务端的时候,这个伪造sql语句的参数也只是简单的字符,并不能起到攻击的作用。
      • 很多orm框架已经可以对参数进行转义
      • 做最坏的打算,即使被’拖库‘。数据库中密码不应明文存储的,可以对密码使用md5进行加密,为了加大破解成本,所以可以采用加盐的(数据库存储用户名,盐(随机字符长),md5后的密文)方式。

     2、XSS(跨站脚本攻击)

      概念

      • 全称是跨站脚本攻击(Cross Site Scripting),指攻击者在网页中嵌入恶意脚本程序。

      案列

      • 比如说我写了一个博客网站,然后攻击者在上面发布了一个文章,内容是这样的 ,如果我没有对他的内容进行处理,直接存储到数据库,那么下一次当其他用户访问他的这篇文章的时候,服务器从数据库读取后然后响应给客户端,浏览器执行了这段脚本,然后就把该用户的cookie发送到攻击者的服务器了。

      被攻击的原因

      • 用户输入的数据变成了代码,比如说上面的