最近项目被第三方工具扫描出来有一个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攻击示例及处理相关推荐

  1. 如何在win10+VS2017环境下新建一个简单的WDF示例程序

    上一课我们在win10系统+VS2017开发环境下搭建了WDK驱动程序开发环境的搭建,详见我的博客[如何在win10+VS2017环境下安装USB驱动开发套件WDK],今天我们来尝试建立一个最简单的K ...

  2. java JNI调用C++代码(给出一个简单java application示例和实际java web项目过程及错误解决)(一)

    一.简单java application示例篇 转载请注明:https://blog.csdn.net/xitie8523/article/details/79926948 本科毕业设计是图像分割相关 ...

  3. Web Service入门简介(一个简单的WebService示例)

    一.Web Service简介 1.1.Web Service基本概念 Web Service也叫XML Web Service WebService是一种可以接收从Internet或者Intrane ...

  4. java JNI调用C++代码(给出一个简单java application示例和实际java web项目过程及错误解决)(二)

    二.java web 服务器(tomcat)调用图像处理C++代码项目实例 转载请注明:https://blog.csdn.net/xitie8523/article/details/80009821 ...

  5. java多个mapreduce_一个简单的MapReduce示例(多个MapReduce任务处理)

    一.需求 有一个列表,只有两列:id.pro,记录了id与pro的对应关系,但是在同一个id下,pro有可能是重复的. 现在需要写一个程序,统计一下每个id下有多少个不重复的pro. 为了写一个完整的 ...

  6. java mvc ef_一个简单MVC5 + EF6示例分享

    本文所使用的软件及环境: Visual Studio Ultimate 2013; MVC5 + EF6 + .NET Framework 4.5 + LocalDB;Windows 7 x64 Pr ...

  7. 宏一个简单的宏病毒示例

    基于VisualBasicForApplications 其一:录制宏 在word,视图,宏,录制宏选项. 操作比较简单,不再赘述. (注意根据需求选择normal还是当前文档) 例如:录制宏:快捷键 ...

  8. 一个简单的storyboard示例,其中关于添加navigation的部分可以学习,此前没用过

    到storyboard选中我们唯一一个的viewcontroller,找到xcode的菜单栏,Edit->Embed In->NavigationController.这时候storybo ...

  9. java 过滤攻击报文_Spring Boot XSS 攻击过滤插件使用

    XSS 是什么 XSS(Cross Site Scripting)攻击全称跨站脚本攻击,为了不与 CSS(Cascading Style Sheets)名词混淆,故将跨站脚本攻击简称为 XSS,XSS ...

最新文章

  1. Mysql 都会遭受哪些方面的攻击?
  2. Static Final用法
  3. WPF整理-处理没有注意到的异常
  4. kubernetes(二)k8s组件
  5. 用js使得输入框input只能输入数字
  6. 打docker镜像_从安全到镜像流水线,Docker 最佳实践与反模式一览
  7. nginx+php-fpm 502 bad gateway
  8. 95-40-105-java.util.concurrent-线程-Executor
  9. 20 道必看的 Vue 面试题 | 原力计划
  10. 如何获取客户端MAC地址(三个方法)
  11. java写培根披萨和海鲜披萨_java子类继承父类实例-披萨的选择实现代码
  12. 我为什么要学习 Python(2020版)
  13. C++二叉树的 前中后序遍历(学C++必看必会)深度优先遍历详解
  14. 手机qq下载文件地址
  15. 音乐节奏提取matlab,音乐旋律提取算法 附可执行demo
  16. 双系统启动引导项配置
  17. 解决Hexo博客的Next主题中阅读全文没有auto_excerpt的问题
  18. win7下l2pt/sec 的789报错解决
  19. matlab极坐标画椭圆,matlab怎么画极坐标
  20. 深度学习训练遇到的坑(一)

热门文章

  1. ubuntu四个屏幕设置_Linux_从9个方面来立体式地美化Ubuntu 桌面,总结了一下桌面美化的设置。 - phpStudy...
  2. java swing 树_Java Swing JTree 树形
  3. 出现“Could not resolve host: www.github.com; Unknown error”错误解决
  4. python集合属性方法运算_Python基础__字典、集合、运算符
  5. 如何利用nginx处理DDOS进行系统优化详解
  6. Java 10.switch语句
  7. gRPC源码分析(c++)
  8. UVa 1632 阿里巴巴(区间DP)
  9. MVC 事物同时保存,更新数据库
  10. LCD 显示异常定位分析方法