由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文 ...
随机推荐
- PHP设置脚本最大执行时间的三种方法
php.ini 中缺省的最长执行时间是 30 秒,这是由 php.ini 中的 max_execution_time 变量指定,如果脚本需要跑很长时间,例如要大量发送电子邮件,或者分析统计大量数据,服 ...
- 军哥 LNMP 常见问题
安装memcached出错: Install memcached...Notice: memcached-1.4.25.tar.gz not found!!!download now...--2016 ...
- 20 几个知名公司的 Java 面试题汇总
查看不同公司新鲜真实的Java面试题,摘自Glassdoor.com 巴克莱投资: 假设有一个 getNextparson() 方法返回 Person 对象,Person 类实现了 comparabl ...
- SharePoint2013 中集成AD RMS 与Office Web App 2013集成
SharePoint2010时Office Web App2010是一个让人又爱又恨的产品,尽管能够在WEB上查看与编辑文档,甚至能够多能协同编辑,但总会遇到两个看似普通的需求却需要给业务人员大费口舌 ...
- PHP应用的CI/CD流程实践与学习:一、PHP运行环境的准备
前言:一直以来想学习与实践一下敏捷开发,之前项目虽说口口声声我们项目是敏捷开发,其实很扯. 敏捷开发如果有持续集成.持续部署的支持,那样开发.测试.运维将节省不少精力. 此系列博客只为记录CI/CD的 ...
- Unit05: 实战技巧 、 资费列表 、 拦截器
Unit05: 过滤器解决表单写中文乱码.拦截器 1. 使用过滤器解决表单中文参数值乱码问题 注意: a. 表单提交方式必须为POST. b. 过滤器的编码应该与浏览器端设置的编码一致. 2. 拦截器 ...
- WPF ComboBox下拉绑定Treeview 功能的实现
因为项目需要,接触到这个功能点,借助网络还有自己的一点摸索,实现了这个功能.相关代码如下: XAML部分的代码: <ComboBox Grid.Row=" RenderTransfor ...
- 以太坊(二)安装Solidity编译器
官方地址:https://solidity.readthedocs.io/en/develop/installing-solidity.html 推荐使用 remix 快速学习solidity ...
- AngularJS.js: 杂项
ylbtech-AngularJS.js: 杂项 AngularJS诞生于2009年,由Misko Hevery 等人创建,后为Google所收购.是一款优秀的前端JS框架,已经被用于Google的多 ...
- ConditionObject分析
ConditionObject是AQS中的内部类,提供了条件锁的同步实现,实现了Condition接口,并且实现了其中的await(),signal(),signalALL()等方法. Condi ...