html5作业 建设网站,2024年新冠第三波症状分析,个人云平台,世界500强企业排名表简介
XSS#xff08;Cross Site Scripting#xff09;是一种常见的 Web 安全漏洞#xff0c;攻击者通过在网页中注入恶意脚本代码#xff0c;使得网页在用户端执行这些脚本#xff0c;从而窃取用户信息或者进行其他恶意操作。为了防止 XSS 攻击#xff0c;可以使用正则表…简介
XSSCross Site Scripting是一种常见的 Web 安全漏洞攻击者通过在网页中注入恶意脚本代码使得网页在用户端执行这些脚本从而窃取用户信息或者进行其他恶意操作。为了防止 XSS 攻击可以使用正则表达式对用户输入的数据进行过滤和清理。 XSS 攻击的原理
XSS 攻击通常包含以下几个步骤
攻击者在目标网页中注入恶意的脚本代码。用户访问目标网页时浏览器会解析并执行这些恶意代码。恶意代码在用户的浏览器中执行可以获取用户的敏感信息或者进行其他恶意操作。
为了防止 XSS 攻击需要对用户输入的数据进行过滤和清理确保其中不包含恶意的脚本代码。 XSS 的分类 反射型 XSS也称为非持久性 XSS是最常见的一种 XSS XSS 代码常常出现在 URL 请求中当用户访问带有 XSS 代码的 URL 请求时服务器端接收请求并处理然后将带有 XSS 代码的数据返回给浏览器浏览器解析该段带有 XSS 代码的数据并执行整个过程就像一次反射故称为反射型 XSS。 该类攻击的主要特点是它的及时性和一次性即用户提交请求后响应信息会立即反馈给用户。该类攻击常发生在搜索引擎、错误提示页面等对用户的输入做出直接反应的场景中。 存储型 XSS也称为持久性 XSS 在存储型 XSS 中XSS 代码被存储到服务器端因此允许用户存储数据到服务器端的 Web 应用程序可能存在该类型 XSS 漏洞。攻击者提交一段 XSS 代码后服务器接收并存储当其他用户访问包含该 XSS 代码的页面时XSS 代码被浏览器解析并执行。 存储型 XSS 攻击的特点之一是提交的恶意内容会被永久存储因而一个单独的恶意代码就会使多个用户受害故被称为持久性 XSS它也是跨站脚本攻击中危害最的一类。二是被存储的用户提交的恶意内容不一定被页面使用因此存在危险的响应信息不一定被立即返回也许在访问那些在时间上和空间上没有直接关联的页面时才会引发攻击因此存在不确定性和更好的隐蔽性。 这类攻击的一个典型场景是留言板、博客和论坛等当恶意用户在某论坛页面发布含有恶意的 Javascript 代码的留言时论坛会将该用户的留言内容保存在数据库或文件中并作为页面内容的一部分显示出来。当其他用户查看该恶意用户的留言时恶意用户提交的恶意代码就会在用户浏览器中解析并执行。 DOM 型 XSSDOM (Document Objet Model) 指文档对象模型 DOM 常用来表示在 HTML 和 XML 中的对象。DOM 可以允许程序动态的访问和更新文档的内容、结构等。客户端 JavaScript 可以访问浏览器的文档对象模型。也就是说通过 JavaScript 代码控制 DOM 节点就可以不经过服务器端的参与重构 HTML 页面。 该类攻击是反射型 XSS 的变种。它通常是由于客户端接收到的脚本代码存在逻辑错误或者使用不当导致的。比如 Javascript 代码不正确地使用各种 DOM 方法如 document.write和 Javascript 内部函数如 eval 函数动态拼接 HTML 代码和脚本代码就容易引发 DOM 型的跨站脚本攻击。 因此DOM 型 XSS 与前面两种 XSS 的区别就在于 DOM 型 XSS 攻击的代码不需要与服务器端进行交互DOM 型 XSS 的触发基于浏览器端对 DOM 数据的解析来完成也就是完全是客户端的事情。 修复方案
方案1hotool 工具
注该方案可以通过奇安信的代码扫描在 controller 层把请求对象和返回对象都使用该方式进行过滤
依赖引入
dependencygroupIdcn.hutool/groupIdartifactIdhutool-all/artifactIdversion5.8.26/version
/dependency代码
// 清除所有HTML标签但是不删除标签内的内容
String s HtmlUtil.cleanHtmlTag(dddddsfsd/ddd);
// 清理对象中所有属性值的所有HTML标签但是不删除标签内的内容
User userNew JSONObject.parseObject(HtmlUtil.cleanHtmlTag(JSON.toJSONString(userOld)), User.class);方案2过滤 XSS 攻击的正则表达式代码
注该方案并不能通过奇安信的代码扫描
public class XssFilter {public static final String HTML_REGEX [^]*;public static final String SPECIAL_CHAR_REGEX [\\|\\|\\|\\|\\\|\\%|\\;|\\(|\\)|\\];public static final String JS_REGEX javascript:;/*** 组合过滤*/public static String filterGroup(String inputText) {if (null inputText) return inputText;return filterJS(filterSpecialChar(filterHTML(inputText)));}/*** 过滤HTML标签*/public static String filterHTML(String inputText) {if (null inputText) return inputText;return inputText.replaceAll(HTML_REGEX, );}/*** 过滤特殊字符*/public static String filterSpecialChar(String inputText) {if (null inputText) return inputText;return inputText.replaceAll(SPECIAL_CHAR_REGEX, );}/*** 过滤JavaScript代码*/public static String filterJS(String inputText) {if (null inputText) return inputText;return inputText.replaceAll(JS_REGEX, );}
}