由Strurts2漏洞引开谈谈web代码安全问题
漏洞与补丁齐飞,蓝屏共死机一色。
最近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代码安全问题的更多相关文章
- 【转载】网络安全---Strurts2漏洞介绍
Apache Struts2 作为世界上最流行的 Java Web 服务器框架之一,3 月 7 日带来了本年度第一个高危漏洞——CVE编号 CVE-2017-5638 .其原因是由于 Apache S ...
- AJAX请求真的不安全么?谈谈Web安全与AJAX的关系。
开篇三问 AJAX请求真的不安全么? AJAX请求哪里不安全? 怎么样让AJAX请求更安全? 前言 本文包含的内容较多,包括AJAX,CORS,XSS,CSRF等内容,要完整的看完并理解需要付出一定的 ...
- Walle,一个开源的web代码发布管理系统
前言 Walle 一个web部署系统工具,可能也是个持续发布工具,配置简单.功能完善.界面流畅.开箱即用!支持git.svn版本管理,支持各种web代码发布,静态的HTML,动态PHP,需要编译的JA ...
- 易盛信息9.0外盘期货行情数据API接口公共授权开发包例子代码
易盛信息9.0外盘期货行情数据API接口公共授权开发包例子代码 怎么才能获取到外盘期货行情数据API接口呢?不少朋友就会考虑到易盛9.0行情API接口,本身易盛就是一个软件提供商,提供行 ...
- 【常见Web应用安全问题】---4、Directory traversal
Web应用程序的安全性问题依其存在的形势划分,种类繁多,这里不准备介绍所有的,只介绍常见的一些. 常见Web应用安全问题安全性问题的列表: 1.跨站脚本攻击(CSS or XSS, Cross Si ...
- 【常见Web应用安全问题】
Web应用程序的安全性问题依其存在的形势划分,种类繁多,这里不准备介绍所有的,只介绍常见的一些. 常见Web应用安全问题安全性问题的列表: 1.跨站脚本攻击(CSS or XSS, Cross Sit ...
- 全网连夜修复的Log4j漏洞,如何做到一行代码都不改?
GitHub 21.5k Star 的Java工程师成神之路,不来了解一下吗! GitHub 21.5k Star 的Java工程师成神之路,真的不来了解一下吗! Apache Log4j2 远程代码 ...
- unison+inotify 同步web代码并排除指定目录不同步
unison + inotify 实现web 数据双向同步 unison 是一款跨平台的文件同步对象,不仅支撑本地对本地同步,也支持通过SSH,RSH和Socket 等网络协议进行同步.unis ...
- 【漏洞复现】Office远程代码执行漏洞(CVE-2017-11882)
昨晚看到的有复现的文章,一直到今天才去自己复现了一遍,还是例行记录一下. POC: https://github.com/Ridter/CVE-2017-11882/ 一.简单的生成弹计算器的doc文 ...
随机推荐
- FastAdmin 的 API 可以分级吗?
FastAdmin 的 API 可以分级吗? 有小伙伴问 FastAdmin 的API 可以分别吗,使用 / 出现错误. Karson 的说明是: 完全支持的,默认是使用.进行分隔的,如果需要/,请开 ...
- Go语言学习笔记 package
加 Golang学习 QQ群共同学习进步成家立业工作 ^-^ 群号:96933959 strings import "strings" strings包实现了用于操作字符的简单函数 ...
- ASP.NET-自定义HttpModule与HttpHandler介绍
ASP.NET对请求处理的过程:当请求一个*.aspx文件的时候,这个请求会被inetinfo.exe进程截获,它判断文件的后缀(aspx)之后,将这个请求转交给 ASPNET_ISAPI.dll,A ...
- Zen Coding改名Emmet-功能更智能化
早在2009年,谢尔盖Chikuyonok写了一篇文章,提出了一种新的编写HTML和CSS代码的方式.这一革命性的插件,被称为zen coding,多年来已帮助许多开发人员,现在已达到一个新的水平. ...
- 将xml转为array
/** * 将xml转为array * @param string $xml * @throws Exception */ public function FromXml($xml) { if (!$ ...
- NoSQL v.s. RDB
RDB 相对于 NoSQL 的劣势: 1. 集中式单点架构 2. 固定的数据模型: 可扩展性差,缺乏处理半结构化和非结构化数据的能力. 3. 扩容成本高:处理海量数据时存在性能瓶颈,大数据时代的存储需 ...
- 【转】利用 Apache JMeter 测试 WebSphere 性能
如果您预算紧张并且时间紧迫 —— 或者即使您不是这样 —— 那么,您可能希望考虑使用 JMeter 来对 Web 和其他应用程序进行压力测试.IBM 的 Greg Herringer 详细描述他使用这 ...
- 写java代码有感。。。构造方法最好带着,
(一) 小结:具体我最大的担心,害怕就是方法调用的时候,new对象之后,赋值,是在new后面的括号里实现,还是在 对象.方法名()这样的.当然带参数的构造方法,调用时本身就直接调用,普通方法,选后者. ...
- TimesTen学习(三)安装、连接、远程连接TimesTen数据库
TimesTen学习(三)远程连接TimesTen数据库 <TimesTen学习(一)安装篇>:http://blog.itpub.net/23135684/viewspace-71774 ...
- 关于微信js接口调用时,token效期问题
如果一个应用的不同模块分配两个独立的公众号微官网使用,这时调用JS接口生成的token一定就冲突,原因是,token的有效期为两个小时. 解决方案: 将两个公众号的APPID与SERVERID分给不同 ...