gpt4 book ai didi

java - java中如何过滤输入文本中的特殊字符以防止XSS攻击?

转载 作者:行者123 更新时间:2023-12-01 23:11:17 24 4
gpt4 key购买 nike

我试图阻止在用户名字段中提交特殊字符,例如(&、%、--、>、<)。下面是我编写的代码,但它没有得到遵守,我收到错误(未封闭的字 rune 字)。请告诉我我做错了什么,这是阻止这些特殊字符的正确方法吗?

  package pack.java;
import pack.java.MyModel;
import java.io.*;
import java.lang.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;
import java.sql.*;
public class MyController extends TagSupport
{

HttpServletRequest request;
HttpServletResponse response;
String msg="";
String empid="";
public int doStartTag()throws JspException
{

request=(HttpServletRequest)pageContext.getRequest();
response=(HttpServletResponse)pageContext.getResponse();
return EVAL_PAGE;
}

public void check()
{

HttpSession mysession=request.getSession();
Connection con;
CallableStatement stmt;
ResultSet rs;
JspWriter out=pageContext.getOut();
int f=0;
try
{
Class.forName("oracle.jdbc.driver.OracleDriver");
}
catch(ClassNotFoundException ex)
{
msg=ex.getMessage();
}
try
{


String aa=(String)MyModel.name.trim();
String bb=(String)MyModel.pass.trim();
String cc="";
String dd="";
int i;
int user =aa.length();
int pass = bb.length();
for (i=0; i<user; i++)
{
char u = aa.charAt(i);

if ( u.equals(%) || u.equals(<) || u.equals(>) || u.equals(&) || u.equals(;) ||

u.equals(') || u.equals(--) || u.equals(0))
{
out.println("Invalid Username !");
}
else
{
cc+= u.toString();
}
}
con= DriverManager.getConnection ("jdbc:oracle:thin:@localhost:1521:XE","gaurav","oracle");
stmt=con.prepareCall("select usercheck1(?,?) from dual");
stmt.setString(1,cc);
stmt.setString(2,bb);
rs=stmt.executeQuery();

try
{
while (rs.next())
{
empid=rs.getString (1);
mysession.setAttribute("user",empid);
if(empid!=null)
{
response.sendRedirect("/Myjsp/selectaction.jsp");
}
else
out.println("InValid User");
}
}
catch(Exception ex)
{
msg=ex.getMessage();
}

}
catch(SQLException ex)
{
msg=ex.getMessage();
}
}
public int doEndTag() throws JspException
{
check();
return EVAL_PAGE;
}
}

最佳答案

您在字 rune 字方面存在一些基本语法错误,例如 u.equals(%) 应该是 u.equals('%') 等,但您可以抛出如果您使用正则表达式,则可以删除大部分代码:

boolean ok = !username.matches(".*[%<>&;'\0-].*");

方括号中的字符是一个字符类,表示列出的字符中的“任何一个”。如果输入中存在任何这些字符,则整个表达式将匹配,因此此类匹配的否定意味着用户名包含非法字符。

关于java - java中如何过滤输入文本中的特殊字符以防止XSS攻击?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21935426/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com