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;
}