java防注入
防止sql注入的方法最简单的就是例:用户登录需要用户名和密码先用户输入的用户名从数据库中把与其对应的密码查出来在把这密码和用户输入的密码对比就OK了自己试试看吧通得过的
⑵ java web如何防止html,js注入
在java Web体系中,可以写自定义标签,过滤用户输入,也可以写一个filter过滤器。比如说自定义标签。
开发步骤:
1 写一个标签处理类
2在/WEB-INF/目录下,写一个*.tld文件,目的是让Web容器知道自定义标签和标签处理类的对应关系
3 在JSP页面中,通过<%@taglib%>指令引用标签库.
4 部署web应用,访问simple.jsp即可
其中,标签处理类可以这样写,转义大于号,小于号等特殊符号。
packagecn.itcast.web.jsp.tag;
importjava.io.IOException;
importjava.io.StringWriter;
importjavax.servlet.jsp.JspException;
importjavax.servlet.jsp.PageContext;
importjavax.servlet.jsp.tagext.JspFragment;
importjavax.servlet.jsp.tagext.SimpleTagSupport;
//<simple:filter>标签处理类
{
publicvoiddoTag()throwsJspException,IOException{
JspFragmentjspFragment=this.getJspBody();
StringWriterwriter=newStringWriter();
jspFragment.invoke(writer);
Stringtemp=writer.getBuffer().toString();
//结果必定是转义后的字符串
temp=filter(temp);
PageContextpageContext=(PageContext)this.getJspContext();
pageContext.getOut().write(temp);
}
publicStringfilter(Stringmessage){
if(message==null)
return(null);
charcontent[]=newchar[message.length()];
message.getChars(0,message.length(),content,0);
StringBufferresult=newStringBuffer(content.length+50);
for(inti=0;i<content.length;i++){
switch(content[i]){
case'<':
result.append("<");
break;
case'>':
result.append(">");
break;
case'&':
result.append("&");
break;
case'"':
result.append(""");
break;
default:
result.append(content[i]);
}
}
return(result.toString());
}
}
⑶ java中预处理PrepareStatement为什么能起到防止SQL注入的作用
不使用这个,我们一般做查询或更新的条件,是用字符串拼起来的,例如
Stringid=(String)request.getAttribute("id");//假设页面上传了一个id值过来
StringSQL="SELECTID,NAMEFROMUSERWHEREID='"+id+"'";//拼接成一个完整的sql语句
但是这样带来了一个风险,因为id是界面上客户输入的,所以如果没有进入校验,有人输入了一个aa' or '1'='1 把这个值代入到上面的sql语句里面,sql语句就变成了
SELECTID,NAMEFROMUSERWHEREID='aa'or'1'='1'
这样就能查到所有的数据了,也就是SQL注入
但是,如果用preparedstatement的话,就没有这个问题
StringSQL="SELECTID,NAMEFROMUSERWHEREID=?"
然后再将值set进去,如果值里面有引号等字符时,会自动的启用转义,不会破坏这个SQL语句的结果,也就不会造成SQL注入了
⑷ java拼接sql怎么防止注入
使用Hibernate框架的SQL注入防范 Hibernate是目前使用最多的ORM框架,在Java Web开发中,很多时候不直接使用JDBC,而使用Hibernate来提高开发效率。
在Hibernate中,仍然不应该通过拼接HQL的方式,而应使用参数化的方式来防范SQL注入。有两种方式,一种仍然是使用JDBC一样的占位符“?”,但更好的方式是使用Hibernate的命名参数,例如检测用户名和密码是否正确,使用Hibernate可以写成:
String queryStr = “from user where username=:username ”+”password=:password”;
List result = session.createQuery(queryStr).setString("username", username).setString("password", password).list();
⑸ java里拼接sql怎么防注入
最简单最容易的是限制用户输入。简单点的就是不允许用户输入单引号 和 --,因为单引号号--在SQL中都是影响执行的,两种方式一种是在JSP中加判断:
3
另一种是在SQL拼接是对单引号和--等进行转义,str = str.replace("'", "''");
⑹ 如何预防 java 日志的注入
采用预编译语句集,它内置了处理SQL注入的能力,只要使用它的setString方法传值即可: String sql= "select * from users where username=?; PreparedStatement preState = conn.prepareStatement(sql); preState.setString(1, userName); preState.setString(2, password); ResultSet rs = preState.executeQuery();
⑺ java中preparedstatement为什么可以防止sql注入
不知道楼主用没有用过
select * from tab_name where name= '"+name+"' and passwd='"+passwd+"';
把其中passwd换成 [' or '1' = '1] 这样就可以完成sql注入
更有可能对你的数据库表drop操作
如果使用preparedstatement的话就可以直接使用预编译,PreparedStatement不允许在插入时改变查询的逻辑结构.
举例
statement
select * from tab_name where name= '"+name+"' and passwd='"+passwd+"';
passwd就可以换成 ‘ or '1'='1
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(sql);
preparedstatement
select * from tab_name where name=? and passwd=? ;
PreparedStatement pst = con.prepareStatement(sql);
pstmt.setString(1, name);
pstmt.setString(2, passwd);
ResultSet rs = pstmt.executeQuery();
⑻ java防止sql注入有哪些方法
前台我们可以通过过滤用户输入,后台可以通过PreparedStatement来代替Statement来执行SQL语句。
⑼ 命令注入防御(command injection)
https://b1ngz.github.io/java-os-command-injection-note/
方法1 白名单校验命令参数
方法2 单引号禁止命令注入
一般情况下尽可能使用白名单彻底解决命令注入风险,但是存在某些场景白名单不支持,例如 命令参数是设备密码,不能用白名单 限制特殊字符(&& || | ;等特殊字符),这时可以考虑使用单引号禁止命令解析功能。
⑽ java服务接口怎么避免xss注入攻击
过滤特定符号
publicstaticStringguolv(Stringa){
a=a.replaceAll("%22","");
a=a.replaceAll("%27","");
a=a.replaceAll("%3E","");
a=a.replaceAll("%3e","");
a=a.replaceAll("%3C","");
a=a.replaceAll("%3c","");
a=a.replaceAll("<","");
a=a.replaceAll(">","");
a=a.replaceAll(""","");
a=a.replaceAll("'","");
a=a.replaceAll("\+","");
a=a.replaceAll("\(","");
a=a.replaceAll("\)","");
a=a.replaceAll("and","");
a=a.replaceAll("or","");
a=a.replaceAll("1=1","");
returna;
}