曾经一度流行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攻击

原文链接:

http://www.jianshu.com/p/7e259660f7ee

XSS注入,js脚本注入后台的更多相关文章

  1. XSS攻击 js 脚本注入

    原文地址:http://www.cnblogs.com/robot/archive/2009/04/15/1436107.html 1.不要相信Request.QueryString: 相信在asp时 ...

  2. C#中在AxWebBrowser控件注入JS脚本的方法

    /// <summary> /// 窗体加载 /// </summary> private void JS_Load(object sender, EventArgs e) { ...

  3. 高端黑链SEO—恶意JS脚本注入访问伪随机域名

    摘要:我们的服务器又出入侵事故了.有客户的 html 网页底部被插入了一段 js 脚本,导致访客打开网页时被杀毒软件警告网站上有恶意代码.在黑链 SEO 中这是常见的手法,但奇特的地方就在于我们这次捕 ...

  4. JS脚本加载与执行对性能的影响

    高性能JavaScript-JS脚本加载与执行对性能的影响 在web产品优化准则中,很重要的一条是针对js脚本的加载和执行方式的优化.本篇文章简单描述一下其中的优化准则. 1. 脚本加载优化 1.1 ...

  5. xss脚本注入后端的防护

    1.脚本注入最主要的是不要相信用户输入的任何数据,对数据进行转义 可以使用:org.springframework.web.util.HtmlUtils包中的 HtmlUtils.htmlEscape ...

  6. 【转载】XSS攻击和sql注入

    XSS攻击: https://www.cnblogs.com/dolphinX/p/3391351.html 跨站脚本攻击(Cross Site Script为了区别于CSS简称为XSS)指的是恶意攻 ...

  7. 一文搞懂│XSS攻击、SQL注入、CSRF攻击、DDOS攻击、DNS劫持

    目录 XSS 攻击 SQL 注入 CSRF 攻击 DDOS 攻击 DNS 劫持 XSS 攻击 全称跨站脚本攻击 Cross Site Scripting 为了与重叠样式表 CSS 进行区分,所以换了另 ...

  8. WEB安全:XSS漏洞与SQL注入漏洞介绍及解决方案(转)

    对web安全方面的知识非常薄弱,这篇文章把Xss跨站攻击和sql注入的相关知识整理了下,希望大家多多提意见. 对于防止sql注入发生,我只用过简单拼接字符串的注入及参数化查询,可以说没什么好经验,为避 ...

  9. WEB安全:XSS漏洞与SQL注入漏洞介绍及解决方案

    对web安全方面的知识非常薄弱,这篇文章把Xss跨站攻击和sql注入的相关知识整理了下,希望大家多多提意见. 对于防止sql注入发生,我只用过简单拼接字符串的注入及参数化查询,可以说没什么好经验,为避 ...

随机推荐

  1. iOS 远程推送消息解析及逻辑处理

    关于远程推送的相关配置网上已经有足够多的教程,这里就不复述了.这里讲述当客户端收到推送消息后,应怎样对其进行相应的逻辑处理. 工程的AppDelegate.m文件里提供了如下方法: //当应用程序启动 ...

  2. Javascript中prototype属性

    prototype作为JS相对比较难理解的一个知识点,在这里发表下自己的理解. 本文将包含以下几部分内容: 1.js prototype的简单介绍, 2.js构造函数的介绍, 3.prototype的 ...

  3. 《Linux命令行与shell脚本编程大全》第十六章 控制脚本

    一些控制脚本的方式:向脚本发送信号.修改脚本优先级,在脚本运行时切换到运行模式 16.1 处理信号 linux利用信号与运行在系统中的进程进行通信. 也可以通过对脚本进行编程,使其在收到特定信号时执行 ...

  4. dnsmasq服务的安装与配置

    在ubuntu16.04上安装dnsmasq服务,在本地做泛域名解析 安装 $ apt-get install dnsmasq -y $ /etc/init.d/dnsmasq start 配置 Dn ...

  5. hibernate第二天

    hibernate的核心思想就是将之前对单个字段的操作变为操作一个对象,使用了ORM(Object relation mapping)对象关系映射的思想 · 在hibernate中对数据库特殊字段的有 ...

  6. 【javaFX学习】(二) 控件手册

    这里写的控件可能不是所有的控件,但是应该是比较齐全并足够用的了,后面还有图表类的,3d模型类,放在后面来写吧,太多了.javafx的功能比以前想象中的要强大.而且也很方便,所有的控件写完后再用Scen ...

  7. uva 1418 - WonderTeam

    题意:你n支球队进行比赛,每两支队伍之间进行2场比赛,胜得3分,平得1分,输得0分,比赛后挑选出一个梦之队,要求进球总数最多,胜利场数最多,失球总数最少,并且三种都不能与其它对比列第一.问说梦之队的最 ...

  8. Libevent 事件循环(2)---事件被加入激活队列

    由Libevent 事件循环(1) 在上文中我们提到了libevent 事件循环event_dispatch 的大致过程,以epoll为例,我们看一下事件被如何加入激活队列. //在epoll_dis ...

  9. sendGrid 纯文本的换行问题

    项目中使用sendGrid发送邮件,并且要求纯文本格式,遇到了无法换行的问题(使用\r\n). 解决方案: 1. 在换行符前加空格(官方推荐的做法 https://sendgrid.com/docs/ ...

  10. SQLMap简单尝试

    第一次完成了一个注入呢,虽然是恬不知耻的用sqlmap跑出来的 简单介绍注入时后台的数据等级,有助于后面的理解 ①可以类比成一个装着excel文件的文件夹,每一个excel文件就相当于一个数据库 ②库 ...