㈠ Spring MVC 如何防止XSS、sql注入攻擊
在數據進入資料庫之前對非法字元進行轉義,在更新和顯示的時候將非法字元還原 在顯示的時候對非法字元進行轉義 如果項目還處在起步階段,建議使用第二種,直接使用jstl的<c:out>標簽即可解決非法字元的問題。當然,對於Javascript還需要自己處理一下,寫一個方法,在解析從伺服器端獲取的數據時執行以下escapeHTML()即可。 附:Javascript方法: String.prototype.escapeHTML = function () { return this.replace(/&/g, 『&』).replace(/>/g, 『>』).replace(/</g, 『<』).replace(/」/g, 『"』);} 如果項目已經開發完成了,又不想大批量改動頁面的話,可以採用第一種方法,此時需要藉助Spring MVC的@InitBinder以及org.apache.commons.lang.PropertyEditorSupport、org.apache.commons.lang.StringEscapeUtils public class StringEscapeEditor extends PropertyEditorSupport { private boolean escapeHTML; private boolean escapeJavaScript; private boolean escapeSQL; public StringEscapeEditor() { super(); } public StringEscapeEditor(boolean escapeHTML, boolean escapeJavaScript, boolean escapeSQL) {super();this.escapeHTML = escapeHTML; this.escapeJavaScript = escapeJavaScript; this.escapeSQL = escapeSQL;}@Overridepublic void setAsText(String text) { if (text == null) { setValue(null);} else {String value = text; if (escapeHTML) { value = StringEscapeUtils.escapeHtml(value); } if (escapeJavaScript) { value = StringEscapeUtils.escapeJavaScript(value); } if (escapeSQL) { value = StringEscapeUtils.escapeSql(value); } setValue(value); }}@Overridepublic String getAsText() { Object value = getValue(); return value != null ? value.toString() : 「」; }} 在上面我們做了一個EscapeEditor,下面還要將這個Editor和Spring的Controller綁定,使伺服器端接收到數據之後能夠自動轉移特殊字元。 下面我們在@Controller中注冊@InitBinder @InitBinder public void initBinder(WebDataBinder binder) { 這個方法可以直接放到abstract Controller類中,這樣子每個Controller實例都能夠擁有該方法。至此第二種方法完成,但是在還原的方法暫時還沒有。
㈡ springMVC JdbcTemplate 問題
這個就是注入風險啦。如果老的項目就是這樣的話,可以使用一些黑盒掃描軟體掃一下,看看哪些請求會存在這種SQL注入啊,XSS等漏洞。 通用的做法就是在應用層加一個filter,過濾一些特殊字元,如單引號 雙引號 百分號...這個要跟業務結合,還要保證你以前的功能沒有問題。
如果真的是業務要求,必須可以使用前台傳遞過來的參數拼接要執行的SQL。。。那就控制一下只能查詢唄~~這個是木有辦法滴。。
㈢ springmvc怎麼指定返回層級
隨著企業信息化的不斷深入,各種各樣的信息系統成為提高企業運營及管理效率的必備工具,越來越多的企業核心機密如銷售機會、客戶資料、設計方案等通過信息系統存儲、備案、流轉,這些核心資料一旦外泄,勢必對企業造成極大損失。科技時代,信息是企業生存的命脈,信息的安全也必然成為企業極度重視的問題。如今,隨著各種信息安全措施的實施,信息泄密已經從外部泄漏向內部人員泄漏轉移。外部的黑客、病毒要想獲取有價值的信息,必須穿透多道防火牆,逃避多重殺毒工具的追殺,再對信息進行篩選才能如願以償;而內部人員知道什麼信息是有價值的,如果不對信息進行必要的安全防護,企業內部一些有有心人員會十分容易地獲取自己所需要的信息資料。
最近的一份調查顯示,幾乎有一半的各行各業專業人士承認當他們跳槽時會帶走資料,包括文件、銷售協議和合同清單等各種資料,並將它們告訴下一個老闆。調查還發現,八成的職員可以輕松地下載「有競爭力」的資料和信息,然後帶到下一份工作中。
信息安全任重而道遠。要保證信息系統的安全,需要考慮到很多方面如防火牆、加密傳輸、防SQL注入等,但很多的安全方案都是從如何把守大門著手的,如身份認證、數字證書,不管是傳統的用戶名加口令方式還是基於生物特徵識別的指紋、視網膜掃描技術,乃至各類電子政務領域常用的USBkey都是在進入系統大門時大做文章,一旦身份識別完成進入大門後,卻聽之任之,很少再有處理方案。本文重點不在如何進行身份認證,而在身份認證完成後也即進入系統大門後,如何保證用戶只在自己有許可權的范圍內進行操作,而不是可以進行任意功能的操作即系統內部細粒度許可權控制解決方案。
常用的許可權系統設計模式是以角色為核心的,即角色是具有相同許可權的一類人員的集合:
1. 一個角色可以有包含多個操作人員,一個操作人員也可以屬於多個角色
2. 一個角色可以具有多個功能的操作許可權,一個功能也可以被多個角色所擁有。
在登錄時通過查詢登錄用戶所屬角色,即可得到個用戶的所有功能集合,如下圖:
多數業務系統的頁面功能菜單設計是以三級為標準的,即一級功能菜單、二級功能菜單、三級功能菜單,通常情況下一二級功能菜單只是用於功能分類,是不具有功能訪問地址的,三級菜單才是功能的真正入口,常規許可權系統就是通過控制每個人員對應的功能菜單的顯示與隱藏來實現許可權控制。要實現細粒度許可權控制,可在設計功能表時再加入第四層:頁面元素,隸屬於第三層功能菜單,這些頁面元素用來標識功能頁面中的每一個功能按鈕,如增加、修改、刪除、查詢都可算是頁面元素,在為角色分配許可權時,第四層也同樣納入統一許可權管理,如果有此頁面元素的許可權,則頁面上就顯示該按鈕,如果沒有此頁面元素的功能許可權,則該按鈕就不會顯示出來。
對於沒有許可權訪問的功能或頁面除了進行前台的隱藏之外,還需要在後台訪問時進行許可權的驗證,否則操作人員繞開頁面直接通過輸入URL訪問功能就會造成許可權漏洞,通過SpringMVC+Annotation的方式可以輕松實現,代碼如下:
第一步:創建SpringMVC攔截器,攔截所有需要進行許可權驗證的功能請求
[html] view plain在CODE上查看代碼片派生到我的代碼片
<!-- 開啟註解 -->
<mvc:annotation-driven/>
<!-- 靜態資源訪問 -->
<mvc:resources location="/static/" mapping="/static/**"/>
<!-- 攔截器 -->
<mvc:interceptors>
<!-- 多個攔截器,順序執行 -->
<mvc:interceptor>
<!-- 如果不配置或/**,將攔截所有的Controller -->
<mvc:mapping path="/**" />
<!-- 在Freemarker界面展示之前做一些通用處理 -->
<bean class="xx.xxxx.core.web.FreeMarkerViewInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>
第二步:創建作用於Method級別的Annotation類,用於傳入功能ID
[java] view plain在CODE上查看代碼片派生到我的代碼片
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Permission {
/**
* 功能ID,該功能ID,對應資料庫中的功能ID
* @return
* @version V1.0.0
* @date Jan 13, 2014 4:59:35 PM
*/
String value();
}
第三步:通過靜態常量建立資料庫中的功能ID與執行方法的一對一關系
[java] view plain在CODE上查看代碼片派生到我的代碼片
public class FuncConstants {
/**
* 系統管理-角色管理-增加角色
*/
public final static String Xtgl_Jsgl_AddJs = "";
/**
* 系統管理 - 部門管理- 部門列表
*/
public final static String Xtgl_Bmgl_BmList = "";
}
第四步:在SpringMVC攔截器中驗證許可權
[java] view plain在CODE上查看代碼片派生到我的代碼片
/**
* FreeMarker視圖攔截器,頁面展示之前做一些通用處理
* @version V1.0.0
* @date Dec 12, 2013 4:20:04 PM
*/
public class 成都app軟體開發公司外包企業http://www.yingtaow.com/appdz/?FreeMarkerViewInterceptor extends HandlerInterceptorAdapter {
public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3) throws Exception {
}
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object arg2, ModelAndView view) throws Exception {
String contextPath = request.getContextPath();
if (view != null) {
request.setAttribute("base", contextPath);
}
}
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//處理Permission Annotation,實現方法級許可權控制
HandlerMethod method = (HandlerMethod)handler;
Permission permission = method.getMethodAnnotation(Permission.class);
//如果為空在表示該方法不需要進行許可權驗證
if (permission == null) {
return true;
}
//驗證是否具有許可權
if (!WebUtil.hasPower(request, permission.value())) {
response.sendRedirect(request.getContextPath()+"/business/nopermission.html");
return false;
}
return true;
//注意此處必須返回true,否則請求將停止
//return true;
}
}
至此,基於按鈕、方法驗證的細粒度許可權體系完成!
㈣ 大家暢所欲言,當jFinal遇到XSS和SQL注入怎麼處理
數據進入資料庫之前對非法字元進行轉義,在更新和顯示的時候將非法字元還原
在顯示的時候對非法字元進行轉義
如果項目還處在起步階段,建議使用第二種,直接使用jstl的<c:out>標簽即可解決非法字元的問題。當然,對於Javascript還需要自己處理一下,寫一個方法,在解析從伺服器端獲取的數據時執行以下escapeHTML()即可。
附:Javascript方法:
String.prototype.escapeHTML = function () {
return this.replace(/&/g, 『&』).replace(/>/g, 『>』).replace(/</g, 『<』).replace(/」/g, 『"』);
}
如果項目已經開發完成了,又不想大批量改動頁面的話,可以採用第一種方法,此時需要藉助Spring MVC的@InitBinder以及org.apache.commons.lang.PropertyEditorSupport、org.apache.commons.lang.StringEscapeUtils
public class StringEscapeEditor extends PropertyEditorSupport {
private boolean escapeHTML;
private boolean escapeJavaScript;
private boolean escapeSQL;
public StringEscapeEditor() { super(); }
public StringEscapeEditor(boolean escapeHTML, boolean escapeJavaScript, boolean escapeSQL) {
super();
this.escapeHTML = escapeHTML;
this.escapeJavaScript = escapeJavaScript;
this.escapeSQL = escapeSQL;
}
@Override
public void setAsText(String text) {
if (text == null) {
setValue(null);
㈤ 大哥,在springMVC下防禦xss漏洞。和sql注入的問題知道如何解決嗎
不知道你是想防哪種xss,存儲型?反射型?Dom型?
sql注入預防在編程時機可以做到,不要使用字元串拼接的sql語句,就可以做到
㈥ spring mvc sql注入 問題
這樣太容易出現注入問題了,一些關鍵屬性不能進行拼接的,使用SQL預編譯的的形式吧,也就是使用?(問號)傳進去
㈦ 求JAVA大神幫幫忙想個幾個類似這樣的項目不要太難 製作簡歷用的- -謝謝了
哥們兒,你確定電信運營支撐用的是這點技術?我在聯通大數據中心,這種系統用到的都是框架,比如springmvc+spring shiro+mybatis+前台BootStrap,且實現單點登陸+隨機手機密碼驗證登錄,我感覺電信的技術沒有這么low吧,哪有用純jsp的,你最好換個項目比如圖書館里系統,在線購物系統等等,你這讓人一看就覺得你是在說謊,比如面試官問你,你這登陸如何實現防止sql注入的,這問題可能還算比較簡單,也有可能問你更難的,建議換個簡單點兒的項目吧,別讓人感覺你不誠實
㈧ springmvc 不進去控制器怎麼注入
public class AutoRun implements Runnable {
@Resource
private SqlService sqlService;
public void setSqlService(SqlService sqlService) {
this.sqlService = sqlService;
}
public void run() {
while (true) {
try {
String a = new Date().toLocaleString();
sqlService.read("select '"+a+"' from al");
System.out.println(a);
Thread.sleep(100);// 休眠2分鍾
} catch (InterruptedException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
㈨ spring MVC下如何能有效的防止XSS漏洞以及sql注入
在數據進入資料庫之前對非法字元進行轉義,在更新和顯示的時候將非法字元還原
在顯示的時候對非法字元進行轉義
如果項目還處在起步階段,建議使用第二種,直接使用jstl的標簽即可解決非法字元的問題。當然,對於Javascript還需要自己處理一下,寫一個方法,在解析從伺服器端獲取的數據時執行以下escapeHTML()即可。
附:Javascript方法:
String.prototype.escapeHTML = function () {
return this.replace(/&/g, 『&』).replace(/>/g, 『>』).replace(/
㈩ Spring MVC中,遇到XSS、SQL注入攻擊怎麼處理
1、在數據進入資料庫之前對非法字元進行轉義,在更新和顯示的時候將非法字元還原;
2、在顯示的時候對非法字元進行轉義;
如果項目還處在起步階段,建議使用第二種,直接使用jstl的標簽即可解決非法字元的問題。在解析從伺服器端獲取的數據時執行以下escapeHTML()即可。
來源:麥子學院