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

最近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. docker 镜像导入导出[转]

    0)查看镜像id sudo docker images REPOSITORY TAG IMAGE ID CREATED SIZE quay.io/calico/node v1.0.1 c70511a4 ...

  2. php+ajax+jquery 定时刷新页面数据

    testajax.php <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http: ...

  3. 搭建基于hyperledger fabric的联盟社区(三) --生成公私钥证书及配置文件

    一.生成公私钥和证书 Fabric中有两种类型的公私钥和证书,一种是给节点之前通讯安全而准备的TLS证书,另一种是用户登录和权限控制的用户证书.这些证书本来应该是由CA来颁发,但是目前只有两个社区,所 ...

  4. CentOS部署NetCore - 1. 安装CentOS 7 & 安装 Nginx

    1. 环境: Win7 64bit 2. 准备: VMWare(12.0.0 build-2985596) CentOS 7 Minimal ISO (http://isoredirect.cento ...

  5. python md5 请求 构造

    -----------------md5加密的方法:---------------------------------- import hashlib m = hashlib.md5()        ...

  6. pull同步远程仓 笔记

    一.远程仓库删除文件 远程仓 1.py 本地仓 1.py  2.py pull后 本地仓 1.py 这里的2.py 是没有改动过的情况,如改动了要解决冲突的,见:https://www.cnblogs ...

  7. 20165226 2017-2018-4 《Java程序设计》第8周学习总结

    20165226 2017-2018-4 <Java程序设计>第8周学习总结 教材学习内容总结 第十二章 创建线程的方式有三种,分别是: - 继承Thread类创建线程,程序中如果想要获取 ...

  8. 如何搭建struts2框架

    一.首先,下载5个Struts2核心jar包: commons-logging-1.1.1.jar freemarker-2.3.15.jar ognl-2.7.3.jar struts2-core- ...

  9. 记一次 Docker swarm - overlay network access error

    背景 之前使用Docker swam 在不同的服务器 (docker host) 上面创建了service,他们之间的container通过overlay的网络通信. 昨天由于公司网络维护,其中一台服 ...

  10. Angular2快速入门-5.使用http(新闻数据来自http请求)

    Angular2官网通过http请求模拟API 来请求hero 数据,感觉有点繁琐,很让人理解不了,我们不采用它的办法,直接展示怎么使用http请求来获取我们的数据 ,直截了当. 第一.准备工作,创建 ...