项目开发中常见安全问题防范

背景
随着计算机网络技术的快速发展,Web应用技术在各个领域都得到了广泛的应用,但是由于不法分子针对Web应用程序相关安全漏洞的挖掘利用及恶意攻击手段的层出不穷,而与此同时国内Web应用开发人员水平参差不齐,很多开发人员安全意识淡薄,导致Web应用存在各种各样的安全漏洞,使得Web应用程序在给用户提供简便、快捷服务的同时,用户不得不为其自身可能存在的Web安全问题而担忧。主要针对Web项目中常见的安全问题进行深入的研究与分析,并对提出的各种安全问题给出了一些有效的解决方案。
安全常见问题及防范
1.输入检查表单非严格验证bug
描述:对用户提交数据没有做严格的后台验证、数据格式可以随意构造(所有前台的数据验证都只是为了提供一个更好地 用户体验(快速的给用户一个错误反馈),并不能保证数据的合法性和安全性)
可能存在地方:所有的存储性表单提交
措施:

  • 防止输入注入型攻击。所有的输入数据都要检查,除了前端检查外,为防止使用工具、程序绕开前端检查直接把数据发送给服务器,后端也要检查所有输入数据
  • 依据产品文档的要求进行合法性检查,数值型,手机号,时间,邮箱等
  • 检查文本型是否含控制字符,过滤掉控制字符,检查文本型的长度
  • URL字符串转义,使用urlencode函数处理

2.文件上传
描述:用户可以上传任意格式(或某些不应该的,比如.aspx,.php等)的文件到服务器,并且用户还能通过一些手段获得上传后文件的路径。
可能存在地方:存在于文件上传的页面(头像更新等)
措施:

  • 防止文件注入型攻击,严格限制上传文件的格式,只允许特定的文件上传,其次,对文件上传后的路径做一定的保护措施。
  • 文件上传目录设置成不可执行
  • 判断文件类型。结合MIME type与文件扩展名,设置文件类型白名单。对于图片文件,可以利用图片库函数深层次检查是否真是图片
  • 重命名文件名

3.文件下载
描述:利用url构造,可以下载服务器上面的任意或指定外的文件
可能存在地方:存在于文件下载的页面
措施:

  • 不提供文件的绝对路径下载,而是通过文件的标识符下载
  • 文件服务器使用独立的域名

4.目录遍历漏洞
描述:由于配置文件的错误,导致了一些本不应该共享的目录被共享了,就造成了用户可以任意访问目录,指程序中未过滤用户输入的…/和./之类的目录跳转符,导致恶意用户可以通过提交目录跳转来遍历服务器上的任意文件
可能存在地方:一般不好发现,最简单的发现方式是通过程序扫描
措施:

  • 大部分情况下问题的关键就是 …/
    目录跳转符,所以防御的第一要务就是它进行过滤。除了过滤之外,还可以针对最终的文件路径进行判断,确保请求文件完整目录后的头N个字符与文档根目录完全相同,如果相同则返回内容,否则则可能是攻击地址不予返回
  • 严谨规划文件目录

5.弱口令
描述:由于用户名和密码这些认证登录信息十分简单造成的(初始账号、密码等等)
可能存在地方:所有认证登录的表单
措施:

  • 限制用户名与密码的长度
  • 增加其复杂度
  • 使用二次验证

6.SQL注入
描述:通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。通过Sql注入,可能可以绕过某些验证(登录)、越权访问数据库表的信息等等
可能存在地方:查询搜索框(表单)
措施:

  • 做过滤操作
  • 使用一些高级的框架(根本不会存在Sql注入)

7.XSS攻击(跨站脚本攻击)
描述:XSS的本质是HTML注入,用户输入的数据被当成Html代码执行了,用户可以上传构造好的恶意脚本语句保存到数据库中,在其它用户访问某些页面时,那些恶意脚本加载并执行,可以盗取用户帐户,修改用户设置,盗取/污染cookie,做虚假广告等
可能存在地方:所有的存储性表单提交
措施:

  • cookie使用HttpOnly限制
  • 输出文本HTML转义,渲染后台传来的数据时最好使用html编码或JavaScript编码
  • 检查输入的URL
  • 对传入js函数的文本型参数值进行javascript转义
  • 通过拦截器进行处理,使用框架自动或阻止非法标签提交

8.CSRF攻击的防御
描述:CSRF跨站点请求伪造(Cross—Site Request Forgery),跟XSS攻击一样,存在巨大的危害性,攻击者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了攻击者所期望的一个操作,比如以你的名义发送邮件、发消息,盗取你的账号,添加系统管理员,甚至于购买商品、虚拟货币转账等。 如下:其中Web A为存在CSRF漏洞的网站,Web B为攻击者构建的恶意网站,User C为Web A网站的合法用户。
可能存在地方:需跨域对外提供公共API
检测CSRF漏洞是一项比较繁琐的工作,最简单的方法就是抓取一个正常请求的数据包,去掉Referer字段后再重新提交,如果该提交还有效,那么基本上可以确定存在CSRF漏洞
随着对CSRF漏洞研究的不断深入,不断涌现出一些专门针对CSRF漏洞进行检测的工具,如CSRFTester,CSRF Request Builder等
以CSRFTester工具为例,CSRF漏洞检测工具的测试原理如下:使用CSRFTester进行测试时,首先需要抓取我们在浏览器中访问过的所有链接以及所有的表单等信息,然后通过在CSRFTester中修改相应的表单等信息,重新提交,这相当于一次伪造客户端请求。如果修改后的测试请求成功被网站服务器接受,则说明存在CSRF漏洞,当然此款工具也可以被用来进行CSRF攻击
措施:

  • 验证 HTTP Referer 字段
  • 请求地址中添加 token 并验证
  • HTTP 头中自定义属性并验证

9.CST/XST-跨站式追踪攻击
描述:攻击者将恶意代码嵌入一台已经被控制的主机上的web文件,当访问者浏览时恶意代码在浏览器中执行,然后访问者的cookie、http基本验证以及htlm验证信息将被发送到已经被控制的主机,同时传送Trace请求给目标主机,导致cookie欺骗或者是中间人攻击
可能存在地方:所有请求响应
措施:

  • Web 服务器关闭 Trace、Track 方法的请求

你可能感兴趣的:(软件设计实现规范)