package Persist_XSS;
import javax.servlet.http.*;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.io.IOException;
import java.util.logging.Logger;
public class Persist_XSS
{
public PreparedStatement statement = null;
public ResultSet rs = null;
static final Logger log = Logger.getLogger("local-logger");
public void bad(HttpServletRequest request, HttpServletResponse response,Connection conn)
{
String data = ""; /* init data */
try {
statement = conn.prepareStatement("select name from users where name = 'lily'");
rs = statement.executeQuery();
data = rs.getString(1);
} catch (SQLException e1) {
log.info("SQLException");
}finally {
try {
rs.close();
} catch (SQLException se) {
log.info("Error closing conn");
}
try {
statement.close();
} catch (SQLException se) {
log.info("Error closing conn");
}
try {
conn.close();
} catch (SQLException se) {
log.info("Error closing conn");
}
}
if (data != null)
{
/* POTENTIAL FLAW: data not validated */
try {
response.getWriter().println("
bad() - Parameter name has value " + data); // bad 存储型XSS
} catch (IOException e) {
log.info("IOException");
}
}
}
public void good(HttpServletRequest request, HttpServletResponse response)
{
String data;
/* FIX: Use a hardcoded string */
data = "foo";
/* POTENTIAL FLAW: data not validated */
try {
response.getWriter().println("
bad() - Parameter name has value " + data); // good 存储型XSS
} catch (IOException e) {
log.info("IOException");
}
}
}