漏洞与补丁齐飞,蓝屏共死机一色

最近struts2的安全漏洞影响面甚广,此后门为可以在url中直接远程调用脚本的漏洞和一个重定向漏洞。大家可以在s2-016远程执行脚本漏洞s2-017重定向开放漏洞中看到攻击的例子。第一个漏洞即远程执行脚本通过构造ProcessBuilder创建进程执行脚本,框架开放度太大,由外界用户输入的字符串可以被当成代码执行。第二个漏洞重定向开放则可被钓鱼网站利用,外链上伪造成如著名电子商务网站淘宝,京东,比如是<a href="http://www.taobao.com/xxx.action?redirect:http://hacker.com/getyourPassword">打折新款</a>, 用户点击后来到一个钓鱼网站,这网站可以跟淘宝或京东网站登陆界面做的一样,来欺骗用户进行获取密码。

struts2作为一个老牌的web开源框架,尚且存在如此严重的问题,我们作为应用程序的开发者,也经常会在某些地方由于对框架理解不深,或考虑的不够周到,而埋下安全或其他方面的隐患。下面我们就谈谈经常碰到的一些高危地段:

1.转弯制动失灵(forward之后没有及时return)

   1: String para = req.getParameter("g");

   2:         if (para != null) {

   3:             RequestDispatcher r = req.getRequestDispatcher("/goodbye/ww");

   4:             r.forward(req, res);            

   5:         }

   6:  

   7:         System.out.println("still in here.Logic continue.");

这段代码在forward之后,Response就已经发送给客户端,看起来后面的代码就没执行了,其实不是的。forward之后,只是网络交互已经完成,这时如果调用一个新的r.forward会掷出java.lang.IllegalStateException: Cannot forward after response has been committed 异常,而后续代码照样执行。如果此时调用了一个后台服务,如标记数据库或其他资源操作,就会造成严重的逻辑错误。

解决方案:在forward之后不需要执行其它后台逻辑时,请及时return.(手制动)

2.注入攻击(用户提交的字符串作为代码的一部分并可执行)

此类问题在论坛、博客等用户可输入html文本的网站中碰到的比较多。用户输入一段文字,这段文字需要以网页形式展现出来(作为html执行或作为js执行)或者需要生成一个后台脚本(如sql,shell等),这时用户可恶意的输入脚本并在其后的执行环境中执行,达到控制或破坏系统的目的。

基本解决思路:

将这段代码脚本进行处理,比如将其中有较大风险的字符进行转义处理,使其在执行环境中只有展示功能,而无执行功效。(限行)

  • 对于html,javascript只需将其进行html转义即可。(考虑到展示效果的问题,最好的办法是创建标签白名单,只有在白名单中的标签才可以展示,否则就转义或剔除)。
  • 标签语言中的变量生成的html,可以对其进行标签定制,提供转义属性,形如<c:out value="${html}" escapeXml="true" /> 形式。
  • 对于SQL尽量使用Preparestatement来生成sql,少用拼接方式;如果要用拼接,则注意用户输入的内容其中字符的转义。

3.十字路口(servlet的全局变量线程安全问题)

    Servlet本身设计时刻允许多线程访问,提供web服务给客户端。其中容器中Servlet中的实例变量一般来说是只有一个的(跟随servlet只初始化一个这个特点),那如果有对此实例并发写的情况,很容易造成写丢失等同步问题。但是进行同步加锁过多,又会造成性能下降等问题。在一般情况下尽量少用实例变量来维持状态。如若要用,也尽量使用线程安全且性能高的容器,如ConcurrentHashMap,而要避免使用线程不安全的如HashMap(可能造成死循环),ArrayList,LinkedList等。

 

由Strurts2漏洞引开谈谈web代码安全问题的更多相关文章

  1. 【转载】网络安全---Strurts2漏洞介绍

    Apache Struts2 作为世界上最流行的 Java Web 服务器框架之一,3 月 7 日带来了本年度第一个高危漏洞——CVE编号 CVE-2017-5638 .其原因是由于 Apache S ...

  2. AJAX请求真的不安全么?谈谈Web安全与AJAX的关系。

    开篇三问 AJAX请求真的不安全么? AJAX请求哪里不安全? 怎么样让AJAX请求更安全? 前言 本文包含的内容较多,包括AJAX,CORS,XSS,CSRF等内容,要完整的看完并理解需要付出一定的 ...

  3. Walle,一个开源的web代码发布管理系统

    前言 Walle 一个web部署系统工具,可能也是个持续发布工具,配置简单.功能完善.界面流畅.开箱即用!支持git.svn版本管理,支持各种web代码发布,静态的HTML,动态PHP,需要编译的JA ...

  4. 易盛信息9.0外盘期货行情数据API接口公共授权开发包例子代码

    易盛信息9.0外盘期货行情数据API接口公共授权开发包例子代码        怎么才能获取到外盘期货行情数据API接口呢?不少朋友就会考虑到易盛9.0行情API接口,本身易盛就是一个软件提供商,提供行 ...

  5. 【常见Web应用安全问题】---4、Directory traversal

    Web应用程序的安全性问题依其存在的形势划分,种类繁多,这里不准备介绍所有的,只介绍常见的一些.  常见Web应用安全问题安全性问题的列表: 1.跨站脚本攻击(CSS or XSS, Cross Si ...

  6. 【常见Web应用安全问题】

    Web应用程序的安全性问题依其存在的形势划分,种类繁多,这里不准备介绍所有的,只介绍常见的一些. 常见Web应用安全问题安全性问题的列表: 1.跨站脚本攻击(CSS or XSS, Cross Sit ...

  7. 全网连夜修复的Log4j漏洞,如何做到一行代码都不改?

    GitHub 21.5k Star 的Java工程师成神之路,不来了解一下吗! GitHub 21.5k Star 的Java工程师成神之路,真的不来了解一下吗! Apache Log4j2 远程代码 ...

  8. unison+inotify 同步web代码并排除指定目录不同步

    unison + inotify  实现web 数据双向同步   unison 是一款跨平台的文件同步对象,不仅支撑本地对本地同步,也支持通过SSH,RSH和Socket 等网络协议进行同步.unis ...

  9. 【漏洞复现】Office远程代码执行漏洞(CVE-2017-11882)

    昨晚看到的有复现的文章,一直到今天才去自己复现了一遍,还是例行记录一下. POC: https://github.com/Ridter/CVE-2017-11882/ 一.简单的生成弹计算器的doc文 ...

随机推荐

  1. ecmall在linux下的安装注意事项(转)

    今天跟ecshop客服胡娇沟通后知道ecmall基本配置是[LAMP] linux+apache+mysql+php,然后自己开始在linux下安装ecmall并做迁移,整理了一下中间碰到的问题.1. ...

  2. Window下SVN使用总结

    1 地址:http://subversion.apache.org/packages.html#windows 找到windows下的svn客户端工具.选择Win32Svn 进行安装. 一般环境变量会 ...

  3. (新)解决php版本ueditor中动态配置图片URL前缀(imageurlprefix)的方法

    昨天晚上写了一篇文章<解决ueditor中没法动态配置imageurlprefix的方法>,通过修改js获取当前域名的方法,配置imageurlprefix值: 发现还是不够灵活,因为域名 ...

  4. C++ 命名空间解释

    using关键字 如果在程序中需要多次引用某个命名空间的成员,那么按照之前的说法,我们每次都要使用范围解析符来指定该命名空间,这是一件很麻烦的事情.为了解决这个问题,人们引入了using关键字.usi ...

  5. linux保存的设置用户/组ID(set-user-ID)的测试

    直接贴代码和结果 // FileName: id.cpp #include <iostream> #include <unistd.h> using namespace std ...

  6. FPGA常用设计思想与基本模块划分

    常用设计思想与技巧 (1)乒乓操作; (2)串并转换; (3)流水线操作; (4)异步时钟域数据同步.是指如何在两个时钟不同步的数据域之间可靠地进行数据交换的问题.数据时钟域不同步主要有两种情况: ① ...

  7. FPGA图像加速解决方案来了

    近日,百度云与联捷计算科技(CTAccel)共同推出基于FPGA的图像加速解决方案(CIP,CTAccel Image Processor),实现对JPEG转码JPEG.JPEG转码WebP(M6)等 ...

  8. [python] 使用scikit-learn工具计算文本TF-IDF值

    在文本聚类.文本分类或者比较两个文档相似程度过程中,可能会涉及到TF-IDF值的计算.这里主要讲述基于Python的机器学习模块和开源工具:scikit-learn.        希望文章对你有所帮 ...

  9. Java-API-POI:POI 笔记

    ylbtech-Java-API-POI:POI 笔记 1. 笔记一返回顶部 1. 1,POI对JDK版本支持及XLSX (2017-04-01 13:51:39)对JDK6的支持,最后版本是POI- ...

  10. MySQL单表多字段模糊查询解决方法 又折磨半天concat(字段不能为空,如为空则用IFNULL(字段,'');

    SELECT `id`,`weixin_id`,`user_name`,`sex`,`area_id`,`address_near`,`phone`,`create_time`,`import_use ...