一个简单XSS攻击示例及处理
最近项目被第三方工具扫描出来有一个Http head xss cross scripting漏洞,为了修复这个,顺便研究了一下跨站脚本攻击的原理, 跨站脚本攻击基本上就是sql注入的html版, 核心内容就是把一段精心设计的脚本通过网页中的html漏洞由HTTP GET/POST传给服务器并执行. XSS主要有两种,一种是注入的链接需要骗人来点击,目的是劫持用户的cookie; 一种是该脚本已经通过此方法注入了DB,每次有人浏览正常的该网站链接都会执行该脚本,理论上java script能做的都可以做。
我这里有个简单示例,我的网页中由于需求需要判断客户端浏览器来启动对应版本的程序,所以JSP代码中有这一段:
<%
String sz = request.getHeader("user-agent");
...
%>
...
<script type="text/javascript">
var sz = "<%=sz%>";
...(sz.indexOf('Firefox/') != -1 ...) //此处省略,主要是判断HTTP HEAD的信息,取客户浏览器。
</script>
这么一段简单的代码,就有漏洞。 我这里通过chrome正常获取的http head的头是这样的:
Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.57 Safari/537.36
所以var sz ="Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.57 Safari/537.36"
但客户端可以通过修改HTTP HEAD中由浏览器响应的正常属性达到注入目的。通过分析页面源码,可以构造一个字符串 ";alert(document.cookie);"
最终页面代码就变成了:
<script type="text/javascript">
sz = "";alert(document.cookie);""
...
</script>
注入目的达成,如果有人点击了这个链接,可以进一步用脚本将用户的cookie发送给外网的其他服务器,劫持cookie。
解决的方法也比较简单,就是对用户传来的任何信息进行输入检查,如编码。 可以采用JDK的URLEncoder或apache commons的StringEscapeUtils 使script代码不能逃离我们限定的范围。我这里就是这样处理,将
request.getHeader("user-agent")
改成
URLEncoder.encode(request.getHeader("user-agent"))
最终就算html注入进来,结果也变成了:
sz = "%22%3Balert%28document.cookie%29%3B%22";
该脚本无法成为可执行脚本。
本文出自 “祝坤荣” 博客,请务必保留此出处
一个简单XSS攻击示例及处理相关推荐
- 如何在win10+VS2017环境下新建一个简单的WDF示例程序
上一课我们在win10系统+VS2017开发环境下搭建了WDK驱动程序开发环境的搭建,详见我的博客[如何在win10+VS2017环境下安装USB驱动开发套件WDK],今天我们来尝试建立一个最简单的K ...
- java JNI调用C++代码(给出一个简单java application示例和实际java web项目过程及错误解决)(一)
一.简单java application示例篇 转载请注明:https://blog.csdn.net/xitie8523/article/details/79926948 本科毕业设计是图像分割相关 ...
- Web Service入门简介(一个简单的WebService示例)
一.Web Service简介 1.1.Web Service基本概念 Web Service也叫XML Web Service WebService是一种可以接收从Internet或者Intrane ...
- java JNI调用C++代码(给出一个简单java application示例和实际java web项目过程及错误解决)(二)
二.java web 服务器(tomcat)调用图像处理C++代码项目实例 转载请注明:https://blog.csdn.net/xitie8523/article/details/80009821 ...
- java多个mapreduce_一个简单的MapReduce示例(多个MapReduce任务处理)
一.需求 有一个列表,只有两列:id.pro,记录了id与pro的对应关系,但是在同一个id下,pro有可能是重复的. 现在需要写一个程序,统计一下每个id下有多少个不重复的pro. 为了写一个完整的 ...
- java mvc ef_一个简单MVC5 + EF6示例分享
本文所使用的软件及环境: Visual Studio Ultimate 2013; MVC5 + EF6 + .NET Framework 4.5 + LocalDB;Windows 7 x64 Pr ...
- 宏一个简单的宏病毒示例
基于VisualBasicForApplications 其一:录制宏 在word,视图,宏,录制宏选项. 操作比较简单,不再赘述. (注意根据需求选择normal还是当前文档) 例如:录制宏:快捷键 ...
- 一个简单的storyboard示例,其中关于添加navigation的部分可以学习,此前没用过
到storyboard选中我们唯一一个的viewcontroller,找到xcode的菜单栏,Edit->Embed In->NavigationController.这时候storybo ...
- java 过滤攻击报文_Spring Boot XSS 攻击过滤插件使用
XSS 是什么 XSS(Cross Site Scripting)攻击全称跨站脚本攻击,为了不与 CSS(Cascading Style Sheets)名词混淆,故将跨站脚本攻击简称为 XSS,XSS ...
最新文章
- Mysql 都会遭受哪些方面的攻击?
- Static Final用法
- WPF整理-处理没有注意到的异常
- kubernetes(二)k8s组件
- 用js使得输入框input只能输入数字
- 打docker镜像_从安全到镜像流水线,Docker 最佳实践与反模式一览
- nginx+php-fpm 502 bad gateway
- 95-40-105-java.util.concurrent-线程-Executor
- 20 道必看的 Vue 面试题 | 原力计划
- 如何获取客户端MAC地址(三个方法)
- java写培根披萨和海鲜披萨_java子类继承父类实例-披萨的选择实现代码
- 我为什么要学习 Python(2020版)
- C++二叉树的 前中后序遍历(学C++必看必会)深度优先遍历详解
- 手机qq下载文件地址
- 音乐节奏提取matlab,音乐旋律提取算法 附可执行demo
- 双系统启动引导项配置
- 解决Hexo博客的Next主题中阅读全文没有auto_excerpt的问题
- win7下l2pt/sec 的789报错解决
- matlab极坐标画椭圆,matlab怎么画极坐标
- 深度学习训练遇到的坑(一)
热门文章
- ubuntu四个屏幕设置_Linux_从9个方面来立体式地美化Ubuntu 桌面,总结了一下桌面美化的设置。 - phpStudy...
- java swing 树_Java Swing JTree 树形
- 出现“Could not resolve host: www.github.com; Unknown error”错误解决
- python集合属性方法运算_Python基础__字典、集合、运算符
- 如何利用nginx处理DDOS进行系统优化详解
- Java 10.switch语句
- gRPC源码分析(c++)
- UVa 1632 阿里巴巴(区间DP)
- MVC 事物同时保存,更新数据库
- LCD 显示异常定位分析方法