曾经一度流行sql注入,由于现在技术的更新,已经看不到这问题了,但是又出来新的安全问题,XSS攻击,他的原理就是在前端提交表单的时候,在input标签当中输入js脚本,通过js脚本注入后台,请看下图.

这里用用原生servlet做说明,帮助大家理解。

以下是我项目的路径

以上是我的项目结构。首先需要配置pom.xml把jar下载,第二步新建,XSSFilete.java这是一个过滤器。然后新建XSSRequest,这是相当于HttpServlet的子类,重写getParmeter方法。DoFromServlet主要是用来测试的,通过前端传js脚本避免出现XSS攻击。

1.配置pom.xml

<project xmlns=

"http://maven.apache.org/POM/4.0.0"

xmlns:xsi=

"http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation=

"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"

>

<modelVersion>4.0.0</modelVersion>

<groupId>com.itmayideu.xss</groupId>

<artifactId>

xssfilter

</artifactId>

<version>0.0.1-SNAPSHOT</version>

<packaging>war</packaging>

<build/>

<dependencies>

<dependency>

<groupId>org.apache.commons</groupId>

<artifactId>commons-lang3</artifactId>

<version>3.4</version>

</dependency>

<dependency>

<groupId>javax.servlet</groupId>

<artifactId>javax.servlet-

api

</artifactId>

<version>3.0.1</version>

<scope>provided</scope>

</dependency>

<dependency>

<groupId>javax.servlet.jsp</groupId>

<artifactId>

jsp

-

api

</artifactId>

<version>2.1</version>

<scope>provided</scope>

</dependency>

</dependencies>

</project>

第二步:

编写XSSFilete过滤器

package com.sunjian.xssfilter;

import java.io.IOException;

import javax.servlet.Filter;

import javax.servlet.FilterChain;

import javax.servlet.FilterConfig;

import javax.servlet.ServletException;

import javax.servlet.ServletRequest;

import javax.servlet.ServletResponse;

import javax.servlet.http.HttpServletRequest;

public class XSSFilete implements Filter{

@Override

public void init(FilterConfig arg0) throws ServletException {

}

@Override

public void doFilter(ServletRequest request, ServletResponse response,

FilterChain chain) throws IOException, ServletException {

//解决XSS攻击手段思路,将表单提交的参数全部转换成html语言进行保存

HttpServletRequest req = (HttpServletRequest) request;

XSSRequest httpServletRequestWrapper = new XSSRequest(req);

chain.doFilter(httpServletRequestWrapper, response);

}

@Override

public void destroy() {

}

}

第三步:XSSRequest继承HttpServletRequestWrapper

package com.sunjian.xssfilter;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletRequestWrapper;

import org.apache.commons.lang3.StringEscapeUtils;

import org.apache.commons.lang3.StringUtils;

public class XSSRequest extends HttpServletRequestWrapper{

HttpServletRequest request;

public XSSRequest(HttpServletRequest request) {

super(request);

this.request = request;

}

/**

* 重写方法

*/

@Override

public String getParameter(String name) {

String value = request.getParameter(name);

if(!StringUtils.isEmpty(value)){

System.out.println("转换前value:"+value);

// 将value转换成html,就是会将一些脚本元素转换成html进行返回。

value = StringEscapeUtils.escapeHtml4(value);

System.out.println("转换后value:"+value);

}

return value;

}

}

第四部编写DoFromServlet接口

package com.sunjian.xssfilter;

import java.io.IOException;

import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

@WebServlet("/DoFromServlet")

public class DoFromServlet extends HttpServlet{

@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp)

throws ServletException, IOException {

System.out.println("DoFromServlet");

String userName = req.getParameter("userName");

req.setAttribute("userName", userName);

//将参数转发到另一个页面进行展示。

req.getRequestDispatcher("showUserName.jsp").forward(req, resp);

}

}

第五步:配置web.xml,配置过滤器

<?xml version=

"1.0"

encoding=

"UTF-8"

?>

<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN" "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">

<web-app id=

"WebApp_ID"

>

<display-name>

xssfilter

</display-name>

<welcome-file-list>

<welcome-file>index.html</welcome-file>

<welcome-file>index.htm</welcome-file>

<welcome-file>index.jsp</welcome-file>

<welcome-file>default.html</welcome-file>

<welcome-file>default.htm</welcome-file>

<welcome-file>default.jsp</welcome-file>

</welcome-file-list>

<filter>

<filter-class>com.sunjian.xssfilter.XSSFilete</filter-class>

<filter-name>XSSFilete</filter-name>

</filter>

<filter-mapping>

<filter-name>XSSFilete</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

</web-app>

第六步:编写前端form.jsp

<%@ page language=

"java"

contentType=

"text/html; charset=UTF-8"

pageEncoding=

"UTF-8"

%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv=

"Content-Type"

content=

"text/html; charset=UTF-8"

>

<title>Insert title here</title>

</head>

<body>

<form action=

"DoFromServlet"

method=

"post"

>

用户名是<input type=

"text"

name=

"userName"

>

<input type=

"submit"

value=

"提交"

>

</form>

</body>

</html>

第七部:showUserName.jsp

<%@ page language=

"java"

contentType=

"text/html; charset=UTF-8"

pageEncoding=

"UTF-8"

%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<%@ page isELIgnored=

"false"

%>

<html>

<head>

<meta http-equiv=

"Content-Type"

content=

"text/html; charset=UTF-8"

>

<title>Insert title here</title>

</head>

<body>

<h1>测试index.jsp</h1>

用户名是::${userName}

&gt;

</body>

</html>

最终的效果:

以上是相关代码。其实XSS攻击就是通过前端input将js脚本注入到后台,解决原理是将<script>中的>转换成&gt;  来解决XSS攻击

如果喜欢就给个赞吧。

关注我的公众号,都是满满的干货!

孙坚.gif

XSS注入,js脚本注入后台相关推荐

  1. 浏览器自动注入js脚本

    浏览器自动注入js脚本 网页一般把js函数放在head元素内,注入js脚本实际上就是给head元素添加一个script的子元素.       在木头浏览器项目管理器中新建一个填写内容的步骤,添加填写项 ...

  2. html避免js脚本注入,chrome浏览器拓展——js脚本拦截及注入

    概要 该浏览器拓展插件是拥有为页面拦截和注入js功能的chrome浏览器扩展,可以拦截页面脚本.检索页面脚本文件.下载页面脚本文件.为页面注入js文件,以及为页面注入requirejs和require ...

  3. 利用chrome插件,向页面中注入js脚本

    缘由 我的电脑插入耳机后外音不会自动关闭,然后在realtek高清晰音频管理器里面设置还是没有用,然后我就想到大概是最近win10经常更新,然后这个管理器版本不对导致的,于是就去realtek官网打算 ...

  4. 怎么在别人网站注入js脚本_别人的网站是怎么实现引流的?这些站外SEO技巧是关键...

    点击上方蓝字关注我们! 因为分享,我们相遇在SEO路上 "网站上线一段时间了,为什么没有流量?为什么没有询盘?" 对于做网络营销的企业而言,网站流量与询盘是建立网站的根本目的,可是 ...

  5. 怎么在别人网站注入js脚本_爱奇艺视频网站上被别人上传公司负面信息怎么解决好...

    奇艺,中国高品质视频娱乐服务提供者,在上面也会发现公司的负面信息这个要怎么解决好呢? 1.我们打开百度搜索(功夫茶公关) 2.找到对应的网站联系网站管理员帮助处理. 百度搜索结果 更多关于爱奇艺知识 ...

  6. laravel过滤富文本提交的标签(防止XSS等js脚本攻击)

    1.安装sdk composer require mews/purifier2.完成后,在配置文件config/app.php的providers中注册HTMLPurifier服务提供者: 'prov ...

  7. | JavaScript脚本注入,完成Selenium 无法做到的那些事

    浏览器访问:https://hub.docker.com/_/nginx 查看Nginx镜像详细信息. 当 webdriver 遇到无法完成的操作时,可以使用 JavaScript 来完成,webdr ...

  8. WebView与JS的那些事:注入JS提取页面图片

    上一篇博文中,我们大概了解了js与webview的一些交互,然而,在我们实际的应用中,更倾向于在android端对网页做一些处理,今天带给大家的是往页面注入JS脚本,提取页面上的图片,然后通过另一个A ...

  9. Electron中实现通过webview实现内嵌网页并嵌入css样式和js脚本等

    场景 用HTML和CSS和JS构建跨平台桌面应用程序的开源库Electron的介绍以及搭建HelloWorld: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/a ...

最新文章

  1. FPGA的设计艺术(14)使用函数和任务提升逻辑的可重用性
  2. C#桌面开发的未来WebWindow
  3. 后台审核管理 ergo_Kogito,ergo规则:从知识到服务,轻松自如
  4. Spring基础学习笔记-Bean的基础知识
  5. 两个摄像头合成一路_教你把一个摄像机添加到两台录像机
  6. Django搭建个人博客:文章标签功能
  7. 矛与盾——扫描器盲打对主动安全防护的启示
  8. 马云谈 5G 危机;腾讯推出车载版微信;Ant Design 3.22.1 发布 | 极客头条
  9. NBU查看备份集大小
  10. Unity(十):3D角色移动跳跃
  11. 输出今天是星期几并计算n天后的日期(万年历)
  12. Android闪闪发光字体
  13. 国家代码查询表(ISO 3166 Codes A2)
  14. MacOSx打包dmg文件(带背景图片)
  15. h264 i p 帧特点
  16. 那些让人“上瘾”的产品,是如何铺设流量陷阱的?
  17. Editplus文件在linux下乱码,EditPlus中文乱码怎么办-解决EditPlus中文出现乱码的方法 - 河东软件园...
  18. bootsqm.dat是什么文件 bootsqm.dat可以删除吗
  19. SQLite安装配置详细教程2023版
  20. Python中矩阵运算中的norm范数、axis、ord参数

热门文章

  1. 如何解决js地址栏中传递中文乱码的问题
  2. Python练习之购物车
  3. VC双缓冲画图技术介绍
  4. Fastreport 分组多列排序问题
  5. 约瑟夫问题的数学方法
  6. 【C++笔记】运算符重载
  7. java 面试题 生产者 消费者_面试大厂必看!就凭借这份Java多线程和并发面试题,我拿到了字节和美团的offer!...
  8. android单例模式代码,设计模式(一):Android 源码中的单例模式
  9. python远程linux服务器执行命令_基于使用paramiko执行远程linux主机命令(详解)
  10. 聚类时需要标准化吗_收房时,需要请专业验房师吗?