• 精创网络
  • 精创网络
  • 首页
  • 产品优势
  • 产品价格
  • 产品功能
  • 新闻中心
  • 关于我们
  • 在线客服
  • 登录
  • DDoS防御和CC防御
  • 精创网络云防护,专注于大流量DDoS防御和CC防御。可防止SQL注入,以及XSS等网站安全漏洞的利用。
  • 免费试用
  • 新闻中心
  • 关于我们
  • 资讯动态
  • 帮助文档
  • 白名单保护
  • 常见问题
  • 政策协议
  • 帮助文档
  • Java防护实践:防止SQL注入与XSS攻击代码示例
  • 来源:www.jcwlyf.com浏览:15更新:2026-01-09
  • 在Java开发中,安全问题至关重要,其中SQL注入和XSS(跨站脚本攻击)是常见且危害较大的安全威胁。本文将详细介绍Java中防止SQL注入与XSS攻击的实践方法,并给出相应的代码示例。

    SQL注入攻击概述

    SQL注入攻击是指攻击者通过在应用程序的输入字段中注入恶意的SQL代码,从而改变原本的SQL语句逻辑,实现非法的数据操作,如窃取、修改或删除数据库中的数据。常见的攻击场景包括登录表单、搜索框等。

    传统SQL查询存在的问题

    在Java中,使用传统的Statement对象进行SQL查询时,容易受到SQL注入攻击。以下是一个存在安全风险的示例代码:

    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.Statement;
    
    public class VulnerableSQLExample {
        public static void main(String[] args) {
            try {
                Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "root", "password");
                String username = "' OR '1'='1";
                String password = "anypassword";
                String sql = "SELECT * FROM users WHERE username = '" + username + "' AND password = '" + password + "'";
                Statement stmt = conn.createStatement();
                ResultSet rs = stmt.executeQuery(sql);
                if (rs.next()) {
                    System.out.println("Login successful!");
                } else {
                    System.out.println("Login failed!");
                }
                rs.close();
                stmt.close();
                conn.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    在上述代码中,攻击者可以通过构造恶意的输入,如将用户名设置为 "' OR '1'='1",使得SQL语句的逻辑被改变,从而绕过正常的验证机制。

    使用PreparedStatement防止SQL注入

    PreparedStatement是Java中用于执行预编译SQL语句的对象,它可以有效防止SQL注入攻击。以下是使用PreparedStatement改进后的代码示例:

    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    
    public class SecureSQLExample {
        public static void main(String[] args) {
            try {
                Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "root", "password");
                String username = "user";
                String password = "pass";
                String sql = "SELECT * FROM users WHERE username = ? AND password = ?";
                PreparedStatement pstmt = conn.prepareStatement(sql);
                pstmt.setString(1, username);
                pstmt.setString(2, password);
                ResultSet rs = pstmt.executeQuery();
                if (rs.next()) {
                    System.out.println("Login successful!");
                } else {
                    System.out.println("Login failed!");
                }
                rs.close();
                pstmt.close();
                conn.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    在使用PreparedStatement时,SQL语句中的参数使用占位符 "?" 表示,然后通过setXXX()方法设置参数的值。这样,即使输入包含恶意的SQL代码,也会被当作普通的字符串处理,从而避免了SQL注入攻击。

    XSS攻击概述

    XSS攻击是指攻击者通过在网页中注入恶意的脚本代码,当其他用户访问该网页时,脚本代码会在用户的浏览器中执行,从而窃取用户的敏感信息,如会话ID、Cookie等。常见的XSS攻击类型包括反射型XSS、存储型XSS等。

    XSS攻击的常见场景

    反射型XSS攻击通常发生在用户提交的参数直接显示在页面上的情况下,例如搜索结果页面。存储型XSS攻击则是攻击者将恶意脚本代码存储在服务器端,当其他用户访问包含该数据的页面时,脚本代码会被执行。

    使用OWASP ESAPI防止XSS攻击

    OWASP ESAPI(Open Web Application Security Project Enterprise Security API)是一个开源的安全API,它提供了一系列的安全功能,包括防止XSS攻击。以下是一个使用OWASP ESAPI进行XSS过滤的示例代码:

    import org.owasp.esapi.ESAPI;
    import org.owasp.esapi.codecs.HTMLEntityCodec;
    
    public class XSSPreventionExample {
        public static String sanitizeInput(String input) {
            return ESAPI.encoder().encodeForHTML(input);
        }
    
        public static void main(String[] args) {
            String maliciousInput = "<script>alert('XSS attack!')</script>";
            String sanitizedInput = sanitizeInput(maliciousInput);
            System.out.println("Sanitized input: " + sanitizedInput);
        }
    }

    在上述代码中,使用ESAPI的encoder().encodeForHTML()方法对输入进行HTML编码,将特殊字符转换为HTML实体,从而防止恶意脚本代码在浏览器中执行。

    使用JSTL的fn:escapeXml函数防止XSS攻击

    在Java Web开发中,JSTL(JavaServer Pages Standard Tag Library)提供了fn:escapeXml函数,可以方便地对输出进行XML编码,从而防止XSS攻击。以下是一个使用JSTL的示例代码:

    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
    <html>
    <body>
    <c:set var="input" value="<script>alert('XSS attack!')</script>" />Sanitized input: ${fn:escapeXml(input)}</body>
    </html>

    在JSP页面中,使用fn:escapeXml函数对输入进行编码,将特殊字符转换为XML实体,确保输出的内容不会被浏览器解析为脚本代码。

    综合防护措施

    除了以上介绍的方法,还可以采取以下综合防护措施来提高Java应用程序的安全性:

    1. 输入验证:在接收用户输入时,对输入进行严格的验证和过滤,只允许合法的字符和格式。

    2. 输出编码:在输出用户输入时,对输出进行适当的编码,确保不会被浏览器解析为恶意脚本。

    3. 定期更新依赖库:及时更新使用的数据库驱动、Web框架等依赖库,以修复已知的安全漏洞。

    4. 安全审计:定期对应用程序进行安全审计,检查是否存在潜在的安全风险。

    综上所述,防止SQL注入和XSS攻击是Java开发中不可或缺的安全措施。通过使用PreparedStatement防止SQL注入,以及采用OWASP ESAPI、JSTL等工具进行XSS过滤,可以有效提高应用程序的安全性,保护用户的敏感信息。同时,结合综合防护措施,可以进一步增强应用程序的安全性。

  • 关于我们
  • 关于我们
  • 服务条款
  • 隐私政策
  • 新闻中心
  • 资讯动态
  • 帮助文档
  • 网站地图
  • 服务指南
  • 购买流程
  • 白名单保护
  • 联系我们
  • QQ咨询:189292897
  • 电话咨询:16725561188
  • 服务时间:7*24小时
  • 电子邮箱:admin@jcwlyf.com
  • 微信咨询
  • Copyright © 2026 All Rights Reserved
  • 精创网络版权所有
  • 皖ICP备2022000252号
  • 皖公网安备34072202000275号