第四周03

今天着重学习了 Java Web 开发中的安全知识。安全是 Web 应用的重要组成部分,关乎用户数据的保护和系统的稳定运行。
首先是防止 SQL 注入攻击。前面提到的PreparedStatement是防范 SQL 注入的有效手段。以一个用户登录验证的场景为例,如果使用Statement,代码可能如下:
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;

public class LoginWithStatement {
public static boolean validateUser(String username, String password) {
Connection connection = null;
Statement statement = null;
ResultSet resultSet = null;
try {
connection = DBUtil.getConnection();
statement = connection.createStatement();
String sql = "SELECT * FROM users WHERE username = '" + username + "' AND password = '" + password + "'";
resultSet = statement.executeQuery(sql);
return resultSet.next();
} catch (Exception e) {
e.printStackTrace();
return false;
} finally {
// 关闭资源
}
}
}

这种写法存在严重的 SQL 注入风险,恶意用户可以通过在用户名或密码输入框中输入特殊字符来改变 SQL 语句的逻辑。而使用PreparedStatement可以有效避免这种情况:
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

public class LoginWithPreparedStatement {
public static boolean validateUser(String username, String password) {
Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
try {
connection = DBUtil.getConnection();
String sql = "SELECT * FROM users WHERE username =? AND password =?";
preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1, username);
preparedStatement.setString(2, password);
resultSet = preparedStatement.executeQuery();
return resultSet.next();
} catch (Exception e) {
e.printStackTrace();
return false;
} finally {
// 关闭资源
}
}
}

其次是防范 XSS(跨站脚本攻击)。XSS 攻击通常是通过在 Web 页面中注入恶意脚本,窃取用户信息或进行其他恶意操作。在 JSP 页面中输出用户输入内容时,如果不进行处理,就容易遭受 XSS 攻击。例如:
<%@ page contentType="text/html; charset=UTF-8" language="java" %>

XSS Example <% String userInput = request.getParameter("input"); out.println(userInput); %>

恶意用户可以在input参数中输入,这样脚本就会在页面中执行。为了防止 XSS 攻击,可以使用 JSTL(JavaServer Pages Standard Tag Library)的fn:escapeXml函数对输出内容进行转义:
<%@ page contentType="text/html; charset=UTF-8" language="java" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>

XSS Safe Example <% String userInput = request.getParameter("input"); out.println("

" + fn:escapeXml(userInput) + "

"); %>

通过对 Web 安全基础知识的学习,我认识到在开发过程中需要时刻保持安全意识,采取有效的措施来保护 Web 应用和用户数据。

posted @ 2025-02-07 17:54  Echosssss  阅读(10)  评论(0)    收藏  举报