关于HTML 代码注入,XSS攻击问题解决

article/2025/11/4 16:26:22

大部分的网站一般都有评论功能或留言功能,或类似可以让用户写东西的地方。

如果后台不经过处理,又把数据返回前端,这就会出问题了。网页解析器会把用户的信息也当成html代码给解析了。

如果用户写的是一些恶意的 js 脚本这是很危险的。专业术语叫:XSS 攻击

一、举个例子:假设后台和前台都没有对用户的信息,进行处理。我们输入如下的代码:

<script>var body= document.body;             var img = document.createElement("img"); img.setAttribute('style','width:100%;height:100%;z-index:99999;position:fixed;top:0px;')img.src = "https://www.baidu.com/img/bd_logo1.png";  body.appendChild(img); 
</script> 

页面就会变成这样的

整个页面被整个图片覆盖掉

如果是其他的恶意攻击,是可以入侵到你的服务器然后获取到shell 。

二、解决方法:

1、前端过滤

(a)、javascript 原生方法
//转义  元素的innerHTML内容即为转义后的字符  
function htmlEncode ( str ) {  var ele = document.createElement('span');  ele.appendChild( document.createTextNode( str ) );  return ele.innerHTML;  
}  
//解析   
function htmlDecode ( str ) {  var ele = document.createElement('span');  ele.innerHTML = str;  return ele.textContent;  
} 
(b)、JQuery 方法
function htmlEncodeJQ ( str ) {  return $('<span/>').text( str ).html();  
}  function htmlDecodeJQ ( str ) {  return $('<span/>').html( str ).text();  
} 
调用方法
var msg1= htmlEncodeJQ('<script>alert('test');</script>');
var msg1= htmlEncode('<script>alert('test');</script>');
//结果变成:&lt;script&gt;alert('test');&lt;/script&gt;

2、后端过滤

我这里是JAVA 的,其他的另百度

(a)、java 一些框架自动工具类,

比如:org.springframework.web.util.HtmlUtils
public static void main(String[] args) {String content = "<script>alert('test');</script>";System.out.println("content="+content);content = HtmlUtils.htmlEscape(content);System.out.println("content="+content);content = HtmlUtils.htmlUnescape(content);System.out.println("content="+content);
}

但这样有个问题,就是它全部的html标签都不解析了。
可能这不是你想要的,你想要的是一部分解析,一部分不解析。好看下面。

(b)、自己用正则来完成你的需求

下面给你demo ,根据你自己的需求来改就好了。

package top.lrshuai.blog.util;import java.util.regex.Matcher;
import java.util.regex.Pattern;/*** * @author lrshuai* @since 2017-10-13* @version 0.0.1*/
public class HTMLUtils {
/*** 过滤所有HTML 标签* @param htmlStr* @return*/
public static String filterHTMLTag(String htmlStr) {//定义HTML标签的正则表达式 String reg_html="<[^>]+>"; Pattern pattern=Pattern.compile(reg_html,Pattern.CASE_INSENSITIVE); Matcher matcher=pattern.matcher(htmlStr); htmlStr=matcher.replaceAll(""); //过滤html标签 return htmlStr;
}/*** 过滤标签,通过标签名* @param htmlStr* @param tagName* @return*/
public static String filterTagByName(String htmlStr,String tagName) {String reg_html="<"+tagName+"[^>]*?>[\\s\\S]*?<\\/"+tagName+">";Pattern pattern=Pattern.compile(reg_html,Pattern.CASE_INSENSITIVE); Matcher matcher=pattern.matcher(htmlStr); htmlStr=matcher.replaceAll(""); //过滤html标签 return htmlStr;
}/*** 过滤标签上的 style 样式* @param htmlStr* @return*/
public static String filterHTMLTagInStyle(String htmlStr) {String reg_html="style=('|\")(.*?)('|\")";Pattern pattern=Pattern.compile(reg_html,Pattern.CASE_INSENSITIVE); Matcher matcher=pattern.matcher(htmlStr); htmlStr=matcher.replaceAll(""); //过滤html标签 return htmlStr;
}/*** 替换表情* @param htmlStr* @param tagName* @return*/
public static String replayFace(String htmlStr) {String reg_html="\\[em_\\d{1,}\\]";Pattern pattern =Pattern.compile(reg_html,Pattern.CASE_INSENSITIVE); Matcher matcher=pattern.matcher(htmlStr);if(matcher.find()) {matcher.reset();while(matcher.find()) {String num = matcher.group(0);String number=num.substring(num.lastIndexOf('_')+1, num.length()-1);htmlStr = htmlStr.replace(num, "<img src='/face/arclist/"+number+".gif' border='0' />");}}return htmlStr;
}public static void main(String[] args) {String html = "<script>alert('test');</script><img src='/face/arclist/5.gif' border='0' /><div style='position:fixs;s'></div><style>body{color:#fff;}</style><Style>body{color:#fff;}</Style><STYLE>body{color:#fff;}</STYLE>";System.out.println("html="+html);html = HTMLUtils.filterTagByName(html, "style");System.out.println("html="+html);html = HTMLUtils.filterTagByName(html, "script");System.out.println("html="+html);html = HTMLUtils.filterHTMLTagInStyle(html);System.out.println("html="+html);}}
下班了,哪天有空再补充

参考自: http://blog.csdn.net/taoerchun/article/details/50778799
正文到此结束,谢谢观看,觉得有用,点个赞可好!!!
博客:http://www.lrshuai.top/blog


http://chatgpt.dhexx.cn/article/WlHJm0Z7.shtml

相关文章

实验三:XSS和SQL注入

实验三&#xff1a;XSS和SQL注入 实验目的&#xff1a; 实验目的&#xff1a;了解什么是XSS&#xff1b;了解XSS攻击实施&#xff0c;理解防御XSS攻击的方法&#xff1b;了解SQL注入的基本原理&#xff1b;掌握PHP脚本访问MySQL数据库的基本方法&#xff1b;掌握程序设计中避…

XSS注入漏洞解决方法(高风险)

漏洞描述 攻击者往Web页面里插入恶意Script代码&#xff0c;当用户浏览该页之时&#xff0c;嵌入其中Web里面的Script代码会被执行&#xff0c;从而达到恶意攻击用户的目的。 漏洞验证 通过在页面中的留言板&#xff0c;提交框&#xff0c;录入信息框等能够提交参数的地方&a…

XSS注入——DOM型XSS

DOM型xss XSS根据恶意脚本的传递方式可以分为3种&#xff0c;分别为反射型、存储型、DOM型&#xff0c;前面两种恶意脚本都会经过服务器端然后返回给客户端&#xff0c;相对DOM型来说比较好检测与防御&#xff0c;而DOM型不用将恶意脚本传输到服务器在返回客户端&#xff0c;这…

XSS注入之xss-labs

目录 &#xff08;一&#xff09;配置环境 &#xff08;1&#xff09;phpstudy 的安装 &#xff08;2&#xff09;xss-labs 的安装 &#xff08;二&#xff09;XSS漏洞的一些基础知识 &#xff08;1&#xff09;XSS漏洞的定义 &#xff08;2&#xff09;XSS漏洞的原理 &…

sql注入和xss注入有什么不一样呢?

在OWASP Top10中注入排在第一位&#xff0c;xss排在第七位&#xff0c;那么问题问题就来了&#xff0c;sql注入和xss注入都是注入&#xff0c;为什么要单独把xss单独拿出来排个名呢&#xff1f;他俩到底有啥区别&#xff0c;各自的特点是啥&#xff1f;本文不对它俩做详细的讲解…

xss漏洞攻防

XSS基本概念和原理说明 基本概念 XSS又叫CSS (Cross Site Script) &#xff0c;跨站脚本攻击。它指的是恶意攻击者往Web页面里插入恶意html代码&#xff0c;当用户浏览该页之时&#xff0c;嵌入其中Web里面的html代码会被执行&#xff0c;从而达到恶意的特殊目的。XSS属于被动…

XSS注入——反射性XSS

xss注入的攻击步骤&#xff1a; 1.查找可能存在的注入点&#xff08;搜索框&#xff0c;留言板&#xff0c;注册&#xff09; 2.观察输出显示位置&#xff1a; html&#xff1a; 尖括号外部&#xff0c; 尖括号内部: 引号内部》闭合&#xff0…

XSS注入的原理与实现

一、JavaScript的常用脚本 1.window.location.href 用来跳转页面 eg:<script>window.location.hrefwww.jd.com</script> 2.document.cookie 获取客户端的cookie值 3.script 可以通过“src”属性引入JavaScript文件 二、什么是同源策略 同源策略在web应用的安…

XSS注入(跨站脚本攻击)

今天学习一下xss注入 1.XSS是什么 XSS注入漏洞又称为"跨站脚本攻击(Cross Site Scripting)"&#xff0c;为了不和层叠样式表(Cascading Style Sheets,CSS)混淆&#xff0c;所以将跨站脚本攻击缩写为XSS。xss本质上是黑客通过对网页的HTML注入&#xff0c;篡改了原本…

xss注入教程与总结

xss注入个人总结 1 " < >可以用URL编码 %22 %3c %3e HTML 编码 &quot; < > 代替 2 如果过滤 可以用%2522 %26colon; 这种代替尝试 二次转码 3 如果输入框有历史记录 &#xff0c;个人简介注意使用 发现很多网站对输入框有过滤缺但没有过滤历史记录这些…

XSS注入(1)-两个简单测试理解反射型xss注入和存储型xss注入

XSS注入(1)-两个例子理解反射型xss注入和存储型xss注入 XSS全称 Cross Site Script&#xff0c;为使与css语言重名&#xff0c;所以我们将其称为xss跨站脚本攻击。它指的是恶意攻击者往Web页面里插入恶意脚本代码&#xff0c;而程序对于用户输入内容未过滤&#xff0c;当用户浏…

xss漏洞注入

定义&#xff1a; XSS攻击通常指的是通过利用网页开发时留下的漏洞&#xff0c;通过巧妙的方法注入恶意指令代码到网页&#xff0c;使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript&#xff0c;但实际上也可以包括Java、 VBScript、ActiveX、 Fla…

XSS-Lab(XSS注入笔记1-16)

前言 本篇博客主要是记录笔者完成XSS-Lab步骤以及分析 题目链接&#xff1a;https://buuoj.cn/challenges#XSS-Lab Github仓库&#xff1a;https://github.com/rebo-rn/xss-lab 出题人的题解&#xff1a;https://github.com/Re13orn/xss-lab/blob/master/XSSwrite%20up.doc…

XSS注入原理以及一些绕过姿势

介绍 XSS——跨站脚本攻击。通过这个攻击手段&#xff0c;攻击者可以将恶意的 JavaScript 代码插入存在 XSS 漏洞的 Web 页面中&#xff0c;当用户浏览带有恶意代码的页面时&#xff0c;这些恶意代码会被触发&#xff0c;从而达到攻击的目的。可以说&#xff0c;XSS 是针对用户…

XSS注入基础入门篇

XSS注入基础入门篇 1.XSS基础概念2. XSS的分类以及示例2.1 反射型XSS2.1.1 示例1&#xff1a;dvwa low 级别的反射型XSS2.1.2 攻击流程 2.2 DOM型XSS2.2.1 示例2&#xff1a;DOM型XSS注入1.环境部署2.基础版本3.进阶绕过 2.3 存储型XSS2.3.1 示例1&#xff1a;dvwa low示例2.3.…

XSS跨站脚本注入详解

一、什么是XSS跨站脚本注入(XSS注入)? XSS(Cross-site scripting)注入是一种Web安全漏洞,它允许攻击者在受害者的浏览器上执行恶意脚本,从而导致攻击者能够窃取受害者的敏感信息或者利用受害者的身份在应用程序上执行未经授权的操作。 攻击者通常会在受害者访问的Web页…

XSS注入

文章目录 前言一、XSS是什么&#xff1f;二、XSS的大致分类与利用思路1.反射型2.存储型3.DOM型 三、不同类型的XSS漏洞注入演示1.反射型xss2.存储型xss3.DOM型xss 三、XSS漏洞实战1.制作钓鱼网站获得用户的用户名和密码2.获取管理员的cookie 总结 前言 本篇文章详细讲解XSS漏洞…

XSS注入测试

XSS 全称(Cross Site Scripting) 跨站脚本攻击&#xff0c; 是Web程序中最常见的漏洞。指攻击者在网页中嵌入客户端脚本(例如JavaScript), 当用户浏览此网页时&#xff0c;脚本就会在用户的浏览器上执行&#xff0c;从而达到攻击者的目的. 比如获取用户的Cookie&#xff0c;导…

MySQL和Navicat的安装与配置

mysql和navicat的安装与配置 MySQL的安装与配置Navicat的安装与配置 安装下载&#xff1a; MySQL下载 Navicat下载 MySQL的安装与配置 将mysql文件夹转移到自己想放置的路径下 复制mysql的bin路径 打开环境变量配置 右击【此电脑】&#xff0c;打开【属性】&#xff0c;打开…

手把手教你安装MySQL+Navicat

本文为个人于 Windows10&#xff08;64位&#xff09;操作系统下 安装MySQL&#xff08;版本号&#xff1a;8.0.18&#xff09;和Navicat&#xff08;版本号&#xff1a;12&#xff09;的过程记录&#xff0c;希望也能给你带来帮助。 目录 一、MySQL的安装1. 卸载电脑上已有版…