A. struts2防止sql注入
struts是控制層 根本不存在sql注入的問題 他負責頁面的跳轉,你說的應該是在持久層
B. 在STRUTS框架 中如何有效的防止 SQL 注入式攻擊
我習慣用hibernate。這個自己不會去寫sql語句。這個好像能防治SQL 注入式攻擊。
1 字元串過濾
2 preparedstatement
第一個以前聽說過....好像是用一個類javax.servlet.Filter
給你斷代碼可以參考一下
package filter;
import java.io.IOException;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
public class EncodingFilter implements Filter
{
protected FilterConfig filterConfig;
private String targetEncoding;
public EncodingFilter()
{
targetEncoding = "gb2312";//直接初始化0912
}
public void init(FilterConfig filterconfig) throws ServletException
{
filterConfig = filterconfig;
//targetEncoding = filterconfig.getInitParameter("encoding");//web.xml掛參初始化
}
public void doFilter(ServletRequest servletrequest, ServletResponse servletresponse, FilterChain filterchain)
throws IOException, ServletException
{
HttpServletRequest httpservletrequest = (HttpServletRequest)servletrequest;
httpservletrequest.setCharacterEncoding(targetEncoding);
System.out.println("使用" targetEncoding "對請求進行編碼過濾");
filterchain.doFilter(servletrequest, servletresponse);
}
public void setFilterConfig(FilterConfig filterconfig)
{
filterConfig = filterconfig;
}
public void destroy()
{
filterConfig = null;
}
}
C. java如何防止sql注入
採用預編譯語句集,它內置了處理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();
D. 如何防止SQL注入
(1) 腳本注入式的攻擊
(2) 惡意用戶輸入用來影響被執行的 SQL 腳本
具體可以參考:
http://wenku..com/view/5283ca75767f5acfa1c7cdd4.html
http://tiandm506.blog.163.com/blog/static/12781832720131461528297/
可以搜索到很多
看什麼對自己有用
E. java的框架(比如struts2)對於xss攻擊、sql注入等黑客方式有防禦么
框架本身並不具有這些功能。
防止xss,sql等的攻擊大部分需要程序員自己注意。
sql注入本身就是sql語句寫法的漏洞導致。
xss攻擊的防禦還是需要對非法字元串進行判斷過濾。
F. 如何防止sql注入
sql注入其實就是在這些不安全控制項內輸入sql或其他資料庫的一些語句,從而達到欺騙伺服器執行惡意到嗎影響到資料庫的數據。防止sql注入,可以在接受不安全空間的內容時過濾掉接受字元串內的「'」,那麼他不再是一條sql語句,而是一個類似sql語句的zifuc,執行後也不會對資料庫有破壞。
如:-----下面這一段是找的
username = request("username") //獲取用戶名 這里是通過URL傳值獲取的
password = request("password") //獲取密碼 也是通過URL傳值獲取的
sql="select * from userlist where username = '" & username & "' and password = '" & password & "'"--------如果某個人知道某個用戶名是admin,常常有人網站的管理員用戶名就是admin,這是密碼可以選用'or 1 or ',
那麼sql="select * from userlist where username = 'admin' and password = '' or 1 or ''",顯然1是恆真的,那麼驗證密碼就通過了。補充:
防止的方式比較多,比如可以限制username,password中出現"'"這些字元,一般網站都是只允許數字,字元,下劃線的組合,這可以通過javascript驗證。也可以採取用存儲過程代替sql拼接,等等。
G. 防止sql注入
如果使用.net,那就簡單了,可以用ADO.NET的參數化查詢。
例如:
SqlCommand cmd=new SqlCommand("SELECT * FROM test WHERE id=@id",conn);
cmd.Parameters.AddWithValue("@id",sid);
cmd.ExecuteNonQuery();
這個有很多種用法,詳細的內容需要對離線資料庫的概念進行理解
H. struts2防止sql注入
struts是控制層
根本不存在sql注入的問題
他負責頁面的跳轉,你說的應該是在持久層
I. struts2怎麼防止sql注入
sql注入大家都不陌生,是一種常見的攻擊方式,攻擊者在界面的表單信息或url上輸入一些奇怪的sql片段,例如「or 『1』=』1』」這樣的語句,有可能入侵參數校驗不足的應用程序。所以在我們的應用中需要做一些工作,來防備這樣的攻擊方式。在一些安全性很高的應用中,比如銀行軟體,經常使用將sql語句全部替換為存儲過程這樣的方式,來防止sql注入,這當然是一種很安全的方式,但我們平時開發中,可能不需要這種死板的方式。
一起jquery,17jquery
mybatis框架作為一款半自動化的持久層框架,其sql語句都要我們自己來手動編寫,這個時候當然需要防止sql注入。其實Mybatis的sql是一個具有「輸入+輸出」功能,類似於函數的結構,如下:
一起jquery,17jquery
<</span>select id="getBlogById" resultType="Blog" parameterType=」int」>
17jquery.com
select id,title,author,content 內容來自17jquery
from blog where id=#{id} 一起jquery,17jquery
</</span>select> 內容來自17jquery
這里,parameterType標示了輸入的參數類型,resultType標示了輸出的參數類型。回應上文,如果我們想防止sql注入,理所當然地要在輸入參數上下功夫。上面代碼中高亮部分即輸入參數在sql中拼接的部分,傳入參數後,列印出執行的sql語句,會看到sql是這樣的:
內容來自17jquery
select id,title,author,content from blog where id = ?
一起jquery,17jquery
不管輸入什麼參數,列印出的sql都是這樣的。這是因為mybatis啟用了預編譯功能,在sql執行前,會先將上面的sql發送給資料庫進行編譯,執行時,直接使用編譯好的sql,替換佔位符「?」就可以了。因為sql注入只能對編譯過程起作用,所以這樣的方式就很好地避免了sql注入的問題。
一起jquery,17jquery
mybatis是如何做到sql預編譯的呢?其實在框架底層,是jdbc中的PreparedStatement類在起作用,PreparedStatement是我們很熟悉的Statement的子類,它的對象包含了編譯好的sql語句。這種「准備好」的方式不僅能提高安全性,而且在多次執行一個sql時,能夠提高效率,原因是sql已編譯好,再次執行時無需再編譯。 一起jquery,17jquery
話說回來,是否我們使用mybatis就一定可以防止sql注入呢?當然不是,請看下面的代碼:
17jquery.com
<</span>select id="orderBlog" resultType="Blog" parameterType=」map」>
17jquery.com
select id,title,author,content 一起jquery,17jquery
from blog order by ${orderParam}
17jquery.com
</</span>select>
內容來自17jquery
仔細觀察,內聯參數的格式由「#{xxx}」變為了${xxx}。如果我們給參數「orderParam」賦值為」id」,將sql列印出來,是這樣的:
內容來自17jquery
select id,title,author,content from blog order by id
一起jquery,17jquery
顯然,這樣是無法阻止sql注入的。在mybatis中,」${xxx}」這樣格式的參數會直接參與sql編譯,從而不能避免注入攻擊。但涉及到動態表名和列名時,只能使用「${xxx}」這樣的參數格式,所以,這樣的參數需要我們在代碼中手工進行處理來防止注入。 一起jquery,17jquery
結論:在編寫mybatis的映射語句時,盡量採用「#{xxx}」這樣的格式。若不得不使用「${xxx}」這樣的參數,要手工地做好過濾工作,來防止sql注入攻擊。
J. STRUTS 中如何有效的防止 SQL 注入式攻擊
建議用hibernate
因為他裡面用的是hql所以很難進行SQL 注入式攻擊。
也可以用存儲過程..