首頁 Java Java面試題 2020全新Java面試題-Java Web(二)

2020全新Java面試題-Java Web(二)

Jun 16, 2020 pm 05:29 PM
java java web 面試題

2020全新Java面試題-Java Web(二)

一、如果客戶端禁止 cookie 能實現 session 還能用嗎?

Cookie與 Session,一般認為是兩個獨立的東西,Session採用的是在伺服器端保持狀態的方案,而Cookie採用的是在客戶端保持狀態的方案。但為什麼禁用Cookie就不能得到Session呢?因為Session是用Session ID來確定目前對話所對應的伺服器Session,而Session ID是透過Cookie來傳遞的,禁用Cookie相當於失去了Session ID,也就得不到Session了。

假定使用者關閉Cookie的情況下使用Session,其實作途徑有以下幾種:

  • 設定php.ini設定檔中的「session.use_trans_sid = 1 ”,或編譯時開啟了“--enable-trans-sid”選項,讓PHP自動跨頁傳遞Session ID。

  • 手動透過URL傳值、隱藏表單傳遞Session ID。

  • 以檔案、資料庫等形式保存Session ID,在跨頁過程中手動呼叫。

二、spring mvc 和 struts 的差別是什麼?

1、攔截機制的不同

Struts2是類別層級的攔截,每次要求就會建立一個Action,和Spring整合時Struts2的ActionBean注入作用域是原型模式prototype,然後透過setter,getter吧request資料注入到屬性。 Struts2中,一個Action對應一個request,response上下文,在接收參數時,可以透過屬性接收,這說明屬性參數是讓多個方法共享的。 Struts2中Action的一個方法可以對應一個url,而其類別屬性卻被所有方法共享,這也就無法用註解或其他方式標識其所屬方法了,只能設計為多例。

SpringMVC是方法層級的攔截,一個方法對應一個Request上下文,所以方法直接基本上是獨立的,獨享request,response資料。而每個方法同時又何一個url對應,參數的傳遞是直接注入到方法中的,是方法所獨有的。處理結果透過ModeMap傳回給框架。在Spring整合時,SpringMVC的Controller Bean預設單例模式Singleton,所以預設對所有的請求,只會創建一個Controller,有應為沒有共享的屬性,所以是線程安全的,如果要改變預設的作用域,需要添加@Scope註解修改。

Struts2有自己的攔截Interceptor機制,SpringMVC這是用的是獨立的Aop方式,這樣導致Struts2的設定檔量還是比SpringMVC大。

(相關教學推薦:java入門程式

2、底層框架的不同

Struts2採用Filter(StrutsPrepareAndExecuteFilter)實現,SpringMVC(DispatcherServlet )則採用Servlet實作。 Filter在容器啟動之後即初始化;服務停止以後墜毀,晚於Servlet。 Servlet在呼叫時初始化,先於Filter調用,服務停止後銷毀。

3、效能方面

Struts2是類別層級的攔截,每次要求對應實例一個新的Action,需要載入所有的屬性值注入,SpringMVC實作了零配置,由於SpringMVC基於方法的攔截,有載入一次單例模式bean注入。所以,SpringMVC開發效率和效能高於Struts2。

4、配置方面

spring MVC和Spring是無縫的。從這個專案的管理和安全上也比Struts2高。

三、如何避免 sql 注入?

  • PreparedStatement(簡單又有效的方法)

  • 使用正規表示式過濾傳入的參數

  • #字串過濾

  • JSP中呼叫函數檢查是否包函非法字元

  • JSP頁面判斷程式碼

四、什麼是XSS 攻擊,如何避免?

XSS攻擊又稱CSS,全名為Cross Site Script  (跨站腳本攻擊),其原理是攻擊者向有XSS漏洞的網站中輸入惡意的HTML 程式碼,當使用者瀏覽網站時,這段HTML 程式碼會自動執行,達到攻擊的目的。

XSS 攻擊類似於SQL 注入攻擊,SQL注入攻擊中以SQL語句作為用戶輸入,達到查詢/修改/刪除資料的目的,而在xss攻擊中,透過插入惡意腳本,實現對用戶遊覽器的控制,取得使用者的一些資訊。 XSS是 Web 程式中常見的漏洞,XSS 屬於被動式且用於客戶端的攻擊方式。

XSS防範的整體思路是:對輸入(和URL參數)進行過濾,對輸出進行編碼。

(影片教學推薦:java影片教學

五、什麼是 CSRF 攻擊,如何避免?

CSRF(Cross-site request forgery)也被稱為 one-click attack或 session riding,中文全稱是叫跨站請求偽造。一般來說,攻擊者透過偽造用戶的瀏覽器的請求,向訪問一個用戶自己曾經認證訪問過的網站發送出去,使目標網站接收並誤以為是用戶的真實操作而去執行命令。常用於盜取帳號、轉帳、發送虛假訊息等。攻擊者利用網站對請求的驗證漏洞而實現這樣的攻擊行為,網站能夠確認請求來自使用者的瀏覽器,卻無法驗證請求是否源自於使用者的真實意願下的操作行為。

如何避免:

1、驗證 HTTP Referer 欄位

HTTP頭中的Referer欄位記錄了該 HTTP 請求的來源位址。在通常情況下,訪問一個安全受限頁面的請求來自於同一個網站,而如果駭客要對其實施 CSRF攻擊,他一般只能在他自己的網站建構請求。因此,可以透過驗證Referer值來防禦CSRF 攻擊。

2、使用驗證碼

關鍵操作頁面加上驗證碼,後台收到請求後透過判斷驗證碼可以防禦CSRF。但這種方法對使用者不太友善。

3、在請求位址中加入token並驗證

CSRF 攻擊之所以能夠成功,是因為駭客可以完全偽造使用者的請求,而這個要求中所有的使用者驗證資訊都是存在於cookie中,因此駭客可以在不知道這些驗證資訊的情況下直接利用使用者自己的cookie 來通過安全驗證。

要抵禦 CSRF,關鍵在於在請求中放入駭客所不能偽造的訊息,並且該資訊不存在於 cookie 之中。可以在HTTP 請求中以參數的形式加入一個隨機產生的token,並在伺服器端建立一個攔截器來驗證這個token,如果請求中沒有token或token 內容不正確,則認為可能是CSRF 攻擊而拒絕該請求。

這種方法要比檢查Referer 要安全一些,token 可以在用戶登陸後產生並放於session之中,然後在每次請求時把token 從session 中拿出,與請求中的token進行比對,但這種方法的困難在於如何把token 以參數的形式加入請求。

對於GET 請求,token 會附在請求地址之後,這樣URL 就變成

http://url?csrftoken=tokenvalue
登入後複製

而對於POST 請求來說,要在form 的最後加上

<input type="hidden" name="csrftoken" value="tokenvalue"/>
登入後複製

這樣就把token以參數的形式加入請求了。

4、在HTTP 頭中自訂屬性並驗證

這種方法也是使用token 並進行驗證,和上一個方法不同的是,這裡並不是把token以參數的形式置於HTTP 請求之中,而是把它放到HTTP 頭中自訂的屬性裡。透過 XMLHttpRequest 這個類,可以一次給所有該類請求加上 csrftoken 這個 HTTP 頭屬性,並把 token 值放入其中。

這樣解決了上種方法在請求中加入token 的不便,同時,透過XMLHttpRequest 請求的位址不會被記錄到瀏覽器的位址欄,也不用擔心token 會透過Referer 洩漏到其他網站中去。

如果您想了解更多相關面試題,可以造訪java面試題專欄。

以上是2020全新Java面試題-Java Web(二)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Java Spring 面試題 Java Spring 面試題 Aug 30, 2024 pm 04:29 PM

在本文中,我們保留了最常被問到的 Java Spring 面試問題及其詳細答案。這樣你就可以順利通過面試。

突破或從Java 8流返回? 突破或從Java 8流返回? Feb 07, 2025 pm 12:09 PM

Java 8引入了Stream API,提供了一種強大且表達力豐富的處理數據集合的方式。然而,使用Stream時,一個常見問題是:如何從forEach操作中中斷或返回? 傳統循環允許提前中斷或返回,但Stream的forEach方法並不直接支持這種方式。本文將解釋原因,並探討在Stream處理系統中實現提前終止的替代方法。 延伸閱讀: Java Stream API改進 理解Stream forEach forEach方法是一個終端操作,它對Stream中的每個元素執行一個操作。它的設計意圖是處

PHP:網絡開發的關鍵語言 PHP:網絡開發的關鍵語言 Apr 13, 2025 am 12:08 AM

PHP是一種廣泛應用於服務器端的腳本語言,特別適合web開發。 1.PHP可以嵌入HTML,處理HTTP請求和響應,支持多種數據庫。 2.PHP用於生成動態網頁內容,處理表單數據,訪問數據庫等,具有強大的社區支持和開源資源。 3.PHP是解釋型語言,執行過程包括詞法分析、語法分析、編譯和執行。 4.PHP可以與MySQL結合用於用戶註冊系統等高級應用。 5.調試PHP時,可使用error_reporting()和var_dump()等函數。 6.優化PHP代碼可通過緩存機制、優化數據庫查詢和使用內置函數。 7

PHP與Python:了解差異 PHP與Python:了解差異 Apr 11, 2025 am 12:15 AM

PHP和Python各有優勢,選擇應基於項目需求。 1.PHP適合web開發,語法簡單,執行效率高。 2.Python適用於數據科學和機器學習,語法簡潔,庫豐富。

Java程序查找膠囊的體積 Java程序查找膠囊的體積 Feb 07, 2025 am 11:37 AM

膠囊是一種三維幾何圖形,由一個圓柱體和兩端各一個半球體組成。膠囊的體積可以通過將圓柱體的體積和兩端半球體的體積相加來計算。本教程將討論如何使用不同的方法在Java中計算給定膠囊的體積。 膠囊體積公式 膠囊體積的公式如下: 膠囊體積 = 圓柱體體積 兩個半球體體積 其中, r: 半球體的半徑。 h: 圓柱體的高度(不包括半球體)。 例子 1 輸入 半徑 = 5 單位 高度 = 10 單位 輸出 體積 = 1570.8 立方單位 解釋 使用公式計算體積: 體積 = π × r2 × h (4

PHP與其他語言:比較 PHP與其他語言:比較 Apr 13, 2025 am 12:19 AM

PHP適合web開發,特別是在快速開發和處理動態內容方面表現出色,但不擅長數據科學和企業級應用。與Python相比,PHP在web開發中更具優勢,但在數據科學領域不如Python;與Java相比,PHP在企業級應用中表現較差,但在web開發中更靈活;與JavaScript相比,PHP在後端開發中更簡潔,但在前端開發中不如JavaScript。

PHP與Python:核心功能 PHP與Python:核心功能 Apr 13, 2025 am 12:16 AM

PHP和Python各有優勢,適合不同場景。 1.PHP適用於web開發,提供內置web服務器和豐富函數庫。 2.Python適合數據科學和機器學習,語法簡潔且有強大標準庫。選擇時應根據項目需求決定。

創造未來:零基礎的 Java 編程 創造未來:零基礎的 Java 編程 Oct 13, 2024 pm 01:32 PM

Java是熱門程式語言,適合初學者和經驗豐富的開發者學習。本教學從基礎概念出發,逐步深入解說進階主題。安裝Java開發工具包後,可透過建立簡單的「Hello,World!」程式來實踐程式設計。理解程式碼後,使用命令提示字元編譯並執行程序,控制台上將輸出「Hello,World!」。學習Java開啟了程式設計之旅,隨著掌握程度加深,可創建更複雜的應用程式。

See all articles