XSS注入,js脚本注入后台
曾经一度流行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}
>
</body>
</html>
最终的效果:


以上是相关代码。其实XSS攻击就是通过前端input将js脚本注入到后台,解决原理是将<script>中的>转换成> 来解决XSS攻击
原文链接:
http://www.jianshu.com/p/7e259660f7ee
XSS注入,js脚本注入后台的更多相关文章
- XSS攻击 js 脚本注入
原文地址:http://www.cnblogs.com/robot/archive/2009/04/15/1436107.html 1.不要相信Request.QueryString: 相信在asp时 ...
- C#中在AxWebBrowser控件注入JS脚本的方法
/// <summary> /// 窗体加载 /// </summary> private void JS_Load(object sender, EventArgs e) { ...
- 高端黑链SEO—恶意JS脚本注入访问伪随机域名
摘要:我们的服务器又出入侵事故了.有客户的 html 网页底部被插入了一段 js 脚本,导致访客打开网页时被杀毒软件警告网站上有恶意代码.在黑链 SEO 中这是常见的手法,但奇特的地方就在于我们这次捕 ...
- JS脚本加载与执行对性能的影响
高性能JavaScript-JS脚本加载与执行对性能的影响 在web产品优化准则中,很重要的一条是针对js脚本的加载和执行方式的优化.本篇文章简单描述一下其中的优化准则. 1. 脚本加载优化 1.1 ...
- xss脚本注入后端的防护
1.脚本注入最主要的是不要相信用户输入的任何数据,对数据进行转义 可以使用:org.springframework.web.util.HtmlUtils包中的 HtmlUtils.htmlEscape ...
- 【转载】XSS攻击和sql注入
XSS攻击: https://www.cnblogs.com/dolphinX/p/3391351.html 跨站脚本攻击(Cross Site Script为了区别于CSS简称为XSS)指的是恶意攻 ...
- 一文搞懂│XSS攻击、SQL注入、CSRF攻击、DDOS攻击、DNS劫持
目录 XSS 攻击 SQL 注入 CSRF 攻击 DDOS 攻击 DNS 劫持 XSS 攻击 全称跨站脚本攻击 Cross Site Scripting 为了与重叠样式表 CSS 进行区分,所以换了另 ...
- WEB安全:XSS漏洞与SQL注入漏洞介绍及解决方案(转)
对web安全方面的知识非常薄弱,这篇文章把Xss跨站攻击和sql注入的相关知识整理了下,希望大家多多提意见. 对于防止sql注入发生,我只用过简单拼接字符串的注入及参数化查询,可以说没什么好经验,为避 ...
- WEB安全:XSS漏洞与SQL注入漏洞介绍及解决方案
对web安全方面的知识非常薄弱,这篇文章把Xss跨站攻击和sql注入的相关知识整理了下,希望大家多多提意见. 对于防止sql注入发生,我只用过简单拼接字符串的注入及参数化查询,可以说没什么好经验,为避 ...
随机推荐
- iPhone X 网页导航概念
以下内容由Mockplus团队翻译整理,仅供学习交流,Mockplus是更快更简单的原型设计工具. 在移动应用程序设计中,选择汉堡菜单按钮还是标签栏作为导航一直是个古老的争论话题.目前看来,由于 ...
- asp.net core 2.0集成signalr
在博客园也很多年了,一直未曾分享过什么东西,也没有写过博客,但自己也是汲取着博客园的知识成长的: 这两天想着不能这么无私,最近.NET CORE貌似挺流行的,闲来无事也自己搞了个asp.net cor ...
- 老男孩Python全栈开发(92天全)视频教程 自学笔记01
day1课程目录: 开课介绍(1) 开课介绍(2) 开课介绍(3) 电脑简史(1) 电脑简史(2) 计算机结构 day1课程内容梳理: 导师介绍: Alex Li(金角大王):买了一辆特斯拉,喜欢姑娘 ...
- Openning
In order to imporve my english writing skill and enhance my understanding of programming ,I'm setti ...
- CSS实现模糊效果
HTML代码如下: <body> <h1>body设置了模糊效果</h1> <div id="aa"></div> &l ...
- linux环境变量的配置
1.全局环境变量 vi /etc/profile JAVA_HOME=/opt/modules/jdk1.8.0_11/ export PATH=$PATH:$JAVA_HOME/bin:$JAV ...
- 变位词(0029)-swustoj
变位词(0029)水题 变位词如果两个单词的组成字母完全相同,只是字母的排列顺序不一样,则它们就是变位词,两个单词相同也被认为是变位词.如tea 与eat , nic 与cin, ddc与dcd, a ...
- Libevent(2.1.8)中的事件结构和管理
Libevent(2.1.8)中的事件结构体 这里的libevent版本为 2.1.8 . libevent中事件的结构体struct event,定义在event_struct.h 中, 这里我们简 ...
- 35.Linux-分析并制作环形缓冲区
在上章34.Linux-printk分析.使用printk调试驱动里讲述了: printk()会将打印信息存在内核的环形缓冲区log_buf[]里, 可以通过dmesg命令来查看log_buf[] 1 ...
- “核弹级”Android漏洞Janus,黑客可以任意篡改App
美国时间12月9日,Google披露了一个名为"Janus"安卓漏洞.该漏洞可以让攻击者绕过安卓签名机制,从而让攻击者对App进行篡改,安卓5.0到8.0等个版本系统均受影响. 顶 ...